entity.py
changeset 9256 697a8181ba30
parent 9188 0677e03077fb
child 9261 1dfe62a9da50
equal deleted inserted replaced
9255:46f41c3e1443 9256:697a8181ba30
    40 from cubicweb.schema import (RQLVocabularyConstraint, RQLConstraint,
    40 from cubicweb.schema import (RQLVocabularyConstraint, RQLConstraint,
    41                              GeneratedConstraint)
    41                              GeneratedConstraint)
    42 from cubicweb.rqlrewrite import RQLRewriter
    42 from cubicweb.rqlrewrite import RQLRewriter
    43 
    43 
    44 from cubicweb.uilib import soup2xhtml
    44 from cubicweb.uilib import soup2xhtml
    45 from cubicweb.mixins import MI_REL_TRIGGERS
       
    46 from cubicweb.mttransforms import ENGINE
    45 from cubicweb.mttransforms import ENGINE
    47 
    46 
    48 _marker = object()
    47 _marker = object()
    49 
    48 
    50 def greater_card(rschema, subjtypes, objtypes, index):
    49 def greater_card(rschema, subjtypes, objtypes, index):
   192             if rschema.type == 'eid':
   191             if rschema.type == 'eid':
   193                 continue
   192                 continue
   194             setattr(cls, rschema.type, Attribute(rschema.type))
   193             setattr(cls, rschema.type, Attribute(rschema.type))
   195         mixins = []
   194         mixins = []
   196         for rschema, _, role in eschema.relation_definitions():
   195         for rschema, _, role in eschema.relation_definitions():
   197             if (rschema, role) in MI_REL_TRIGGERS:
       
   198                 mixin = MI_REL_TRIGGERS[(rschema, role)]
       
   199                 if not (issubclass(cls, mixin) or mixin in mixins): # already mixed ?
       
   200                     mixins.append(mixin)
       
   201                 for iface in getattr(mixin, '__implements__', ()):
       
   202                     if not interface.implements(cls, iface):
       
   203                         interface.extend(cls, iface)
       
   204             if role == 'subject':
   196             if role == 'subject':
   205                 attr = rschema.type
   197                 attr = rschema.type
   206             else:
   198             else:
   207                 attr = 'reverse_%s' % rschema.type
   199                 attr = 'reverse_%s' % rschema.type
   208             setattr(cls, attr, Relation(rschema, role))
   200             setattr(cls, attr, Relation(rschema, role))
   209         if mixins:
       
   210             # see etype class instantation in cwvreg.ETypeRegistry.etype_class method:
       
   211             # due to class dumping, cls is the generated top level class with actual
       
   212             # user class as (only) parent. Since we want to be able to override mixins
       
   213             # method from this user class, we have to take care to insert mixins after that
       
   214             # class
       
   215             #
       
   216             # note that we don't plug mixins as user class parent since it causes pb
       
   217             # with some cases of entity classes inheritance.
       
   218             mixins.insert(0, cls.__bases__[0])
       
   219             mixins += cls.__bases__[1:]
       
   220             cls.__bases__ = tuple(mixins)
       
   221             cls.info('plugged %s mixins on %s', mixins, cls)
       
   222 
   201 
   223     fetch_attrs = ('modification_date',)
   202     fetch_attrs = ('modification_date',)
   224 
   203 
   225     @classmethod
   204     @classmethod
   226     def cw_fetch_order(cls, select, attr, var):
   205     def cw_fetch_order(cls, select, attr, var):
  1336 
  1315 
  1337     @deprecated('[3.13] use entity.cw_clear_all_caches()')
  1316     @deprecated('[3.13] use entity.cw_clear_all_caches()')
  1338     def clear_all_caches(self):
  1317     def clear_all_caches(self):
  1339         return self.cw_clear_all_caches()
  1318         return self.cw_clear_all_caches()
  1340 
  1319 
  1341     @deprecated('[3.9] use entity.cw_attr_value(attr)')
       
  1342     def get_value(self, name):
       
  1343         return self.cw_attr_value(name)
       
  1344 
       
  1345     @deprecated('[3.9] use entity.cw_delete()')
       
  1346     def delete(self, **kwargs):
       
  1347         return self.cw_delete(**kwargs)
       
  1348 
       
  1349     @deprecated('[3.9] use entity.cw_attr_metadata(attr, metadata)')
       
  1350     def attr_metadata(self, attr, metadata):
       
  1351         return self.cw_attr_metadata(attr, metadata)
       
  1352 
       
  1353     @deprecated('[3.9] use entity.cw_has_perm(action)')
       
  1354     def has_perm(self, action):
       
  1355         return self.cw_has_perm(action)
       
  1356 
       
  1357     @deprecated('[3.9] use entity.cw_set_relation_cache(rtype, role, rset)')
       
  1358     def set_related_cache(self, rtype, role, rset):
       
  1359         self.cw_set_relation_cache(rtype, role, rset)
       
  1360 
       
  1361     @deprecated('[3.9] use entity.cw_clear_relation_cache(rtype, role)')
       
  1362     def clear_related_cache(self, rtype=None, role=None):
       
  1363         self.cw_clear_relation_cache(rtype, role)
       
  1364 
       
  1365     @deprecated('[3.9] use entity.cw_related_rql(rtype, [role, [targettypes]])')
       
  1366     def related_rql(self, rtype, role='subject', targettypes=None):
       
  1367         return self.cw_related_rql(rtype, role, targettypes)
       
  1368 
       
  1369     @property
  1320     @property
  1370     @deprecated('[3.10] use entity.cw_edited')
  1321     @deprecated('[3.10] use entity.cw_edited')
  1371     def edited_attributes(self):
  1322     def edited_attributes(self):
  1372         return self.cw_edited
  1323         return self.cw_edited
  1373 
  1324