# HG changeset patch # User Sylvain Thénault # Date 1269939046 -7200 # Node ID 10c3422d74197726229d2bad16d96a2c6f4fcaac # Parent adc2122eed0322bb9dad1be214d471c6fd1ac778 [repo] on add entity, set cache as soon as possible + fill type/source cache diff -r adc2122eed03 -r 10c3422d7419 server/repository.py --- a/server/repository.py Tue Mar 30 10:39:16 2010 +0200 +++ b/server/repository.py Tue Mar 30 10:50:46 2010 +0200 @@ -968,6 +968,20 @@ else: raise ETypeNotSupportedBySources(etype) + def init_entity_caches(self, session, entity, source): + """add entity to session entities cache and repo's extid cache. + Return entity's ext id if the source isn't the system source. + """ + session.set_entity_cache(entity) + suri = source.uri + if suri == 'system': + extid = None + else: + extid = source.get_extid(entity) + self._extid_cache[(str(extid), suri)] = entity.eid + self._type_source_cache[entity.eid] = (entity.__regid__, suri, extid) + return extid + def glob_add_entity(self, session, entity): """add an entity to the repository @@ -987,6 +1001,8 @@ source = self.locate_etype_source(etype) # attribute an eid to the entity before calling hooks entity.set_eid(self.system_source.create_eid(session)) + # set caches asap + extid = self.init_entity_caches(session, entity, source) if server.DEBUG & server.DBG_REPO: print 'ADD entity', etype, entity.eid, dict(entity) relations = [] @@ -1002,15 +1018,9 @@ if session.is_hook_category_activated('integrity'): entity.check(creation=True) source.add_entity(session, entity) - if source.uri != 'system': - extid = source.get_extid(entity) - self._extid_cache[(str(extid), source.uri)] = entity.eid - else: - extid = None self.add_info(session, entity, source, extid, complete=False) entity._is_saved = True # entity has an eid and is saved # prefill entity relation caches - session.set_entity_cache(entity) for rschema in eschema.subject_relations(): rtype = str(rschema) if rtype in schema.VIRTUAL_RTYPES: