home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / plugins / facebook / permchecks.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  3.8 KB  |  106 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from util.callbacks import callsback, named_callbacks
  5. from util.threads.timeout_thread import call_later
  6. from fberrors import FacebookError
  7. import traceback
  8. import logging
  9. log = logging.getLogger('facebook.permchecks')
  10. PERM_QUERY = 'SELECT %s FROM permissions WHERE uid=%d'
  11.  
  12. class PermCheck(object):
  13.     max_errcount = 3
  14.     
  15.     def __init__(self, api, perms = None):
  16.         self.api = api
  17.         if not perms:
  18.             pass
  19.         self.perms = []
  20.         self.errcount = 0
  21.  
  22.     
  23.     def check(self, callback = None):
  24.         log.critical('checking with callback: %r', callback)
  25.         self.callback = callback
  26.         if not self.perms:
  27.             return self.callback.success({ })
  28.         self.api.query(PERM_QUERY % (','.join(self.perms), int(self.api.uid)), success = self.check_success, error = self.check_error)
  29.  
  30.     check = callsback(check)
  31.     
  32.     def check_success(self, ret):
  33.         log.info('check_success(%r)', ret)
  34.         if not ret:
  35.             return self.check_error(ret)
  36.         
  37.         try:
  38.             perms = ret[0]
  39.         except (TypeError, ValueError, AttributeError, KeyError):
  40.             ret
  41.             ret
  42.             traceback.print_exc()
  43.             return self.check_error(ret)
  44.  
  45.         
  46.         try:
  47.             perms = dict(perms)
  48.             log.info('perms: %r', perms)
  49.         except (TypeError, ValueError):
  50.             ret
  51.             ret
  52.             traceback.print_exc()
  53.             return self.check_error(ret)
  54.  
  55.         if not (all,)((lambda .0: for perm in .0:
  56. perms.get(perm))(self.perms)):
  57.             log.info('not all')
  58.             return self.not_all_perms(perms)
  59.         return self.callback.success(perms)
  60.  
  61.     
  62.     def not_all_perms(self, perms):
  63.         return self.callback.error(perms)
  64.  
  65.     
  66.     def not_logged_in(self, ret):
  67.         return self.callback.error(ret)
  68.  
  69.     
  70.     def check_error(self, ret, *a):
  71.         if isinstance(ret, FacebookError):
  72.             not_logged_in = not_logged_in
  73.             import facebookprotocol
  74.             if not_logged_in(ret):
  75.                 log.info_s('not logged in: api: %r, session: %r', self.api.name, self.api.session_key)
  76.                 return self.not_logged_in(ret)
  77.         
  78.         self.errcount += 1
  79.         if self.errcount >= self.max_errcount:
  80.             return self.callback.error(ret)
  81.         if self.api.mode == 'async':
  82.             return call_later(1, self.check, callback = self.callback)
  83.         return self.check(callback = self.callback)
  84.  
  85.  
  86.  
  87. class PermCheck2(PermCheck):
  88.     
  89.     def check(self, callback = None):
  90.         super(PermCheck2, self).check(callback = callback)
  91.  
  92.     check = named_callbacks([
  93.         'success',
  94.         'error',
  95.         'not_logged_in',
  96.         'not_all_perms'])(check)
  97.     
  98.     def not_all_perms(self, perms):
  99.         return self.callback.not_all_perms(perms)
  100.  
  101.     
  102.     def not_logged_in(self, ret):
  103.         return self.callback.not_logged_in(ret)
  104.  
  105.  
  106.