goa/dbmyams.py
branchtls-sprint
changeset 1802 d628defebc17
parent 1398 5fe84a5f7035
child 1977 606923dff11b
equal deleted inserted replaced
1801:672acc730ce5 1802:d628defebc17
     3 MISSING FEATURES:
     3 MISSING FEATURES:
     4  - ListProperty, StringList, EmailProperty, etc. (XXX)
     4  - ListProperty, StringList, EmailProperty, etc. (XXX)
     5  - ReferenceProperty.verbose_name, collection_name, etc. (XXX)
     5  - ReferenceProperty.verbose_name, collection_name, etc. (XXX)
     6 
     6 
     7 XXX proprify this knowing we'll use goa.db
     7 XXX proprify this knowing we'll use goa.db
       
     8 :organization: Logilab
       
     9 :copyright: 2008-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
       
    10 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     8 """
    11 """
     9 
    12 
    10 from os.path import join
    13 from os.path import join
    11 from datetime import datetime, date, time
    14 from datetime import datetime, date, time
    12 
    15 
    66         else:
    69         else:
    67             kwargs['default'] = 'today'
    70             kwargs['default'] = 'today'
    68     # XXX no equivalent to Django's `auto_now`
    71     # XXX no equivalent to Django's `auto_now`
    69     return dbm2y_default_factory(prop, **kwargs)
    72     return dbm2y_default_factory(prop, **kwargs)
    70 
    73 
    71     
    74 
    72 def dbm2y_relation_factory(etype, prop, multiple=False):
    75 def dbm2y_relation_factory(etype, prop, multiple=False):
    73     """called if `prop` is a `db.ReferenceProperty`"""
    76     """called if `prop` is a `db.ReferenceProperty`"""
    74     if multiple:
    77     if multiple:
    75         cardinality = '**'
    78         cardinality = '**'
    76     elif prop.required:
    79     elif prop.required:
    81     try:
    84     try:
    82         return SubjectRelation(prop.data_type.kind(), cardinality=cardinality)
    85         return SubjectRelation(prop.data_type.kind(), cardinality=cardinality)
    83     except AttributeError, ex:
    86     except AttributeError, ex:
    84         # hack, data_type is still _SELF_REFERENCE_MARKER
    87         # hack, data_type is still _SELF_REFERENCE_MARKER
    85         return SubjectRelation(etype, cardinality=cardinality)
    88         return SubjectRelation(etype, cardinality=cardinality)
    86     
    89 
    87     
    90 
    88 DBM2Y_FACTORY = {
    91 DBM2Y_FACTORY = {
    89     basestring: dbm2y_string_factory,
    92     basestring: dbm2y_string_factory,
    90     datastore_types.Text: dbm2y_string_factory,
    93     datastore_types.Text: dbm2y_string_factory,
    91     int: dbm2y_default_factory,
    94     int: dbm2y_default_factory,
    92     float: dbm2y_default_factory,
    95     float: dbm2y_default_factory,
   105         super(GaeSchemaLoader, self).__init__(*args, **kwargs)
   108         super(GaeSchemaLoader, self).__init__(*args, **kwargs)
   106         self.defined = {}
   109         self.defined = {}
   107         self.created = []
   110         self.created = []
   108         self.loaded_files = []
   111         self.loaded_files = []
   109         self._instantiate_handlers()
   112         self._instantiate_handlers()
   110         
   113 
   111     def finalize(self, register_base_types=False):
   114     def finalize(self, register_base_types=False):
   112         return self._build_schema('google-appengine', register_base_types)
   115         return self._build_schema('google-appengine', register_base_types)
   113 
   116 
   114     def load_dbmodel(self, name, props):
   117     def load_dbmodel(self, name, props):
   115         clsdict = {}
   118         clsdict = {}
   146         erdef = self.pyreader.import_erschema(ertype, schemamod)
   149         erdef = self.pyreader.import_erschema(ertype, schemamod)
   147 
   150 
   148     def import_yams_cube_schema(self, templpath):
   151     def import_yams_cube_schema(self, templpath):
   149         for filepath in self.get_schema_files(templpath):
   152         for filepath in self.get_schema_files(templpath):
   150             self.handle_file(filepath)
   153             self.handle_file(filepath)
   151         
   154 
   152     @property
   155     @property
   153     def pyreader(self):
   156     def pyreader(self):
   154         return self._live_handlers['.py']
   157         return self._live_handlers['.py']
   155         
   158 
   156 import os
   159 import os
   157 from cubicweb import CW_SOFTWARE_ROOT
   160 from cubicweb import CW_SOFTWARE_ROOT
   158 
   161 
   159 if os.environ.get('APYCOT_ROOT'):
   162 if os.environ.get('APYCOT_ROOT'):
   160     SCHEMAS_LIB_DIRECTORY = join(os.environ['APYCOT_ROOT'],
   163     SCHEMAS_LIB_DIRECTORY = join(os.environ['APYCOT_ROOT'],
   181                 loader.load_dbmodel(obj.__name__, goadb.extract_dbmodel(obj))
   184                 loader.load_dbmodel(obj.__name__, goadb.extract_dbmodel(obj))
   182     for erschema in ('CWGroup', 'CWEType', 'CWRType', 'RQLExpression',
   185     for erschema in ('CWGroup', 'CWEType', 'CWRType', 'RQLExpression',
   183                      'is_', 'is_instance_of',
   186                      'is_', 'is_instance_of',
   184                      'read_permission', 'add_permission',
   187                      'read_permission', 'add_permission',
   185                      'delete_permission', 'update_permission'):
   188                      'delete_permission', 'update_permission'):
   186         loader.import_yams_schema(erschema, 'bootstrap')  
   189         loader.import_yams_schema(erschema, 'bootstrap')
   187     loader.handle_file(join(SCHEMAS_LIB_DIRECTORY, 'base.py'))
   190     loader.handle_file(join(SCHEMAS_LIB_DIRECTORY, 'base.py'))
   188     cubes = config['included-yams-cubes']
   191     cubes = config['included-yams-cubes']
   189     for cube in reversed(config.expand_cubes(cubes)):
   192     for cube in reversed(config.expand_cubes(cubes)):
   190         config.info('loading cube %s', cube)
   193         config.info('loading cube %s', cube)
   191         loader.import_yams_cube_schema(config.cube_dir(cube))
   194         loader.import_yams_cube_schema(config.cube_dir(cube))
   209     # return the full schema including the cubes' schema
   212     # return the full schema including the cubes' schema
   210     for ertype in loader.defined.values():
   213     for ertype in loader.defined.values():
   211         if getattr(ertype, 'inlined', False):
   214         if getattr(ertype, 'inlined', False):
   212             ertype.inlined = False
   215             ertype.inlined = False
   213     return loader.finalize()
   216     return loader.finalize()
   214