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 |
|