goa/__init__.py
branchstable
changeset 2101 08003e0354a7
parent 1977 606923dff11b
child 3689 deb13e88e037
equal deleted inserted replaced
2100:89b825cdec74 2101:08003e0354a7
    99         RQLHelper.simplify = lambda x, r: None
    99         RQLHelper.simplify = lambda x, r: None
   100 
   100 
   101         # activate entity caching on the server side
   101         # activate entity caching on the server side
   102 
   102 
   103         def set_entity_cache(self, entity):
   103         def set_entity_cache(self, entity):
   104             self._query_data.setdefault('_eid_cache', {})[entity.eid] = entity
   104             self.transaction_data.setdefault('_eid_cache', {})[entity.eid] = entity
   105 
   105 
   106         def entity_cache(self, eid):
   106         def entity_cache(self, eid):
   107             return self._query_data['_eid_cache'][eid]
   107             return self.transaction_data['_eid_cache'][eid]
   108 
   108 
   109         def drop_entity_cache(self, eid=None):
   109         def drop_entity_cache(self, eid=None):
   110             if eid is None:
   110             if eid is None:
   111                 self._query_data['_eid_cache'] = {}
   111                 self.transaction_data['_eid_cache'] = {}
   112             elif '_eid_cache' in self._query_data:
   112             elif '_eid_cache' in self.transaction_data:
   113                 self._query_data['_eid_cache'].pop(eid, None)
   113                 self.transaction_data['_eid_cache'].pop(eid, None)
   114 
   114 
   115         def datastore_get(self, key):
   115         def datastore_get(self, key):
   116             if isinstance(key, basestring):
   116             if isinstance(key, basestring):
   117                 key = Key(key)
   117                 key = Key(key)
   118             try:
   118             try:
   119                 gentity = self._query_data['_key_cache'][key]
   119                 gentity = self.transaction_data['_key_cache'][key]
   120                 #self.critical('cached %s', gentity)
   120                 #self.critical('cached %s', gentity)
   121             except KeyError:
   121             except KeyError:
   122                 gentity = Get(key)
   122                 gentity = Get(key)
   123                 #self.critical('Get %s', gentity)
   123                 #self.critical('Get %s', gentity)
   124                 self._query_data.setdefault('_key_cache', {})[key] = gentity
   124                 self.transaction_data.setdefault('_key_cache', {})[key] = gentity
   125             return gentity
   125             return gentity
   126 
   126 
   127         def clear_datastore_cache(self, key=None):
   127         def clear_datastore_cache(self, key=None):
   128             if key is None:
   128             if key is None:
   129                 self._query_data['_key_cache'] = {}
   129                 self.transaction_data['_key_cache'] = {}
   130             else:
   130             else:
   131                 if isinstance(key, basestring):
   131                 if isinstance(key, basestring):
   132                     key = Key(key)
   132                     key = Key(key)
   133                 self._query_data['_key_cache'].pop(key, None)
   133                 self.transaction_data['_key_cache'].pop(key, None)
   134 
   134 
   135         from cubicweb.server.session import Session
   135         from cubicweb.server.session import Session
   136         Session.set_entity_cache = set_entity_cache
   136         Session.set_entity_cache = set_entity_cache
   137         Session.entity_cache = entity_cache
   137         Session.entity_cache = entity_cache
   138         Session.drop_entity_cache = drop_entity_cache
   138         Session.drop_entity_cache = drop_entity_cache