goa/dbinit.py
changeset 1808 aa09e20dd8c0
parent 1802 d628defebc17
child 1977 606923dff11b
equal deleted inserted replaced
1693:49075f57cf2c 1808:aa09e20dd8c0
     1 """some utility functions for datastore initialization.
     1 """some utility functions for datastore initialization.
     2 
     2 
     3 :organization: Logilab
     3 :organization: Logilab
     4 :copyright: 2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     4 :copyright: 2008-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     6 """
     6 """
     7 __docformat__ = "restructuredtext en"
     7 __docformat__ = "restructuredtext en"
     8 
     8 
     9 from google.appengine.api.datastore import Key, Entity, Put, Get, Query
     9 from google.appengine.api.datastore import Key, Entity, Put, Get, Query
    13 
    13 
    14 def _get_group(groupname):
    14 def _get_group(groupname):
    15     try:
    15     try:
    16         return _GROUP_CACHE[groupname]
    16         return _GROUP_CACHE[groupname]
    17     except KeyError:
    17     except KeyError:
    18         key = Key.from_path('EGroup', 'key_' + groupname, parent=None)
    18         key = Key.from_path('CWGroup', 'key_' + groupname, parent=None)
    19         try:
    19         try:
    20             group = Get(key)
    20             group = Get(key)
    21         except datastore_errors.EntityNotFoundError:
    21         except datastore_errors.EntityNotFoundError:
    22             raise Exception('can\'t find required group %s, is your application '
    22             raise Exception('can\'t find required group %s, is your application '
    23                             'correctly initialized (eg did you run the '
    23                             'correctly initialized (eg did you run the '
    27 
    27 
    28 
    28 
    29 def create_user(login, password, groups):
    29 def create_user(login, password, groups):
    30     """create a cubicweb user"""
    30     """create a cubicweb user"""
    31     from cubicweb.server.utils import crypt_password
    31     from cubicweb.server.utils import crypt_password
    32     user = Entity('EUser', name=login)
    32     user = Entity('CWUser', name=login)
    33     user['s_login'] = unicode(login)
    33     user['s_login'] = unicode(login)
    34     user['s_upassword'] = crypt_password(password)
    34     user['s_upassword'] = crypt_password(password)
    35     set_user_groups(user, groups)
    35     set_user_groups(user, groups)
    36     Put(user)
    36     Put(user)
    37     return user
    37     return user
    38 
    38 
    39 def create_groups():
    39 def create_groups():
    40     """create initial cubicweb groups"""
    40     """create initial cubicweb groups"""
    41     for groupname in ('managers', 'users', 'guests'):
    41     for groupname in ('managers', 'users', 'guests'):
    42         group = Entity('EGroup', name='key_' + groupname)
    42         group = Entity('CWGroup', name='key_' + groupname)
    43         group['s_name'] = unicode(groupname)
    43         group['s_name'] = unicode(groupname)
    44         Put(group)
    44         Put(group)
    45         _GROUP_CACHE[groupname] = group
    45         _GROUP_CACHE[groupname] = group
    46 
    46 
    47 def set_user_groups(user, groups):
    47 def set_user_groups(user, groups):
    70         if rschema == 'identity':
    70         if rschema == 'identity':
    71             continue
    71             continue
    72         dsrelation = 'o_' + rschema.type
    72         dsrelation = 'o_' + rschema.type
    73         if not dsrelation in gaeentity:
    73         if not dsrelation in gaeentity:
    74             gaeentity[dsrelation] = None
    74             gaeentity[dsrelation] = None
    75     
    75 
    76 def fix_entities(schema):
    76 def fix_entities(schema):
    77     for etype in ('EUser', 'EGroup'):
    77     for etype in ('CWUser', 'CWGroup'):
    78         eschema = schema.eschema(etype)
    78         eschema = schema.eschema(etype)
    79         for gaeentity in Query(etype).Run():
    79         for gaeentity in Query(etype).Run():
    80             init_relations(gaeentity, eschema)
    80             init_relations(gaeentity, eschema)
    81             # XXX o_is on EEType entity
    81             # XXX o_is on CWEType entity
    82             gaeentity['s_is'] = Key.from_path('EEType', 'key_' + etype, parent=None)
    82             gaeentity['s_is'] = Key.from_path('CWEType', 'key_' + etype, parent=None)
    83             Put(gaeentity)
    83             Put(gaeentity)
    84     
    84 
    85 def init_persistent_schema(ssession, schema):
    85 def init_persistent_schema(ssession, schema):
    86     execute = ssession.unsafe_execute
    86     execute = ssession.unsafe_execute
    87     rql = ('INSERT EEType X: X name %(name)s, X description %(descr)s,'
    87     rql = ('INSERT CWEType X: X name %(name)s, X description %(descr)s,'
    88            'X final FALSE, X meta %(meta)s')
    88            'X final FALSE, X meta %(meta)s')
    89     eschema = schema.eschema('EEType')
    89     eschema = schema.eschema('CWEType')
    90     execute(rql, {'name': u'EEType', 'descr': unicode(eschema.description),
    90     execute(rql, {'name': u'CWEType', 'descr': unicode(eschema.description),
    91                   'meta': eschema.meta})
    91                   'meta': eschema.meta})
    92     for eschema in schema.entities():
    92     for eschema in schema.entities():
    93         if eschema.is_final() or eschema == 'EEType':
    93         if eschema.is_final() or eschema == 'CWEType':
    94             continue
    94             continue
    95         execute(rql, {'name': unicode(eschema), 'meta': eschema.meta,
    95         execute(rql, {'name': unicode(eschema), 'meta': eschema.meta,
    96                       'descr': unicode(eschema.description)})
    96                       'descr': unicode(eschema.description)})
    97 
    97 
    98 def insert_versions(ssession, config):
    98 def insert_versions(ssession, config):
    99     execute = ssession.unsafe_execute
    99     execute = ssession.unsafe_execute
   100     # insert versions
   100     # insert versions
   101     execute('INSERT EProperty X: X pkey %(pk)s, X value%(v)s',
   101     execute('INSERT CWProperty X: X pkey %(pk)s, X value%(v)s',
   102             {'pk': u'system.version.cubicweb',
   102             {'pk': u'system.version.cubicweb',
   103              'v': unicode(config.cubicweb_version())})
   103              'v': unicode(config.cubicweb_version())})
   104     for cube in config.cubes():
   104     for cube in config.cubes():
   105         execute('INSERT EProperty X: X pkey %(pk)s, X value%(v)s',
   105         execute('INSERT CWProperty X: X pkey %(pk)s, X value%(v)s',
   106                 {'pk': u'system.version.%s' % cube,
   106                 {'pk': u'system.version.%s' % cube,
   107                  'v': unicode(config.cube_version(cube))})
   107                  'v': unicode(config.cube_version(cube))})
   108