"""core CubicWeb schema necessary for bootstrapping the actual instance's schema:organization: Logilab:copyright: 2001-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses"""__docformat__="restructuredtext en"_=unicodefromyams.buildobjsimport(EntityType,RelationType,SubjectRelation,ObjectRelation,RichString,String,Boolean,Int)fromcubicweb.schemaimportRQLConstraintfromcubicweb.schemasimportMETA_ETYPE_PERMS,META_RTYPE_PERMS# not restricted since as "is" is handled as other relations, guests need# access to thisclassCWEType(EntityType):"""define an entity type, used to build the instance schema"""__permissions__=META_ETYPE_PERMSname=String(required=True,indexed=True,internationalizable=True,unique=True,maxsize=64)description=RichString(internationalizable=True,description=_('semantic description of this entity type'))# necessary to filter using RQLfinal=Boolean(description=_('automatic'))classCWRType(EntityType):"""define a relation type, used to build the instance schema"""__permissions__=META_ETYPE_PERMSname=String(required=True,indexed=True,internationalizable=True,unique=True,maxsize=64)description=RichString(internationalizable=True,description=_('semantic description of this relation type'))symmetric=Boolean(description=_('is this relation equivalent in both direction ?'))inlined=Boolean(description=_('is this relation physically inlined? you should know what you\'re doing if you are changing this!'))fulltext_container=String(description=_('if full text content of subject/object entity ''should be added to other side entity (the container).'),vocabulary=('',_('subject'),_('object')),maxsize=8,default=None)final=Boolean(description=_('automatic'))classCWAttribute(EntityType):"""define a final relation: link a final relation type from a non final entity to a final entity type. used to build the instance schema """__permissions__=META_ETYPE_PERMSrelation_type=SubjectRelation('CWRType',cardinality='1*',constraints=[RQLConstraint('O final TRUE')],composite='object')from_entity=SubjectRelation('CWEType',cardinality='1*',constraints=[RQLConstraint('O final FALSE')],composite='object')to_entity=SubjectRelation('CWEType',cardinality='1*',constraints=[RQLConstraint('O final TRUE')],composite='object')constrained_by=SubjectRelation('CWConstraint',cardinality='*1',composite='subject')cardinality=String(maxsize=2,internationalizable=True,vocabulary=[_('?1'),_('11')],description=_('subject/object cardinality'))ordernum=Int(description=('control subject entity\'s relations order'),default=0)indexed=Boolean(description=_('create an index for quick search on this attribute'))fulltextindexed=Boolean(description=_('index this attribute\'s value in the plain text index'))internationalizable=Boolean(description=_('is this attribute\'s value translatable'))defaultval=String(maxsize=256)description=RichString(internationalizable=True,description=_('semantic description of this attribute'))CARDINALITY_VOCAB=[_('?*'),_('1*'),_('+*'),_('**'),_('?+'),_('1+'),_('++'),_('*+'),_('?1'),_('11'),_('+1'),_('*1'),_('??'),_('1?'),_('+?'),_('*?')]classCWRelation(EntityType):"""define a non final relation: link a non final relation type from a non final entity to a non final entity type. used to build the instance schema """__permissions__=META_ETYPE_PERMSrelation_type=SubjectRelation('CWRType',cardinality='1*',constraints=[RQLConstraint('O final FALSE')],composite='object')from_entity=SubjectRelation('CWEType',cardinality='1*',constraints=[RQLConstraint('O final FALSE')],composite='object')to_entity=SubjectRelation('CWEType',cardinality='1*',constraints=[RQLConstraint('O final FALSE')],composite='object')constrained_by=SubjectRelation('CWConstraint',cardinality='*1',composite='subject')cardinality=String(maxsize=2,internationalizable=True,vocabulary=CARDINALITY_VOCAB,description=_('subject/object cardinality'))ordernum=Int(description=_('control subject entity\'s relations order'),default=0)composite=String(description=_('is the subject/object entity of the relation ''composed of the other ? This implies that when ''the composite is deleted, composants are also ''deleted.'),vocabulary=('',_('subject'),_('object')),maxsize=8,default=None)description=RichString(internationalizable=True,description=_('semantic description of this relation'))# not restricted since it has to be read when checking allowed transitionsclassRQLExpression(EntityType):"""define a rql expression used to define __permissions__"""__permissions__=META_ETYPE_PERMSexprtype=String(required=True,vocabulary=['ERQLExpression','RRQLExpression'])mainvars=String(maxsize=8,description=_('name of the main variables which should be ''used in the selection if necessary (comma ''separated)'))expression=String(required=True,description=_('restriction part of a rql query. ''For entity rql expression, X and U are ''predefined respectivly to the current object and to ''the request user. For relation rql expression, ''S, O and U are predefined respectivly to the current ''relation\'subject, object and to ''the request user. '))read_permission=ObjectRelation(('CWEType','CWAttribute','CWRelation'),cardinality='*?',composite='subject',description=_('rql expression allowing to read entities/relations of this type'))add_permission=ObjectRelation(('CWEType','CWAttribute','CWRelation'),cardinality='*?',composite='subject',description=_('rql expression allowing to add entities/relations of this type'))delete_permission=ObjectRelation(('CWEType','CWAttribute','CWRelation'),cardinality='*?',composite='subject',description=_('rql expression allowing to delete entities/relations of this type'))update_permission=ObjectRelation('CWEType',cardinality='*?',composite='subject',description=_('rql expression allowing to update entities of this type'))classCWConstraint(EntityType):"""define a schema constraint"""__permissions__=META_ETYPE_PERMScstrtype=SubjectRelation('CWConstraintType',cardinality='1*')value=String(description=_('depends on the constraint type'))classCWConstraintType(EntityType):"""define a schema constraint type"""__permissions__=META_ETYPE_PERMSname=String(required=True,indexed=True,internationalizable=True,unique=True,maxsize=64)# not restricted since it has to be read when checking allowed transitionsclassCWGroup(EntityType):"""define a CubicWeb users group"""__permissions__=META_ETYPE_PERMSname=String(required=True,indexed=True,internationalizable=True,unique=True,maxsize=64)read_permission=ObjectRelation(('CWEType','CWAttribute','CWRelation'),cardinality='**',description=_('groups allowed to read entities/relations of this type'))add_permission=ObjectRelation(('CWEType','CWAttribute','CWRelation'),description=_('groups allowed to add entities/relations of this type'))delete_permission=ObjectRelation(('CWEType','CWAttribute','CWRelation'),description=_('groups allowed to delete entities/relations of this type'))update_permission=ObjectRelation('CWEType',description=_('groups allowed to update entities of this type'))classCWProperty(EntityType):"""used for cubicweb configuration. Once a property has been created you can't change the key. """__permissions__={'read':('managers','users','guests'),'add':('managers','users',),'update':('managers','owners',),'delete':('managers','owners',),}# key is a reserved word for mysqlpkey=String(required=True,internationalizable=True,maxsize=256,description=_('defines what\'s the property is applied for. ''You must select this first to be able to set ''value'))value=String(internationalizable=True,maxsize=256)classrelation_type(RelationType):"""link a relation definition to its relation type"""__permissions__=META_RTYPE_PERMSinlined=Trueclassfrom_entity(RelationType):"""link a relation definition to its subject entity type"""__permissions__=META_RTYPE_PERMSinlined=Trueclassto_entity(RelationType):"""link a relation definition to its object entity type"""__permissions__=META_RTYPE_PERMSinlined=Trueclassconstrained_by(RelationType):"""constraints applying on this relation"""__permissions__=META_RTYPE_PERMSclasscstrtype(RelationType):"""constraint factory"""__permissions__=META_RTYPE_PERMSinlined=Trueclassread_permission(RelationType):"""core relation giving to a group the permission to read an entity or relation type """__permissions__=META_RTYPE_PERMSclassadd_permission(RelationType):"""core relation giving to a group the permission to add an entity or relation type """__permissions__=META_RTYPE_PERMSclassdelete_permission(RelationType):"""core relation giving to a group the permission to delete an entity or relation type """__permissions__=META_RTYPE_PERMSclassupdate_permission(RelationType):"""core relation giving to a group the permission to update an entity type """__permissions__=META_RTYPE_PERMSclassis_(RelationType):"""core relation indicating the type of an entity """name='is'# don't explicitly set composite here, this is handled anyway#composite = 'object'__permissions__={'read':('managers','users','guests'),'add':(),'delete':(),}cardinality='1*'subject='*'object='CWEType'classis_instance_of(RelationType):"""core relation indicating the types (including specialized types) of an entity """# don't explicitly set composite here, this is handled anyway#composite = 'object'__permissions__={'read':('managers','users','guests'),'add':(),'delete':(),}cardinality='+*'subject='*'object='CWEType'classspecializes(RelationType):name='specializes'__permissions__={'read':('managers','users','guests'),'add':('managers',),'delete':('managers',),}cardinality='?*'subject='CWEType'object='CWEType'