237 |
237 |
238 def system_etypes(schema): |
238 def system_etypes(schema): |
239 """return system entity types only: skip final, schema and application entities |
239 """return system entity types only: skip final, schema and application entities |
240 """ |
240 """ |
241 for eschema in schema.entities(): |
241 for eschema in schema.entities(): |
242 if eschema.is_final() or eschema.schema_entity(): |
242 if eschema.final or eschema.schema_entity(): |
243 continue |
243 continue |
244 yield eschema.type |
244 yield eschema.type |
245 |
245 |
246 # Schema objects definition ################################################### |
246 # Schema objects definition ################################################### |
247 |
247 |
299 |
299 |
300 def _update_has_text(self, deletion=False): |
300 def _update_has_text(self, deletion=False): |
301 may_need_has_text, has_has_text = False, False |
301 may_need_has_text, has_has_text = False, False |
302 need_has_text = None |
302 need_has_text = None |
303 for rschema in self.subject_relations(): |
303 for rschema in self.subject_relations(): |
304 if rschema.is_final(): |
304 if rschema.final: |
305 if rschema == 'has_text': |
305 if rschema == 'has_text': |
306 has_has_text = True |
306 has_has_text = True |
307 elif self.rproperty(rschema, 'fulltextindexed'): |
307 elif self.rproperty(rschema, 'fulltextindexed'): |
308 may_need_has_text = True |
308 may_need_has_text = True |
309 elif rschema.fulltext_container: |
309 elif rschema.fulltext_container: |
431 return |
431 return |
432 raise Unauthorized(action, str(self)) |
432 raise Unauthorized(action, str(self)) |
433 |
433 |
434 def rql_expression(self, expression, mainvars=None, eid=None): |
434 def rql_expression(self, expression, mainvars=None, eid=None): |
435 """rql expression factory""" |
435 """rql expression factory""" |
436 if self.is_final(): |
436 if self.final: |
437 return ERQLExpression(expression, mainvars, eid) |
437 return ERQLExpression(expression, mainvars, eid) |
438 return RRQLExpression(expression, mainvars, eid) |
438 return RRQLExpression(expression, mainvars, eid) |
439 |
439 |
440 |
440 |
441 class CubicWebSchema(Schema): |
441 class CubicWebSchema(Schema): |
471 def add_entity_type(self, edef): |
471 def add_entity_type(self, edef): |
472 edef.name = edef.name.encode() |
472 edef.name = edef.name.encode() |
473 edef.name = bw_normalize_etype(edef.name) |
473 edef.name = bw_normalize_etype(edef.name) |
474 assert re.match(r'[A-Z][A-Za-z0-9]*[a-z]+[0-9]*$', edef.name), repr(edef.name) |
474 assert re.match(r'[A-Z][A-Za-z0-9]*[a-z]+[0-9]*$', edef.name), repr(edef.name) |
475 eschema = super(CubicWebSchema, self).add_entity_type(edef) |
475 eschema = super(CubicWebSchema, self).add_entity_type(edef) |
476 if not eschema.is_final(): |
476 if not eschema.final: |
477 # automatically add the eid relation to non final entity types |
477 # automatically add the eid relation to non final entity types |
478 rdef = ybo.RelationDefinition(eschema.type, 'eid', 'Int', |
478 rdef = ybo.RelationDefinition(eschema.type, 'eid', 'Int', |
479 cardinality='11', uid=True) |
479 cardinality='11', uid=True) |
480 self.add_relation_def(rdef) |
480 self.add_relation_def(rdef) |
481 rdef = ybo.RelationDefinition(eschema.type, 'identity', eschema.type) |
481 rdef = ybo.RelationDefinition(eschema.type, 'identity', eschema.type) |