server/repository.py
changeset 1250 5c20a7f13c84
parent 1228 91ae10ffb611
child 1263 01152fffd593
equal deleted inserted replaced
1249:905d76e38433 1250:5c20a7f13c84
   768         if source.uri != uri:
   768         if source.uri != uri:
   769             # eid not from the given source
   769             # eid not from the given source
   770             raise UnknownEid(eid)
   770             raise UnknownEid(eid)
   771         return extid
   771         return extid
   772 
   772 
   773     def extid2eid(self, source, lid, etype, session=None, insert=True):
   773     def extid2eid(self, source, lid, etype, session=None, insert=True,
       
   774                   recreate=False):
   774         """get eid from a local id. An eid is attributed if no record is found"""
   775         """get eid from a local id. An eid is attributed if no record is found"""
   775         cachekey = (str(lid), source.uri)
   776         cachekey = (str(lid), source.uri)
   776         try:
   777         try:
   777             return self._extid_cache[cachekey]
   778             return self._extid_cache[cachekey]
   778         except KeyError:
   779         except KeyError:
   783             reset_pool = True
   784             reset_pool = True
   784         eid = self.system_source.extid2eid(session, source, lid)
   785         eid = self.system_source.extid2eid(session, source, lid)
   785         if eid is not None:
   786         if eid is not None:
   786             self._extid_cache[cachekey] = eid
   787             self._extid_cache[cachekey] = eid
   787             self._type_source_cache[eid] = (etype, source.uri, lid)
   788             self._type_source_cache[eid] = (etype, source.uri, lid)
       
   789             if recreate:
       
   790                 entity = source.before_entity_insertion(session, lid, etype, eid)
       
   791                 entity._cw_recreating = True
       
   792                 if source.should_call_hooks:
       
   793                     self.hm.call_hooks('before_add_entity', etype, session, entity)
       
   794                 # XXX add fti op ?
       
   795                 source.after_entity_insertion(session, lid, entity)
       
   796                 if source.should_call_hooks:
       
   797                     self.hm.call_hooks('after_add_entity', etype, session, entity)
   788             if reset_pool:
   798             if reset_pool:
   789                 session.reset_pool()
   799                 session.reset_pool()
   790             return eid
   800             return eid
   791         if not insert:
   801         if not insert:
   792             return
   802             return