diff -r dd9f2dd02f85 -r 0e3460341023 server/repository.py --- a/server/repository.py Tue Aug 18 09:25:44 2009 +0200 +++ b/server/repository.py Fri Aug 21 16:26:20 2009 +0200 @@ -167,6 +167,11 @@ # cache (extid, source uri) -> eid self._extid_cache = {} # open some connections pools + if config.open_connections_pools: + self.open_connections_pools() + + def open_connections_pools(self): + config = self.config self._available_pools = Queue.Queue() self._available_pools.put_nowait(pool.ConnectionsPool(self.sources)) if config.read_instance_schema: @@ -176,7 +181,7 @@ # usually during repository creation self.warning("set fs instance'schema as bootstrap schema") config.bootstrap_cubes() - self.set_schema(self.config.load_schema(), resetvreg=False) + self.set_schema(config.load_schema(), resetvreg=False) # need to load the Any and CWUser entity types self.vreg.schema = self.schema etdirectory = join(CW_SOFTWARE_ROOT, 'entities') @@ -185,11 +190,13 @@ 'cubicweb.entities.__init__') self.vreg.load_file(join(etdirectory, 'authobjs.py'), 'cubicweb.entities.authobjs') + self.vreg.load_file(join(etdirectory, 'wfobjs.py'), + 'cubicweb.entities.wfobjs') else: # test start: use the file system schema (quicker) self.warning("set fs instance'schema") config.bootstrap_cubes() - self.set_schema(self.config.load_schema()) + self.set_schema(config.load_schema()) if not config.creating: if 'CWProperty' in self.schema: self.vreg.init_properties(self.properties()) @@ -213,13 +220,12 @@ self.pools.append(pool.ConnectionsPool(self.sources)) self._available_pools.put_nowait(self.pools[-1]) self._shutting_down = False - self.hm = vreg['hooks'] + self.hm = self.vreg['hooks'] if not (config.creating or config.repairing): # call instance level initialisation hooks self.hm.call_hooks('server_startup', repo=self) # register a task to cleanup expired session - self.looping_task(self.config['session-time']/3., - self.clean_sessions) + self.looping_task(config['session-time']/3., self.clean_sessions) # internals ############################################################### @@ -227,8 +233,9 @@ source_config['uri'] = uri return sources.get_source(source_config, self.schema, self) - def set_schema(self, schema, resetvreg=True): - schema.rebuild_infered_relations() + def set_schema(self, schema, resetvreg=True, rebuildinfered=True): + if rebuildinfered: + schema.rebuild_infered_relations() self.info('set schema %s %#x', schema.name, id(schema)) self.debug(', '.join(sorted(str(e) for e in schema.entities()))) self.querier.set_schema(schema) @@ -951,15 +958,16 @@ print 'ADD entity', etype, entity.eid, dict(entity) entity._is_saved = False # entity has an eid but is not yet saved relations = [] - # if inlined relations are specified, fill entity's related cache to - # avoid unnecessary queries + # init edited_attributes before calling before_add_entity hooks entity.edited_attributes = set(entity) - for attr in entity.edited_attributes: + if source.should_call_hooks: + self.hm.call_hooks('before_add_entity', session, entity=entity) + # XXX use entity.keys here since edited_attributes is not updated for + # inline relations + for attr in entity.keys(): rschema = eschema.subject_relation(attr) if not rschema.is_final(): # inlined relation relations.append((attr, entity[attr])) - if source.should_call_hooks: - self.hm.call_hooks('before_add_entity', session, entity=entity) entity.set_defaults() entity.check(creation=True) source.add_entity(session, entity)