# copyright 2004-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of yams.## yams is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## yams is distributed in the hope that it will be useful, but WITHOUT ANY# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with yams. If not, see <http://www.gnu.org/licenses/>.fromyams.buildobjsimport(EntityType,RelationType,RelationDefinition,SubjectRelation,Int,String,Boolean)fromyams.constraintsimportSizeConstraint,UniqueConstraintfrom__init__importRESTRICTED_RTYPE_PERMSclassState(EntityType):"""used to associate simple states to an entity type and/or to define workflows """__permissions__={'read':('managers','users','guests',),'add':('managers','users',),'delete':('managers','owners',),'update':('managers','owners',),}# attributeseid=Int(required=True,uid=True)name=String(required=True,indexed=True,internationalizable=True,constraints=[SizeConstraint(256)])description=String(fulltextindexed=True)# relationsstate_of=SubjectRelation('Eetype',cardinality='+*')next_state=SubjectRelation('State',cardinality='**')classstate_of(RelationType):"""link a state to one or more entity type"""__permissions__=RESTRICTED_RTYPE_PERMSclassnext_state(RelationType):"""define a workflow by associating a state to possible following states """__permissions__=RESTRICTED_RTYPE_PERMSclassinitial_state(RelationType):"""indicate which state should be used by default when an entity using states is created """__permissions__={'read':('managers','users','guests',),'add':('managers','users',),'delete':('managers','users',),}subject='Eetype'object='State'cardinality='?*'inlined=TrueclassEetype(EntityType):"""define an entity type, used to build the application schema"""__permissions__={'read':('managers','users','guests',),'add':('managers',),'delete':('managers',),'update':('managers','owners',),}name=String(required=True,indexed=True,internationalizable=True,constraints=[UniqueConstraint(),SizeConstraint(64)])description=String(fulltextindexed=True)meta=Boolean()final=Boolean()