equal
deleted
inserted
replaced
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 |