repoapi.py
changeset 9582 46ed25d38fe2
parent 9575 754904ac4248
child 9630 e7dbc4f06a48
--- a/repoapi.py	Mon Mar 24 16:38:57 2014 +0100
+++ b/repoapi.py	Mon Mar 24 11:57:23 2014 +0100
@@ -154,6 +154,8 @@
         self._cnx = None
         self._open = None
         self._web_request = False
+        #: cache entities built during the connection
+        self._eid_cache = {}
         self.vreg = session.vreg
         self._set_user(session.user)
         self._autoclose_session = autoclose_session
@@ -216,8 +218,19 @@
         rset._rqlst = None
         return rset
 
-    commit = _srv_cnx_func('commit')
-    rollback = _srv_cnx_func('rollback')
+    @_open_only
+    def commit(self, *args, **kwargs):
+        try:
+            return self._cnx.commit(*args, **kwargs)
+        finally:
+            self.drop_entity_cache()
+
+    @_open_only
+    def rollback(self, *args, **kwargs):
+        try:
+            return self._cnx.rollback(*args, **kwargs)
+        finally:
+            self.drop_entity_cache()
 
     # security #################################################################
 
@@ -340,6 +353,25 @@
         # Connection object
         return self._cnx.repo.system_source.undo_transaction(self._cnx, txuuid)
 
+    # cache management
+
+    def entity_cache(self, eid):
+        return self._eid_cache[eid]
+
+    def set_entity_cache(self, entity):
+        self._eid_cache[entity.eid] = entity
+
+    def cached_entities(self):
+        return self._eid_cache.values()
+
+    def drop_entity_cache(self, eid=None):
+        if eid is None:
+            self._eid_cache = {}
+        else:
+            del self._eid_cache[eid]
+
+    # deprecated stuff
+
     @deprecated('[3.19] This is a repoapi.ClientConnection object not a dbapi one')
     def request(self):
         return self