schema.py
branchstable
changeset 3689 deb13e88e037
parent 3554 26e586f3c15c
child 3720 5376aaadd16b
child 3824 860da9755df3
equal deleted inserted replaced
3688:421fb447ecb2 3689:deb13e88e037
   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)