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 |