home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- from util.callbacks import callsback, named_callbacks
- from util.threads.timeout_thread import call_later
- from fberrors import FacebookError
- import traceback
- import logging
- log = logging.getLogger('facebook.permchecks')
- PERM_QUERY = 'SELECT %s FROM permissions WHERE uid=%d'
-
- class PermCheck(object):
- max_errcount = 3
-
- def __init__(self, api, perms = None):
- self.api = api
- if not perms:
- pass
- self.perms = []
- self.errcount = 0
-
-
- def check(self, callback = None):
- log.critical('checking with callback: %r', callback)
- self.callback = callback
- if not self.perms:
- return self.callback.success({ })
- self.api.query(PERM_QUERY % (','.join(self.perms), int(self.api.uid)), success = self.check_success, error = self.check_error)
-
- check = callsback(check)
-
- def check_success(self, ret):
- log.info('check_success(%r)', ret)
- if not ret:
- return self.check_error(ret)
-
- try:
- perms = ret[0]
- except (TypeError, ValueError, AttributeError, KeyError):
- ret
- ret
- traceback.print_exc()
- return self.check_error(ret)
-
-
- try:
- perms = dict(perms)
- log.info('perms: %r', perms)
- except (TypeError, ValueError):
- ret
- ret
- traceback.print_exc()
- return self.check_error(ret)
-
- if not (all,)((lambda .0: for perm in .0:
- perms.get(perm))(self.perms)):
- log.info('not all')
- return self.not_all_perms(perms)
- return self.callback.success(perms)
-
-
- def not_all_perms(self, perms):
- return self.callback.error(perms)
-
-
- def not_logged_in(self, ret):
- return self.callback.error(ret)
-
-
- def check_error(self, ret, *a):
- if isinstance(ret, FacebookError):
- not_logged_in = not_logged_in
- import facebookprotocol
- if not_logged_in(ret):
- log.info_s('not logged in: api: %r, session: %r', self.api.name, self.api.session_key)
- return self.not_logged_in(ret)
-
- self.errcount += 1
- if self.errcount >= self.max_errcount:
- return self.callback.error(ret)
- if self.api.mode == 'async':
- return call_later(1, self.check, callback = self.callback)
- return self.check(callback = self.callback)
-
-
-
- class PermCheck2(PermCheck):
-
- def check(self, callback = None):
- super(PermCheck2, self).check(callback = callback)
-
- check = named_callbacks([
- 'success',
- 'error',
- 'not_logged_in',
- 'not_all_perms'])(check)
-
- def not_all_perms(self, perms):
- return self.callback.not_all_perms(perms)
-
-
- def not_logged_in(self, ret):
- return self.callback.not_logged_in(ret)
-
-
-