fix bad merge
authorSandrine Ribeau <sandrine.ribeau@logilab.fr>
Mon, 07 Dec 2009 05:09:09 -0800
changeset 4003 b9436fe77c9e
parent 3998 94cc7cad3d2d
child 4004 c52619c738a5
fix bad merge
hooks/integrity.py
hooks/security.py
hooks/syncschema.py
hooks/workflow.py
schema.py
schemas/base.py
schemas/bootstrap.py
server/schemaserial.py
web/form.py
web/uicfg.py
web/views/autoform.py
web/views/basecontrollers.py
web/views/owl.py
--- a/hooks/integrity.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/hooks/integrity.py	Mon Dec 07 05:09:09 2009 -0800
@@ -167,7 +167,7 @@
         entity = self.entity
         for attr in entity.edited_attributes:
             if schema.rschema(attr).final:
-                constraints = [c for c in entity.rdef(attr).constraints
+                constraints = [c for c in entity.e_schema.rdef(attr).constraints
                                if isinstance(c, (RQLUniqueConstraint, RQLConstraint))]
                 if constraints:
                     _CheckConstraintsOp(self._cw, constraints=constraints,
--- a/hooks/security.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/hooks/security.py	Mon Dec 07 05:09:09 2009 -0800
@@ -119,7 +119,7 @@
                                            eidfrom=self.eidfrom,
                                            eidto=self.eidto)
             else:
-                rdef = rschema.rdef(session.describe(self.eidfrom)[0],
-                                    session.describe(self.eidto)[0])
-                rdef.check_perm(session, 'add', fromeid=self.eidfrom, toeid=self.eidto)
+                rdef = rschema.rdef(self._cw.describe(self.eidfrom)[0],
+                                    self._cw.describe(self.eidto)[0])
+                rdef.check_perm(self._cw, 'add', fromeid=self.eidfrom, toeid=self.eidto)
 
--- a/hooks/syncschema.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/hooks/syncschema.py	Mon Dec 07 05:09:09 2009 -0800
@@ -781,7 +781,6 @@
     * register an operation to add the entity type to the instance's
       schema on commit
     """
-<<<<<<< /home/syt/src/fcubicweb/cubicweb/hooks/syncschema.py
     __regid__ = 'syncaddcwetype'
     events = ('after_add_entity',)
 
--- a/hooks/workflow.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/hooks/workflow.py	Mon Dec 07 05:09:09 2009 -0800
@@ -227,7 +227,7 @@
                     msg = session._("transition %s isn't allowed from %s") % (
                         _(tr.name), _(fromstate.name))
                     raise ValidationError(entity.eid, {'by_transition': msg})
-                 if not tr.may_be_fired(foreid):
+                if not tr.may_be_fired(foreid):
                     msg = session._("transition may not be fired")
                     raise ValidationError(entity.eid, {'by_transition': msg})
             if entity.get('to_state'):
--- a/schema.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/schema.py	Mon Dec 07 05:09:09 2009 -0800
@@ -527,6 +527,7 @@
                 self._eid_index[rdef.eid] = rdefs
             except AttributeError:
                 pass # not a serialized schema
+        return rdefs
 
     def del_relation_type(self, rtype):
         rschema = self.rschema(rtype)
--- a/schemas/base.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/schemas/base.py	Mon Dec 07 05:09:09 2009 -0800
@@ -135,30 +135,6 @@
     object = 'String'
 
 
-class CWProperty(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 mysql
-    pkey = 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)
-
-    for_user = SubjectRelation('CWUser', cardinality='?*', composite='object',
-                               description=_('user for which this property is '
-                                             'applying. If this relation is not '
-                                             'set, the property is considered as'
-                                             ' a global property'))
-
-
 # XXX find a better relation name
 class for_user(RelationType):
     """link a property to the user which want this property customization. Unless
--- a/schemas/bootstrap.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/schemas/bootstrap.py	Mon Dec 07 05:09:09 2009 -0800
@@ -177,7 +177,7 @@
     """used for cubicweb configuration. Once a property has been created you
     can't change the key.
     """
-    permissions = {
+    __permissions__ = {
         'read':   ('managers', 'users', 'guests'),
         'add':    ('managers', 'users',),
         'update': ('managers', 'owners',),
--- a/server/schemaserial.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/server/schemaserial.py	Mon Dec 07 05:09:09 2009 -0800
@@ -183,7 +183,6 @@
                                  fulltext_container=ft_container, eid=eid)
         rschema = schema.add_relation_type(rtype)
         index[eid] = rschema
-        set_perms(rschema, permsdict.get(eid, {}))
     cstrsdict = deserialize_rdef_constraints(session)
     for values in session.execute(
         'Any X,SE,RT,OE,CARD,ORD,DESC,IDX,FTIDX,I18N,DFLT WHERE X is CWAttribute,'
@@ -202,7 +201,8 @@
                                   indexed=idx, fulltextindexed=ftidx,
                                   internationalizable=i18n,
                                   default=default, eid=rdefeid)
-        schema.add_relation_def(rdef)
+        rdefs = schema.add_relation_def(rdef)
+        set_perms(rdefs, permsdict.get(rdefeid, {}))
     for values in session.execute(
         'Any X,SE,RT,OE,CARD,ORD,DESC,C WHERE X is CWRelation, X relation_type RT,'
         'X cardinality CARD, X ordernum ORD, X description DESC, '
@@ -216,7 +216,8 @@
                                   order=ord, description=desc,
                                   composite=c, constraints=constraints,
                                   eid=rdefeid)
-        schema.add_relation_def(rdef)
+        rdefs = schema.add_relation_def(rdef)
+        set_perms(rdefs, permsdict.get(rdefeid, {}))
     schema.infer_specialization_rules()
     if _3_2_migration:
         _update_database(schema, sqlcu)
@@ -363,7 +364,7 @@
     amap = {'order': 'ordernum'}
     values = {}
     for prop, default in rschema.rproperty_defs(objtype).iteritems():
-        if prop in ('eid', 'constraints', 'uid', 'infered'):
+        if prop in ('eid', 'constraints', 'uid', 'infered', 'permissions'):
             continue
         value = props.get(prop, default)
         if prop in ('indexed', 'fulltextindexed', 'internationalizable'):
@@ -536,7 +537,7 @@
     else:
         # entity schema
         for rql, args in _erperms2rql(erschema, groupmapping):
-            args['name'] = str(eschema)
+            args['name'] = str(erschema)
             yield rql + 'X is CWEType, X name %(name)s', args
 
 def _erperms2rql(erschema, groupmapping):
@@ -550,7 +551,7 @@
             if isinstance(group_or_rqlexpr, basestring):
                 # group
                 try:
-                    yield ('SET X %s_permission Y WHERE Y eid %%(g)s' % action,
+                    yield ('SET X %s_permission Y WHERE Y eid %%(g)s, ' % action,
                            {'g': groupmapping[group_or_rqlexpr]})
                 except KeyError:
                     continue
--- a/web/form.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/web/form.py	Mon Dec 07 05:09:09 2009 -0800
@@ -36,8 +36,6 @@
         return False
 
 
-<<<<<<< /home/syt/src/fcubicweb/cubicweb/web/form.py
-=======
 # XXX should disappear
 class FormMixIn(object):
     """abstract form mix-in
@@ -192,7 +190,6 @@
 
 ###############################################################################
 
->>>>>>> /tmp/form.py~other.xdns1y
 class metafieldsform(type):
     """metaclass for FieldsForm to retrieve fields defined as class attributes
     and put them into a single ordered list: '_fields_'.
--- a/web/uicfg.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/web/uicfg.py	Mon Dec 07 05:09:09 2009 -0800
@@ -233,12 +233,13 @@
     return result
 
 def _card_and_comp(sschema, rschema, oschema, role):
+    rdef = rschema.rdef(sschema, oschema)
     if role == 'subject':
-        card = rschema.rproperty(sschema, oschema, 'cardinality')[0]
-        composed = rschema.rproperty(sschema, oschema, 'composite') == 'object'
+        card = rdef.cardinality[0]
+        composed = not rschema.final and rdef.composite == 'object'
     else:
-        card = rschema.rproperty(sschema, oschema, 'cardinality')[1]
-        composed = rschema.rproperty(sschema, oschema, 'composite') == 'subject'
+        card = rdef.cardinality[1]
+        composed = not rschema.final and rdef.composite == 'subject'
     return card, composed
 
 class AutoformSectionRelationTags(RelationTagsSet):
@@ -356,12 +357,12 @@
             _targetschemas = []
             for tschema in targetschemas:
                 if not rtags.etype_get(eschema, rschema, role, tschema) in categories:
-                        continue
-                    rdef = rschema.role_rdef(eschema, tschema, role)
-                    if not ((not strict and rdef.has_local_role(permission)) or
-                            rdef.has_perm(entity.req, permission, fromeid=eid)):
-                        continue
-                    _targetschemas.append(tschema)
+                    continue
+                rdef = rschema.role_rdef(eschema, tschema, role)
+                if not ((not strict and rdef.has_local_role(permission)) or
+                        rdef.has_perm(entity.req, permission, fromeid=eid)):
+                    continue
+                _targetschemas.append(tschema)
             if not _targetschemas:
                 continue
             targetschemas = _targetschemas
--- a/web/views/autoform.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/web/views/autoform.py	Mon Dec 07 05:09:09 2009 -0800
@@ -50,94 +50,6 @@
 
     # class methods mapping schema relations to fields in the form ############
 
-<<<<<<< /home/syt/src/fcubicweb/cubicweb/web/views/autoform.py
-=======
-    @classmethod
-    def erelations_by_category(cls, entity, categories=None, permission=None,
-                               rtags=None, strict=False):
-        """return a list of (relation schema, target schemas, role) matching
-        categories and permission
-
-        `strict`:
-          bool telling if having local role is enough (strict = False) or not
-        """
-        if categories is not None:
-            if not isinstance(categories, (list, tuple, set, frozenset)):
-                categories = (categories,)
-            if not isinstance(categories, (set, frozenset)):
-                categories = frozenset(categories)
-        eschema  = entity.e_schema
-        if rtags is None:
-            rtags = cls.rcategories
-        permsoverrides = cls.rpermissions_overrides
-        if entity.has_eid():
-            eid = entity.eid
-        else:
-            eid = None
-            strict = False
-        for rschema, targetschemas, role in eschema.relation_definitions(True):
-            # check category first, potentially lower cost than checking
-            # permission which may imply rql queries
-            if categories is not None:
-                _targetschemas = []
-                for tschema in targetschemas:
-                    if not rtags.etype_get(eschema, rschema, role, tschema) in categories:
-                        continue
-                    rdef = rschema.role_rdef(eschema, tschema, role)
-                    if not ((not strict and rdef.has_local_role(permission)) or
-                            rdef.has_perm(entity.req, permission, fromeid=eid)):
-                        continue
-                    _targetschemas.append(tschema)
-                if not _targetschemas:
-                    continue
-                targetschemas = _targetschemas
-            if permission is not None:
-                # tag allowing to hijack the permission machinery when
-                # permission is not verifiable until the entity is actually
-                # created...
-                if eid is None and '%s_on_new' % permission in permsoverrides.etype_get(eschema, rschema, role):
-                    yield (rschema, targetschemas, role)
-                    continue
-                if rschema.final:
-                    if not eschema.rdef(rschema).has_perm(entity.req, permission, eid=eid):
-                        continue
-                elif role == 'subject':
-                    # on relation with cardinality 1 or ?, we need delete perm as well
-                    # if the relation is already set
-                    if (permission == 'add'
-                        and rschema.rdef(eschema, targetschemas[0]).role_cardinality(role) in '1?'
-                        and eid and entity.related(rschema.type, role)
-                        and not rschema.has_perm(entity.req, 'delete', fromeid=eid,
-                                                 toeid=entity.related(rschema.type, role)[0][0])):
-                        continue
-                elif role == 'object':
-                    # on relation with cardinality 1 or ?, we need delete perm as well
-                    # if the relation is already set
-                    if (permission == 'add'
-                        and rschema.rdef(targetschemas[0], eschema).role_cardinality(role) in '1?'
-                        and eid and entity.related(rschema.type, role)
-                        and not rschema.has_perm(entity.req, 'delete', toeid=eid,
-                                                 fromeid=entity.related(rschema.type, role)[0][0])):
-                        continue
-            yield (rschema, targetschemas, role)
-
-    @classmethod
-    def esrelations_by_category(cls, entity, categories=None, permission=None,
-                                strict=False):
-        """filter out result of relations_by_category(categories, permission) by
-        removing final relations
-
-        return a sorted list of (relation's label, relation'schema, role)
-        """
-        result = []
-        for rschema, ttypes, role in cls.erelations_by_category(
-            entity, categories, permission, strict=strict):
-            if rschema.final:
-                continue
-            result.append((rschema.display_name(entity.req, role), rschema, role))
-        return sorted(result)
-
->>>>>>> /tmp/autoform.py~other.rHDQ-C
     @iclassmethod
     def field_by_name(cls_or_self, name, role='subject', eschema=None):
         """return field with the given name and role. If field is not explicitly
--- a/web/views/basecontrollers.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/web/views/basecontrollers.py	Mon Dec 07 05:09:09 2009 -0800
@@ -249,12 +249,7 @@
         note: it's the responsability of js_* methods to set the correct
         response content type
         """
-<<<<<<< /home/syt/src/fcubicweb/cubicweb/web/views/basecontrollers.py
         self._cw.json_request = True
-        self._cw.pageid = self._cw.form.get('pageid')
-=======
-        self.req.json_request = True
->>>>>>> /tmp/basecontrollers.py~other.K2YVFx
         try:
             fname = self._cw.form['fname']
             func = getattr(self, 'js_%s' % fname)
--- a/web/views/owl.py	Thu Dec 03 17:17:43 2009 +0100
+++ b/web/views/owl.py	Mon Dec 07 05:09:09 2009 -0800
@@ -71,15 +71,9 @@
         if writeprefix:
             self.w(OWL_CLOSING_ROOT)
 
-<<<<<<< /home/syt/src/fcubicweb/cubicweb/web/views/owl.py
-    def should_display_rschema(self, rschema):
-        return not rschema in self.skiptypes and (
-            rschema.has_local_role('read') or
-            rschema.has_perm(self._cw, 'read'))
-=======
     def should_display_rschema(self, eschema, rschema, tschemas, role):
-        return rschema.may_have_permissions('read', self.req, eschema, role)
->>>>>>> /tmp/owl.py~other.-maWGS
+        return not rschema in self.skiptypes and ( 
+            rschema.may_have_permissions('read', self._cw, eschema, role))
 
     def visit_schema(self, skiptypes):
         """get a layout for a whole schema"""