Changeset 2604 in products


Ignore:
Timestamp:
Jul 2, 2010 9:52:56 AM (14 years ago)
Author:
mylan
Message:

Added SafeQuery? class, which provide safeQuery method with automatic relogin in case of expired token

Location:
quintagroup.gauth/trunk/quintagroup/gauth
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.gauth/trunk/quintagroup/gauth/tests.py

    r2577 r2604  
    2828 
    2929 
     30# class SafeQuery(object): 
     31#     def safeCall(self, serv, meth, methargs=[], methkwargs={}): 
     32#         print "safecall %s: serv: %s, meth: %s, methargs: %s, methkwargs: %s" % ( 
     33#             self, serv, meth, methargs, methkwargs) 
     34#         try: 
     35#             return meth(*methargs, **methkwargs) 
     36#         except gdata.service.RequestError, e: 
     37#             print "Token Expired -> Update it." 
     38#             logException("Token Expired -> Update it.") 
     39#             serv.ProgrammaticLogin() 
     40#             return meth(*methargs, **methkwargs) 
     41# counter = 0 
     42# class DummyServ: 
     43#     def ProgrammaticLogin(self, captcha_token=None, captcha_response=None): 
     44#         print "for '%s' called ProgrammaticLogin" % str(self) 
     45#     def Query(self, *args, **kwargs): 
     46#         global counter 
     47#         if counter > 3: 
     48#             counter = 0 
     49#             raise gdata.service.RequestError("Some Problem in Query") 
     50#         print "for '%s' called Query with args: %s, kwargs: %s" % tuple( 
     51#             map(str,[self,args,kwargs])) 
     52#         counter += 1 
     53# class C(SafeQuery): 
     54#     serv = None 
     55#     def __init__(self): 
     56#         self.serv = DummyServ() 
     57#     def operation(self, a): 
     58#         for i in range(5): 
     59#             self.safeCall(self.serv, self.serv.Query, [i,], {"q": i*i}) 
     60 
     61 
     62 
     63 
     64 
     65 
    3066def test_suite(): 
    3167    return unittest.TestSuite([ 
  • quintagroup.gauth/trunk/quintagroup/gauth/utility.py

    r2603 r2604  
    33""" 
    44 
     5import logging 
    56from zope.interface import implements 
    67from zope.component import queryMultiAdapter, queryAdapter 
     
    1011from quintagroup.gdata.browser.configlet import IGDataConfigletSchema 
    1112 
     13logger = logging.getLogger('quintagroup.gauth') 
     14def logException(msg, context=None): 
     15    logger.exception(msg) 
     16    if context is not None: 
     17        error_log = getattr(context, 'error_log', None) 
     18        if error_log is not None: 
     19            error_log.raising(sys.exc_info()) 
    1220 
    1321class GAuthUtility(object): 
     
    3442 
    3543 
    36     # @property 
    37     # @memoize_contextless 
    38     # def portal(self): 
    39     #     pps = queryMultiAdapter((self.context, self.context.REQUEST), name="plone_portal_state") 
    40     #     return pps.portal() 
     44class SafeQuery(object): 
     45    """ Base class for perform safe Google data service calls, 
     46        with automatic programming re-loginning. 
     47 
     48        So if class need automatic relogin to Google Date services, it must 
     49        inherit from the class and use safeQuery metho to call to services methods 
     50 
     51        For example ... 
     52 
     53        class MyGdataService(SafeQuery): 
     54 
     55            def __init__(self): 
     56                gauth_util = queryUtility(IGAuthInterface) 
     57                self.service = gdata.spreadsheet.service.SpreadsheetService( 
     58                                   gauth_util.email, gauth_util.password) 
     59                self.service.ProgrammaticLogin() 
     60 
     61            def fooservice(self): 
     62                ... 
     63                self.safeQuery(self.service, self.service.GetSpreadsheetsFeed, 
     64                               title="some title") 
     65                ... 
     66 
     67        So call to fooservice should automatic relogin to SpreadsheetService even 
     68        if token expired. 
     69    """ 
     70 
     71    def safeQuery(self, serv, meth, *margs, **mkwargs): 
     72        try: 
     73            return meth(*margs, **mkwargs) 
     74        except gdata.service.RequestError, e: 
     75            logException("Token Expired -> Update it.") 
     76            if hasattr(serv, 'ProgrammaticLogin'): 
     77                serv.ProgrammaticLogin() 
     78                return meth(*margs, **mkwargs) 
     79            else: 
     80                raise 
     81 
Note: See TracChangeset for help on using the changeset viewer.