--- a/entities/schemaobjs.py Mon Jan 04 18:40:30 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This file is part of CubicWeb.
-#
-# CubicWeb 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.
-#
-# CubicWeb 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 CubicWeb. If not, see <http://www.gnu.org/licenses/>.
-"""schema definition related entities"""
-
-__docformat__ = "restructuredtext en"
-
-from logilab.common.decorators import cached
-
-from yams.schema import role_name
-
-from cubicweb import ValidationError
-from cubicweb.schema import ERQLExpression, RRQLExpression
-
-from cubicweb.entities import AnyEntity, fetch_config
-
-
-class CWEType(AnyEntity):
- __regid__ = 'CWEType'
- fetch_attrs, cw_fetch_order = fetch_config(['name'])
-
- def dc_title(self):
- return u'%s (%s)' % (self.name, self._cw._(self.name))
-
- def dc_long_title(self):
- stereotypes = []
- _ = self._cw._
- if self.final:
- stereotypes.append(_('final'))
- if stereotypes:
- return u'%s <<%s>>' % (self.dc_title(), ', '.join(stereotypes))
- return self.dc_title()
-
-
-class CWRType(AnyEntity):
- __regid__ = 'CWRType'
- fetch_attrs, cw_fetch_order = fetch_config(['name'])
-
- def dc_title(self):
- return u'%s (%s)' % (self.name, self._cw._(self.name))
-
- def dc_long_title(self):
- stereotypes = []
- _ = self._cw._
- if self.symmetric:
- stereotypes.append(_('symmetric'))
- if self.inlined:
- stereotypes.append(_('inlined'))
- if self.final:
- stereotypes.append(_('final'))
- if stereotypes:
- return u'%s <<%s>>' % (self.dc_title(), ', '.join(stereotypes))
- return self.dc_title()
-
- def check_inlined_allowed(self):
- """check inlining is possible, raise ValidationError if not possible
- """
- # don't use the persistent schema, we may miss cardinality changes
- # in the same transaction
- for rdef in self.reverse_relation_type:
- card = rdef.cardinality[0]
- if not card in '?1':
- qname = role_name('inlined', 'subject')
- rtype = self.name
- stype = rdef.stype
- otype = rdef.otype
- msg = self._cw._("can't set inlined=True, "
- "%(stype)s %(rtype)s %(otype)s "
- "has cardinality=%(card)s")
- raise ValidationError(self.eid, {qname: msg % locals()})
-
-
-class CWRelation(AnyEntity):
- __regid__ = 'CWRelation'
- fetch_attrs = fetch_config(['cardinality'])[0]
-
- def dc_title(self):
- return u'%s %s %s' % (
- self.from_entity[0].name,
- self.relation_type[0].name,
- self.to_entity[0].name)
-
- def dc_long_title(self):
- card = self.cardinality
- scard, ocard = u'', u''
- if card[0] != '1':
- scard = '[%s]' % card[0]
- if card[1] != '1':
- ocard = '[%s]' % card[1]
- return u'%s %s%s%s %s' % (
- self.from_entity[0].name,
- scard, self.relation_type[0].name, ocard,
- self.to_entity[0].name)
-
- @property
- def rtype(self):
- return self.relation_type[0]
-
- @property
- def stype(self):
- return self.from_entity[0]
-
- @property
- def otype(self):
- return self.to_entity[0]
-
- def yams_schema(self):
- rschema = self._cw.vreg.schema.rschema(self.rtype.name)
- return rschema.rdefs[(self.stype.name, self.otype.name)]
-
-
-class CWAttribute(CWRelation):
- __regid__ = 'CWAttribute'
-
- def dc_long_title(self):
- card = self.cardinality
- scard = u''
- if card[0] == '1':
- scard = '+'
- return u'%s %s%s %s' % (
- self.from_entity[0].name,
- scard, self.relation_type[0].name,
- self.to_entity[0].name)
-
-
-class CWConstraint(AnyEntity):
- __regid__ = 'CWConstraint'
- fetch_attrs, cw_fetch_order = fetch_config(['value'])
-
- def dc_title(self):
- return '%s(%s)' % (self.cstrtype[0].name, self.value or u'')
-
- @property
- def type(self):
- return self.cstrtype[0].name
-
-
-class RQLExpression(AnyEntity):
- __regid__ = 'RQLExpression'
- fetch_attrs, cw_fetch_order = fetch_config(['exprtype', 'mainvars', 'expression'])
-
- def dc_title(self):
- return self.expression or u''
-
- def dc_long_title(self):
- return '%s(%s)' % (self.exprtype, self.expression or u'')
-
- @property
- def expression_of(self):
- for rel in ('read_permission', 'add_permission', 'delete_permission',
- 'update_permission', 'condition'):
- values = getattr(self, 'reverse_%s' % rel)
- if values:
- return values[0]
-
- @cached
- def _rqlexpr(self):
- if self.exprtype == 'ERQLExpression':
- return ERQLExpression(self.expression, self.mainvars, self.eid)
- #if self.exprtype == 'RRQLExpression':
- return RRQLExpression(self.expression, self.mainvars, self.eid)
-
- def check_expression(self, *args, **kwargs):
- return self._rqlexpr().check(*args, **kwargs)