appobject.py
changeset 2796 14d2c69e12c4
parent 2795 59965167bef3
child 2798 9c650701cb17
equal deleted inserted replaced
2795:59965167bef3 2796:14d2c69e12c4
     9 """
     9 """
    10 __docformat__ = "restructuredtext en"
    10 __docformat__ = "restructuredtext en"
    11 
    11 
    12 import types
    12 import types
    13 from logging import getLogger
    13 from logging import getLogger
    14 from datetime import datetime, timedelta
       
    15 
    14 
    16 from logilab.common.decorators import classproperty
    15 from logilab.common.decorators import classproperty
    17 from logilab.common.deprecation import deprecated
    16 from logilab.common.deprecation import deprecated
    18 from logilab.common.logging_ext import set_log_methods
    17 from logilab.common.logging_ext import set_log_methods
    19 
    18 
    20 from cubicweb import Unauthorized, NoSelectableObject
    19 from cubicweb import Unauthorized, NoSelectableObject
    21 from cubicweb.utils import UStringIO
       
    22 
       
    23 ONESECOND = timedelta(0, 1, 0)
       
    24 CACHE_REGISTRY = {}
       
    25 
       
    26 
       
    27 class Cache(dict):
       
    28     def __init__(self):
       
    29         super(Cache, self).__init__()
       
    30         _now = datetime.now()
       
    31         self.cache_creation_date = _now
       
    32         self.latest_cache_lookup = _now
       
    33 
    20 
    34 
    21 
    35 # selector base classes and operations ########################################
    22 # selector base classes and operations ########################################
    36 
    23 
    37 def objectify_selector(selector_func):
    24 def objectify_selector(selector_func):
   328         self.rset = rset
   315         self.rset = rset
   329         self.row = row
   316         self.row = row
   330         self.col = col
   317         self.col = col
   331         self.extra_kwargs = extra
   318         self.extra_kwargs = extra
   332 
   319 
   333     def get_cache(self, cachename):
       
   334         """
       
   335         NOTE: cachename should be dotted names as in :
       
   336         - cubicweb.mycache
       
   337         - cubes.blog.mycache
       
   338         - etc.
       
   339         """
       
   340         if cachename in CACHE_REGISTRY:
       
   341             cache = CACHE_REGISTRY[cachename]
       
   342         else:
       
   343             cache = CACHE_REGISTRY[cachename] = Cache()
       
   344         _now = datetime.now()
       
   345         if _now > cache.latest_cache_lookup + ONESECOND:
       
   346             ecache = self.req.execute('Any C,T WHERE C is CWCache, C name %(name)s, C timestamp T',
       
   347                                       {'name':cachename}).get_entity(0,0)
       
   348             cache.latest_cache_lookup = _now
       
   349             if not ecache.valid(cache.cache_creation_date):
       
   350                 cache.clear()
       
   351                 cache.cache_creation_date = _now
       
   352         return cache
       
   353 
       
   354     def propval(self, propid):
   320     def propval(self, propid):
   355         assert self.req
   321         assert self.req
   356         return self.req.property_value(self.propkey(propid))
   322         return self.req.property_value(self.propkey(propid))
   357 
   323 
   358     def view(self, __vid, rset=None, __fallback_oid=None, __registry='views',
   324     def view(self, __vid, rset=None, __fallback_oid=None, __registry='views',
   410 
   376 
   411     @deprecated('[3.5] use req.varmaker')
   377     @deprecated('[3.5] use req.varmaker')
   412     def initialize_varmaker(self):
   378     def initialize_varmaker(self):
   413         self.varmaker = self.req.varmaker
   379         self.varmaker = self.req.varmaker
   414 
   380 
       
   381     @deprecated('[3.5] use req.get_cache')
       
   382     def get_cache(self, cachename):
       
   383         return self.req.get_cache(cachename)
       
   384 
   415     @deprecated('[3.5] use rset.limited_rql')
   385     @deprecated('[3.5] use rset.limited_rql')
   416     def limited_rql(self):
   386     def limited_rql(self):
   417         return self.rset.limited_rql()
   387         return self.rset.limited_rql()
   418 
   388 
   419     @deprecated('[3.5] use self.rset.complete_entity(row,col) instead')
   389     @deprecated('[3.5] use self.rset.complete_entity(row,col) instead')