server/__init__.py
changeset 6427 c8a5ac2d1eaa
parent 6126 aca6a2c357fd
child 6957 ffda12be2e9f
child 7056 51f88f13d6f3
--- a/server/__init__.py	Sat Oct 09 00:05:50 2010 +0200
+++ b/server/__init__.py	Sat Oct 09 00:05:52 2010 +0200
@@ -19,8 +19,8 @@
 (repository) side
 
 This module contains functions to initialize a new repository.
+"""
 
-"""
 from __future__ import with_statement
 
 __docformat__ = "restructuredtext en"
@@ -61,7 +61,6 @@
     else:
         DEBUG |= debugmode
 
-
 class debugged(object):
     """repository debugging context manager / decorator
 
@@ -132,7 +131,6 @@
     config.consider_user_state = False
     config.set_language = False
     # only enable the system source at initialization time
-    config.enabled_sources = ('system',)
     repo = Repository(config, vreg=vreg)
     schema = repo.schema
     sourcescfg = config.sources()
@@ -162,6 +160,12 @@
     sqlcnx.commit()
     sqlcnx.close()
     session = repo.internal_session()
+    # insert entity representing the system source
+    ssource = session.create_entity('CWSource', type=u'native', name=u'system')
+    repo.system_source.eid = ssource.eid
+    session.execute('SET X cw_source X WHERE X eid %(x)s', {'x': ssource.eid})
+    # insert base groups and default admin
+    print '-> inserting default user and default groups.'
     try:
         login = unicode(sourcescfg['admin']['login'])
         pwd = sourcescfg['admin']['password']
@@ -171,17 +175,18 @@
             login, pwd = manager_userpasswd(msg=msg, confirm=True)
         else:
             login, pwd = unicode(source['db-user']), source['db-password']
-    print '-> inserting default user and default groups.'
     # sort for eid predicatability as expected in some server tests
     for group in sorted(BASE_GROUPS):
-        session.execute('INSERT CWGroup X: X name %(name)s',
-                        {'name': unicode(group)})
-    create_user(session, login, pwd, 'managers')
+        session.create_entity('CWGroup', name=unicode(group))
+    admin = create_user(session, login, pwd, 'managers')
+    session.execute('SET X owned_by U WHERE X is IN (CWGroup,CWSource), U eid %(u)s',
+                    {'u': admin.eid})
     session.commit()
     repo.shutdown()
     # reloging using the admin user
     config._cubes = None # avoid assertion error
     repo, cnx = in_memory_cnx(config, login, password=pwd)
+    repo.system_source.eid = ssource.eid # redo this manually
     # trigger vreg initialisation of entity classes
     config.cubicweb_appobject_path = set(('entities',))
     config.cube_appobject_path = set(('entities',))
@@ -197,13 +202,7 @@
     initialize_schema(config, schema, handler)
     # yoo !
     cnx.commit()
-    config.enabled_sources = None
-    for uri, source_config in config.sources().items():
-        if uri in ('admin', 'system'):
-            # not an actual source or init_creating already called
-            continue
-        source = repo.get_source(uri, source_config)
-        source.init_creating()
+    repo.system_source.init_creating()
     cnx.commit()
     cnx.close()
     session.close()