# HG changeset patch # User Sylvain Thénault # Date 1274381400 -7200 # Node ID 1a534c596bffb1943691258a6ccbd45d5302b9ab # Parent 9ab2b4c74bafeea2069eab86339c4fccf7ba9af0 [entity] continue cleanup of Entity/AnyEntity namespace * prefix by cw_ or _cw all '2nd zone' attributes / methods, other most commonly used will be done later (some methods used by client are made private anyway when they are for internal purpose anyway) * kill set_eid, use direct affectation instead * kill the auto-transmutation feature (pre_add_hook), hence releasing 3.9 will require releasing file cube as well diff -r 9ab2b4c74baf -r 1a534c596bff dataimport.py --- a/dataimport.py Thu May 20 20:47:55 2010 +0200 +++ b/dataimport.py Thu May 20 20:50:00 2010 +0200 @@ -584,7 +584,7 @@ kwargs[k] = getattr(v, 'eid', v) entity, rels = self.metagen.base_etype_dicts(etype) entity = copy(entity) - entity._related_cache = {} + entity.cw_clear_relation_cache() self.metagen.init_entity(entity) entity.update(kwargs) entity.edited_attributes = set(entity) diff -r 9ab2b4c74baf -r 1a534c596bff devtools/testlib.py --- a/devtools/testlib.py Thu May 20 20:47:55 2010 +0200 +++ b/devtools/testlib.py Thu May 20 20:50:00 2010 +0200 @@ -306,7 +306,7 @@ req.execute('SET X in_group G WHERE X eid %%(x)s, G name IN(%s)' % ','.join(repr(g) for g in groups), {'x': user.eid}) - user.clear_related_cache('in_group', 'subject') + user.cw_clear_relation_cache('in_group', 'subject') if commit: req.cnx.commit() return user diff -r 9ab2b4c74baf -r 1a534c596bff entities/__init__.py --- a/entities/__init__.py Thu May 20 20:47:55 2010 +0200 +++ b/entities/__init__.py Thu May 20 20:50:00 2010 +0200 @@ -42,7 +42,7 @@ for rschema, attrschema in self.e_schema.attribute_definitions(): if rschema.meta: continue - value = self.get_value(rschema.type) + value = self.cw_attr_value(rschema.type) if value: # make the value printable (dates, floats, bytes, etc.) return self.printable_value(rschema.type, value, attrschema.type, @@ -107,7 +107,7 @@ """ if rtype is None: return self.dc_title().lower() - value = self.get_value(rtype) + value = self.cw_attr_value(rtype) # do not restrict to `unicode` because Bytes will return a `str` value if isinstance(value, basestring): return self.printable_value(rtype, format='text/plain').lower() diff -r 9ab2b4c74baf -r 1a534c596bff entities/test/unittest_wfobjs.py --- a/entities/test/unittest_wfobjs.py Thu May 20 20:47:55 2010 +0200 +++ b/entities/test/unittest_wfobjs.py Thu May 20 20:50:00 2010 +0200 @@ -108,7 +108,7 @@ self.commit() iworkflowable.change_state('deactivated', u'deactivate 2') self.commit() - e.clear_related_cache('wf_info_for', 'object') + e.cw_clear_relation_cache('wf_info_for', 'object') self.assertEquals([tr.comment for tr in e.reverse_wf_info_for], ['deactivate 1', 'activate 1', 'deactivate 2']) self.assertEquals(iworkflowable.latest_trinfo().comment, 'deactivate 2') @@ -128,7 +128,7 @@ def _test_manager_deactivate(self, user): iworkflowable = user.cw_adapt_to('IWorkflowable') - user.clear_related_cache('in_state', 'subject') + user.cw_clear_relation_cache('in_state', 'subject') self.assertEquals(len(user.in_state), 1) self.assertEquals(iworkflowable.state, 'deactivated') trinfo = iworkflowable.latest_trinfo() diff -r 9ab2b4c74baf -r 1a534c596bff entities/wfobjs.py --- a/entities/wfobjs.py Thu May 20 20:47:55 2010 +0200 +++ b/entities/wfobjs.py Thu May 20 20:50:00 2010 +0200 @@ -173,7 +173,7 @@ {'os': todelstate.eid, 'ns': replacement.eid}) execute('SET X to_state NS WHERE X to_state OS, OS eid %(os)s, NS eid %(ns)s', {'os': todelstate.eid, 'ns': replacement.eid}) - todelstate.delete() + todelstate.cw_delete() class BaseTransition(AnyEntity): diff -r 9ab2b4c74baf -r 1a534c596bff entity.py --- a/entity.py Thu May 20 20:47:55 2010 +0200 +++ b/entity.py Thu May 20 20:50:00 2010 +0200 @@ -15,16 +15,15 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -"""Base class for entity objects manipulated in clients +"""Base class for entity objects manipulated in clients""" -""" __docformat__ = "restructuredtext en" from warnings import warn from logilab.common import interface -from logilab.common.compat import all from logilab.common.decorators import cached +from logilab.common.deprecation import deprecated from logilab.mtconverter import TransformData, TransformError, xml_escape from rql.utils import rqlvar_maker @@ -289,12 +288,12 @@ def __init__(self, req, rset=None, row=None, col=0): AppObject.__init__(self, req, rset=rset, row=row, col=col) dict.__init__(self) - self._related_cache = {} + self._cw_related_cache = {} if rset is not None: self.eid = rset[row][col] else: self.eid = None - self._is_saved = True + self._cw_is_saved = True def __repr__(self): return '' % ( @@ -413,27 +412,7 @@ cache[interface] = adapter return adapter - def rql_set_value(self, attr, value): - """call by rql execution plan when some attribute is modified - - don't use dict api in such case since we don't want attribute to be - added to skip_security_attributes. - """ - super(Entity, self).__setitem__(attr, value) - - def pre_add_hook(self): - """hook called by the repository before doing anything to add the entity - (before_add entity hooks have not been called yet). This give the - occasion to do weird stuff such as autocast (File -> Image for instance). - - This method must return the actual entity to be added. - """ - return self - - def set_eid(self, eid): - self.eid = eid - - def has_eid(self): + def has_eid(self): # XXX cw_has_eid """return True if the entity has an attributed eid (False meaning that the entity has to be created """ @@ -443,38 +422,34 @@ except (ValueError, TypeError): return False - def is_saved(self): + def cw_is_saved(self): """during entity creation, there is some time during which the entity - has an eid attributed though it's not saved (eg during before_add_entity - hooks). You can use this method to ensure the entity has an eid *and* is - saved in its source. + has an eid attributed though it's not saved (eg during + 'before_add_entity' hooks). You can use this method to ensure the entity + has an eid *and* is saved in its source. """ - return self.has_eid() and self._is_saved + return self.has_eid() and self._cw_is_saved @cached - def metainformation(self): + def cw_metainformation(self): res = dict(zip(('type', 'source', 'extid'), self._cw.describe(self.eid))) res['source'] = self._cw.source_defs()[res['source']] return res - def clear_local_perm_cache(self, action): - for rqlexpr in self.e_schema.get_rqlexprs(action): - self._cw.local_perm_cache.pop((rqlexpr.eid, (('x', self.eid),)), None) - - def check_perm(self, action): + def cw_check_perm(self, action): self.e_schema.check_perm(self._cw, action, eid=self.eid) - def has_perm(self, action): + def cw_has_perm(self, action): return self.e_schema.has_perm(self._cw, action, eid=self.eid) - def view(self, __vid, __registry='views', w=None, **kwargs): + def view(self, __vid, __registry='views', w=None, **kwargs): # XXX cw_view """shortcut to apply a view on this entity""" view = self._cw.vreg[__registry].select(__vid, self._cw, rset=self.cw_rset, row=self.cw_row, col=self.cw_col, **kwargs) return view.render(row=self.cw_row, col=self.cw_col, w=w, **kwargs) - def absolute_url(self, *args, **kwargs): + def absolute_url(self, *args, **kwargs): # XXX cw_url """return an absolute url to view this entity""" # use *args since we don't want first argument to be "anonymous" to # avoid potential clash with kwargs @@ -487,7 +462,7 @@ # the object for use in the relation is tricky # XXX search_state is web specific if getattr(self._cw, 'search_state', ('normal',))[0] == 'normal': - kwargs['base_url'] = self.metainformation()['source'].get('base-url') + kwargs['base_url'] = self.cw_metainformation()['source'].get('base-url') if method in (None, 'view'): try: kwargs['_restpath'] = self.rest_path(kwargs.get('base_url')) @@ -499,7 +474,7 @@ kwargs['rql'] = 'Any X WHERE X eid %s' % self.eid return self._cw.build_url(method, **kwargs) - def rest_path(self, use_ext_eid=False): + def rest_path(self, use_ext_eid=False): # XXX cw_rest_path """returns a REST-like (relative) path for this entity""" mainattr, needcheck = self._rest_attr_info() etype = str(self.e_schema) @@ -522,12 +497,12 @@ path += '/eid' if mainattr == 'eid': if use_ext_eid: - value = self.metainformation()['extid'] + value = self.cw_metainformation()['extid'] else: value = self.eid return '%s/%s' % (path, self._cw.url_quote(value)) - def attr_metadata(self, attr, metadata): + def cw_attr_metadata(self, attr, metadata): """return a metadata for an attribute (None if unspecified)""" value = getattr(self, '%s_%s' % (attr, metadata), None) if value is None and metadata == 'encoding': @@ -535,7 +510,7 @@ return value def printable_value(self, attr, value=_marker, attrtype=None, - format='text/html', displaytime=True): + format='text/html', displaytime=True): # XXX cw_printable_value """return a displayable value (i.e. unicode string) which may contains html tags """ @@ -554,16 +529,16 @@ # description... if props.internationalizable: value = self._cw._(value) - attrformat = self.attr_metadata(attr, 'format') + attrformat = self.cw_attr_metadata(attr, 'format') if attrformat: - return self.mtc_transform(value, attrformat, format, - self._cw.encoding) + return self._cw_mtc_transform(value, attrformat, format, + self._cw.encoding) elif attrtype == 'Bytes': - attrformat = self.attr_metadata(attr, 'format') + attrformat = self.cw_attr_metadata(attr, 'format') if attrformat: - encoding = self.attr_metadata(attr, 'encoding') - return self.mtc_transform(value.getvalue(), attrformat, format, - encoding) + encoding = self.cw_attr_metadata(attr, 'encoding') + return self._cw_mtc_transform(value.getvalue(), attrformat, format, + encoding) return u'' value = printable_value(self._cw, attrtype, value, props, displaytime=displaytime) @@ -571,8 +546,8 @@ value = xml_escape(value) return value - def mtc_transform(self, data, format, target_format, encoding, - _engine=ENGINE): + def _cw_mtc_transform(self, data, format, target_format, encoding, + _engine=ENGINE): trdata = TransformData(data, format, encoding, appobject=self) data = _engine.convert(trdata, target_format).decode() if format == 'text/html': @@ -581,7 +556,7 @@ # entity cloning ########################################################## - def copy_relations(self, ceid): + def copy_relations(self, ceid): # XXX cw_copy_relations """copy relations of the object with the given eid on this object (this method is called on the newly created copy, and ceid designates the original entity). @@ -610,7 +585,7 @@ rql = 'SET X %s V WHERE X eid %%(x)s, Y eid %%(y)s, Y %s V' % ( rschema.type, rschema.type) execute(rql, {'x': self.eid, 'y': ceid}) - self.clear_related_cache(rschema.type, 'subject') + self.cw_clear_relation_cache(rschema.type, 'subject') for rschema in self.e_schema.object_relations(): if rschema.meta: continue @@ -628,19 +603,19 @@ rql = 'SET V %s X WHERE X eid %%(x)s, Y eid %%(y)s, V %s Y' % ( rschema.type, rschema.type) execute(rql, {'x': self.eid, 'y': ceid}) - self.clear_related_cache(rschema.type, 'object') + self.cw_clear_relation_cache(rschema.type, 'object') # data fetching methods ################################################### @cached - def as_rset(self): + def as_rset(self): # XXX .cw_as_rset """returns a resultset containing `self` information""" rset = ResultSet([(self.eid,)], 'Any X WHERE X eid %(x)s', {'x': self.eid}, [(self.__regid__,)]) rset.req = self._cw return rset - def to_complete_relations(self): + def _cw_to_complete_relations(self): """by default complete final relations to when calling .complete()""" for rschema in self.e_schema.subject_relations(): if rschema.final: @@ -657,7 +632,7 @@ all(matching_groups(e.get_groups('read')) for e in targets): yield rschema, 'subject' - def to_complete_attributes(self, skip_bytes=True, skip_pwd=True): + def _cw_to_complete_attributes(self, skip_bytes=True, skip_pwd=True): for rschema, attrschema in self.e_schema.attribute_definitions(): # skip binary data by default if skip_bytes and attrschema.type == 'Bytes': @@ -674,7 +649,7 @@ yield attr _cw_completed = False - def complete(self, attributes=None, skip_bytes=True, skip_pwd=True): + def complete(self, attributes=None, skip_bytes=True, skip_pwd=True): # XXX cw_complete """complete this entity by adding missing attributes (i.e. query the repository to fill the entity) @@ -691,7 +666,7 @@ V = varmaker.next() rql = ['WHERE %s eid %%(x)s' % V] selected = [] - for attr in (attributes or self.to_complete_attributes(skip_bytes, skip_pwd)): + for attr in (attributes or self._cw_to_complete_attributes(skip_bytes, skip_pwd)): # if attribute already in entity, nothing to do if self.has_key(attr): continue @@ -703,9 +678,9 @@ lastattr = len(selected) + 1 if attributes is None: # fetch additional relations (restricted to 0..1 relations) - for rschema, role in self.to_complete_relations(): + for rschema, role in self._cw_to_complete_relations(): rtype = rschema.type - if self.relation_cached(rtype, role): + if self.cw_relation_cached(rtype, role): continue var = varmaker.next() targettype = rschema.targets(self.e_schema, role)[0] @@ -742,9 +717,9 @@ rrset.req = self._cw else: rrset = self._cw.eid_rset(value) - self.set_related_cache(rtype, role, rrset) + self.cw_set_relation_cache(rtype, role, rrset) - def get_value(self, name): + def cw_attr_value(self, name): """get value for the attribute relation , query the repository to get the value if necessary. @@ -754,7 +729,7 @@ try: value = self[name] except KeyError: - if not self.is_saved(): + if not self.cw_is_saved(): return None rql = "Any A WHERE X eid %%(x)s, X %s A" % name try: @@ -776,7 +751,7 @@ self[name] = value = None return value - def related(self, rtype, role='subject', limit=None, entities=False): + def related(self, rtype, role='subject', limit=None, entities=False): # XXX .cw_related """returns a resultset of related entities :param role: is the role played by 'self' in the relation ('subject' or 'object') @@ -784,16 +759,16 @@ :param entities: if True, the entites are returned; if False, a result set is returned """ try: - return self.related_cache(rtype, role, entities, limit) + return self._cw_relation_cache(rtype, role, entities, limit) except KeyError: pass assert self.has_eid() - rql = self.related_rql(rtype, role) + rql = self.cw_related_rql(rtype, role) rset = self._cw.execute(rql, {'x': self.eid}) - self.set_related_cache(rtype, role, rset) + self.cw_set_relation_cache(rtype, role, rset) return self.related(rtype, role, limit, entities) - def related_rql(self, rtype, role='subject', targettypes=None): + def cw_related_rql(self, rtype, role='subject', targettypes=None): rschema = self._cw.vreg.schema[rtype] if role == 'subject': restriction = 'E eid %%(x)s, E %s X' % rtype @@ -842,7 +817,7 @@ # generic vocabulary methods ############################################## - def unrelated_rql(self, rtype, targettype, role, ordermethod=None, + def cw_unrelated_rql(self, rtype, targettype, role, ordermethod=None, vocabconstraints=True): """build a rql to fetch `targettype` entities unrelated to this entity using (rtype, role) relation. @@ -904,12 +879,12 @@ return rql, args def unrelated(self, rtype, targettype, role='subject', limit=None, - ordermethod=None): + ordermethod=None): # XXX .cw_unrelated """return a result set of target type objects that may be related by a given relation, with self as subject or object """ try: - rql, args = self.unrelated_rql(rtype, targettype, role, ordermethod) + rql, args = self.cw_unrelated_rql(rtype, targettype, role, ordermethod) except Unauthorized: return self._cw.empty_rset() if limit is not None: @@ -917,18 +892,19 @@ rql = '%s LIMIT %s WHERE %s' % (before, limit, after) return self._cw.execute(rql, args) - # relations cache handling ################################################ + # relations cache handling ################################################# - def relation_cached(self, rtype, role): - """return true if the given relation is already cached on the instance + def cw_relation_cached(self, rtype, role): + """return None if the given relation isn't already cached on the + instance, else the content of the cache (a 2-uple (rset, entities)). """ - return self._related_cache.get('%s_%s' % (rtype, role)) + return self._cw_related_cache.get('%s_%s' % (rtype, role)) - def related_cache(self, rtype, role, entities=True, limit=None): + def _cw_relation_cache(self, rtype, role, entities=True, limit=None): """return values for the given relation if it's cached on the instance, else raise `KeyError` """ - res = self._related_cache['%s_%s' % (rtype, role)][entities] + res = self._cw_related_cache['%s_%s' % (rtype, role)][entities] if limit is not None and limit < len(res): if entities: res = res[:limit] @@ -936,10 +912,10 @@ res = res.limit(limit) return res - def set_related_cache(self, rtype, role, rset, col=0): + def cw_set_relation_cache(self, rtype, role, rset): """set cached values for the given relation""" if rset: - related = list(rset.entities(col)) + related = list(rset.entities(0)) rschema = self._cw.vreg.schema.rschema(rtype) if role == 'subject': rcard = rschema.rdef(self.e_schema, related[0].e_schema).cardinality[1] @@ -949,23 +925,23 @@ target = 'subject' if rcard in '?1': for rentity in related: - rentity._related_cache['%s_%s' % (rtype, target)] = ( + rentity._cw_related_cache['%s_%s' % (rtype, target)] = ( self.as_rset(), (self,)) else: related = () - self._related_cache['%s_%s' % (rtype, role)] = (rset, related) + self._cw_related_cache['%s_%s' % (rtype, role)] = (rset, related) - def clear_related_cache(self, rtype=None, role=None): + def cw_clear_relation_cache(self, rtype=None, role=None): """clear cached values for the given relation or the entire cache if no relation is given """ if rtype is None: - self._related_cache = {} + self._cw_related_cache = {} else: assert role - self._related_cache.pop('%s_%s' % (rtype, role), None) + self._cw_related_cache.pop('%s_%s' % (rtype, role), None) - def clear_all_caches(self): + def clear_all_caches(self): # XXX cw_clear_all_caches """flush all caches on this entity. Further attributes/relations access will triggers new database queries to get back values. @@ -978,7 +954,7 @@ self.clear() # clear relations cache for rschema, _, role in self.e_schema.relation_definitions(): - self.clear_related_cache(rschema.type, role) + self.cw_clear_relation_cache(rschema.type, role) # rest path unique cache try: del self.__unique @@ -991,10 +967,10 @@ # raw edition utilities ################################################### - def set_attributes(self, **kwargs): + def set_attributes(self, **kwargs): # XXX cw_set_attributes _check_cw_unsafe(kwargs) assert kwargs - assert self._is_saved, "should not call set_attributes while entity "\ + assert self.cw_is_saved(), "should not call set_attributes while entity "\ "hasn't been saved yet" relations = [] for key in kwargs: @@ -1009,7 +985,7 @@ # edited_attributes / skip_security_attributes machinery self.update(kwargs) - def set_relations(self, **kwargs): + def set_relations(self, **kwargs): # XXX cw_set_relations """add relations to the given object. To set a relation where this entity is the object of the relation, use 'reverse_' as argument name. @@ -1033,28 +1009,42 @@ restr, ','.join(str(r.eid) for r in values)), {'x': self.eid}) - def delete(self, **kwargs): + def cw_delete(self, **kwargs): assert self.has_eid(), self.eid self._cw.execute('DELETE %s X WHERE X eid %%(x)s' % self.e_schema, {'x': self.eid}, **kwargs) # server side utilities ################################################### + def _cw_rql_set_value(self, attr, value): + """call by rql execution plan when some attribute is modified + + don't use dict api in such case since we don't want attribute to be + added to skip_security_attributes. + + This method is for internal use, you should not use it. + """ + super(Entity, self).__setitem__(attr, value) + + def _cw_clear_local_perm_cache(self, action): + for rqlexpr in self.e_schema.get_rqlexprs(action): + self._cw.local_perm_cache.pop((rqlexpr.eid, (('x', self.eid),)), None) + @property - def skip_security_attributes(self): + def _cw_skip_security_attributes(self): try: - return self._skip_security_attributes + return self.__cw_skip_security_attributes except: - self._skip_security_attributes = set() - return self._skip_security_attributes + self.__cw_skip_security_attributes = set() + return self.__cw_skip_security_attributes - def set_defaults(self): + def _cw_set_defaults(self): """set default values according to the schema""" for attr, value in self.e_schema.defaults(): if not self.has_key(attr): self[str(attr)] = value - def check(self, creation=False): + def _cw_check(self, creation=False): """check this entity against its schema. Only final relation are checked here, constraint on actual relations are checked in hooks """ @@ -1077,6 +1067,29 @@ self.e_schema.check(self, creation=creation, _=_, relations=relations) + @deprecated('[3.9] use entity.cw_attr_value(attr)') + def get_value(self, name): + return self.cw_attr_value(name) + + @deprecated('[3.9] use entity.cw_delete()') + def delete(self, **kwargs): + return self.cw_delete(**kwargs) + + @deprecated('[3.9] use entity.cw_attr_metadata(attr, metadata)') + def attr_metadata(self, attr, metadata): + return self.cw_attr_metadata(attr, metadata) + + @deprecated('[3.9] use entity.cw_has_perm(action)') + def has_perm(self, action): + return self.cw_has_perm(action) + + @deprecated('[3.9] use entity.cw_set_relation_cache(rtype, role, rset)') + def set_related_cache(self, rtype, role, rset): + self.cw_set_relation_cache(rtype, role, rset) + + @deprecated('[3.9] use entity.cw_clear_relation_cache(rtype, role, rset)') + def clear_related_cache(self, rtype=None, role=None): + self.cw_clear_relation_cache(rtype, role) # attribute and relation descriptors ########################################## @@ -1090,7 +1103,7 @@ def __get__(self, eobj, eclass): if eobj is None: return self - return eobj.get_value(self._attrname) + return eobj.cw_attr_value(self._attrname) def __set__(self, eobj, value): eobj[self._attrname] = value diff -r 9ab2b4c74baf -r 1a534c596bff goa/db.py --- a/goa/db.py Thu May 20 20:47:55 2010 +0200 +++ b/goa/db.py Thu May 20 20:50:00 2010 +0200 @@ -233,7 +233,7 @@ return self.req.datastore_get(self.eid) except AttributeError: # self.req is not a server session return Get(self.eid) - self.set_defaults() + self._cw_set_defaults() values = self._to_gae_dict(convert=False) parent = key_name = _app = None if self._gaeinitargs is not None: @@ -343,7 +343,7 @@ self.req = req dbmodel = self.to_gae_model() key = Put(dbmodel) - self.set_eid(str(key)) + self.eid = str(key) if self.req is not None and self.rset is None: self.rset = rset_from_objs(self.req, dbmodel, ('eid',), 'Any X WHERE X eid %(x)s', {'x': self.eid}) @@ -409,7 +409,7 @@ def dynamic_properties(self): raise NotImplementedError('use eschema') - def is_saved(self): + def cw_is_saved(self): return self.has_eid() def parent(self): diff -r 9ab2b4c74baf -r 1a534c596bff goa/gaesource.py --- a/goa/gaesource.py Thu May 20 20:47:55 2010 +0200 +++ b/goa/gaesource.py Thu May 20 20:50:00 2010 +0200 @@ -49,15 +49,15 @@ except KeyError: pass else: - entity.clear_related_cache(rtype, role) + entity.cw_clear_relation_cache(rtype, role) if gaesubject.kind() == 'CWUser': for asession in session.repo._sessions.itervalues(): if asession.user.eid == subject: - asession.user.clear_related_cache(rtype, 'subject') + asession.user.cw_clear_relation_cache(rtype, 'subject') if gaeobject.kind() == 'CWUser': for asession in session.repo._sessions.itervalues(): if asession.user.eid == object: - asession.user.clear_related_cache(rtype, 'object') + asession.user.cw_clear_relation_cache(rtype, 'object') def _mark_modified(session, gaeentity): modified = session.transaction_data.setdefault('modifiedentities', {}) diff -r 9ab2b4c74baf -r 1a534c596bff goa/test/unittest_rql.py --- a/goa/test/unittest_rql.py Thu May 20 20:47:55 2010 +0200 +++ b/goa/test/unittest_rql.py Thu May 20 20:50:00 2010 +0200 @@ -15,9 +15,6 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -""" - -""" from cubicweb.goa.testlib import * from cubicweb import Binary @@ -612,7 +609,7 @@ def test_error_unknown_eid(self): rset = self.req.execute('Any X WHERE X eid %(x)s', {'x': '1234'}) self.assertEquals(len(rset), 0) - self.blog.delete() + self.blog.cw_delete() rset = self.req.execute('Any X WHERE X eid %(x)s', {'x': self.blog.eid}) self.assertEquals(len(rset), 0) diff -r 9ab2b4c74baf -r 1a534c596bff hooks/bookmark.py --- a/hooks/bookmark.py Thu May 20 20:47:55 2010 +0200 +++ b/hooks/bookmark.py Thu May 20 20:50:00 2010 +0200 @@ -15,9 +15,8 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -"""bookmark related hooks +"""bookmark related hooks""" -""" __docformat__ = "restructuredtext en" from cubicweb.server import hook @@ -28,7 +27,7 @@ def precommit_event(self): if not self.session.deleted_in_transaction(self.bookmark.eid): if not self.bookmark.bookmarked_by: - self.bookmark.delete() + self.bookmark.cw_delete() class DelBookmarkedByHook(hook.Hook): diff -r 9ab2b4c74baf -r 1a534c596bff hooks/security.py --- a/hooks/security.py Thu May 20 20:47:55 2010 +0200 +++ b/hooks/security.py Thu May 20 20:50:00 2010 +0200 @@ -29,9 +29,9 @@ def check_entity_attributes(session, entity, editedattrs=None): eid = entity.eid eschema = entity.e_schema - # .skip_security_attributes is there to bypass security for attributes + # ._cw_skip_security_attributes is there to bypass security for attributes # set by hooks by modifying the entity's dictionnary - dontcheck = entity.skip_security_attributes + dontcheck = entity._cw_skip_security_attributes if editedattrs is None: try: editedattrs = entity.edited_attributes @@ -57,7 +57,7 @@ for values in session.transaction_data.pop('check_entity_perm_op'): entity = session.entity_from_eid(values[0]) action = values[1] - entity.check_perm(action) + entity.cw_check_perm(action) check_entity_attributes(session, entity, values[2:]) def commit_event(self): @@ -105,10 +105,10 @@ def __call__(self): try: # check user has permission right now, if not retry at commit time - self.entity.check_perm('update') + self.entity.cw_check_perm('update') check_entity_attributes(self._cw, self.entity) except Unauthorized: - self.entity.clear_local_perm_cache('update') + self.entity._cw_clear_local_perm_cache('update') # save back editedattrs in case the entity is reedited later in the # same transaction, which will lead to edited_attributes being # overwritten @@ -122,7 +122,7 @@ events = ('before_delete_entity',) def __call__(self): - self.entity.check_perm('delete') + self.entity.cw_check_perm('delete') class BeforeAddRelationSecurityHook(SecurityHook): diff -r 9ab2b4c74baf -r 1a534c596bff mixins.py --- a/mixins.py Thu May 20 20:47:55 2010 +0200 +++ b/mixins.py Thu May 20 20:50:00 2010 +0200 @@ -145,7 +145,7 @@ entities=entities) def children_rql(self): - return self.related_rql(self.tree_attribute, self.children_target) + return self.cw_related_rql(self.tree_attribute, self.children_target) def is_leaf(self): return len(self.children()) == 0 diff -r 9ab2b4c74baf -r 1a534c596bff rset.py --- a/rset.py Thu May 20 20:47:55 2010 +0200 +++ b/rset.py Thu May 20 20:50:00 2010 +0200 @@ -453,7 +453,7 @@ etype = self.description[row][col] entity = self.req.vreg['etypes'].etype_class(etype)(req, rset=self, row=row, col=col) - entity.set_eid(eid) + entity.eid = eid # cache entity req.set_entity_cache(entity) eschema = entity.e_schema @@ -494,7 +494,7 @@ rrset.req = req else: rrset = self._build_entity(row, outerselidx).as_rset() - entity.set_related_cache(attr, role, rrset) + entity.cw_set_relation_cache(attr, role, rrset) return entity @cached diff -r 9ab2b4c74baf -r 1a534c596bff selectors.py --- a/selectors.py Thu May 20 20:47:55 2010 +0200 +++ b/selectors.py Thu May 20 20:50:00 2010 +0200 @@ -1033,7 +1033,7 @@ return self.score(req, rset, row, col) def score_entity(self, entity): - if entity.has_perm(self.action): + if entity.cw_has_perm(self.action): return 1 return 0 diff -r 9ab2b4c74baf -r 1a534c596bff server/repository.py --- a/server/repository.py Thu May 20 20:47:55 2010 +0200 +++ b/server/repository.py Thu May 20 20:50:00 2010 +0200 @@ -565,7 +565,7 @@ session.close() session = Session(user, self, cnxprops) user._cw = user.cw_rset.req = session - user.clear_related_cache() + user.cw_clear_relation_cache() self._sessions[session.id] = session self.info('opened %s', session) self.hm.call_hooks('session_open', session) @@ -1021,17 +1021,12 @@ the entity instance """ # init edited_attributes before calling before_add_entity hooks - entity._is_saved = False # entity has an eid but is not yet saved - entity.edited_attributes = set(entity) - entity_ = entity.pre_add_hook() - # XXX kill that transmutation feature ! - if not entity_ is entity: - entity.__class__ = entity_.__class__ - entity.__dict__.update(entity_.__dict__) + entity._cw_is_saved = False # entity has an eid but is not yet saved + entity.edited_attributes = set(entity) # XXX cw_edited_attributes eschema = entity.e_schema source = self.locate_etype_source(entity.__regid__) # allocate an eid to the entity before calling hooks - entity.set_eid(self.system_source.create_eid(session)) + entity.eid = self.system_source.create_eid(session) # set caches asap extid = self.init_entity_caches(session, entity, source) if server.DEBUG & server.DBG_REPO: @@ -1046,12 +1041,12 @@ rschema = eschema.subjrels[attr] if not rschema.final: # inlined relation relations.append((attr, entity[attr])) - entity.set_defaults() + entity._cw_set_defaults() if session.is_hook_category_activated('integrity'): - entity.check(creation=True) + entity._cw_check(creation=True) source.add_entity(session, entity) self.add_info(session, entity, source, extid, complete=False) - entity._is_saved = True # entity has an eid and is saved + entity._cw_is_saved = True # entity has an eid and is saved # prefill entity relation caches for rschema in eschema.subject_relations(): rtype = str(rschema) @@ -1060,12 +1055,13 @@ if rschema.final: entity.setdefault(rtype, None) else: - entity.set_related_cache(rtype, 'subject', session.empty_rset()) + entity.cw_set_relation_cache(rtype, 'subject', + session.empty_rset()) for rschema in eschema.object_relations(): rtype = str(rschema) if rtype in schema.VIRTUAL_RTYPES: continue - entity.set_related_cache(rtype, 'object', session.empty_rset()) + entity.cw_set_relation_cache(rtype, 'object', session.empty_rset()) # set inline relation cache before call to after_add_entity for attr, value in relations: session.update_rel_cache_add(entity.eid, attr, value) @@ -1094,7 +1090,7 @@ entity.edited_attributes = edited_attributes try: if session.is_hook_category_activated('integrity'): - entity.check() + entity._cw_check() only_inline_rels, need_fti_update = True, False relations = [] source = self.source_from_eid(entity.eid, session) @@ -1132,7 +1128,7 @@ hm.call_hooks('after_update_entity', session, entity=entity) for attr, value, prevvalue in relations: # if the relation is already cached, update existant cache - relcache = entity.relation_cached(attr, 'subject') + relcache = entity.cw_relation_cached(attr, 'subject') if prevvalue is not None: hm.call_hooks('after_delete_relation', session, eidfrom=entity.eid, rtype=attr, eidto=prevvalue) @@ -1142,8 +1138,8 @@ if relcache is not None: session.update_rel_cache_add(entity.eid, attr, value) else: - entity.set_related_cache(attr, 'subject', - session.eid_rset(value)) + entity.cw_set_relation_cache(attr, 'subject', + session.eid_rset(value)) hm.call_hooks('after_add_relation', session, eidfrom=entity.eid, rtype=attr, eidto=value) finally: diff -r 9ab2b4c74baf -r 1a534c596bff server/session.py --- a/server/session.py Thu May 20 20:47:55 2010 +0200 +++ b/server/session.py Thu May 20 20:50:00 2010 +0200 @@ -242,7 +242,7 @@ entity = self.entity_cache(eid) except KeyError: return - rcache = entity.relation_cached(rtype, role) + rcache = entity.cw_relation_cached(rtype, role) if rcache is not None: rset, entities = rcache rset = rset.copy() @@ -258,14 +258,15 @@ targetentity.cw_col = 0 rset.rowcount += 1 entities.append(targetentity) - entity._related_cache['%s_%s' % (rtype, role)] = (rset, tuple(entities)) + entity._cw_related_cache['%s_%s' % (rtype, role)] = ( + rset, tuple(entities)) def _update_entity_rel_cache_del(self, eid, rtype, role, targeteid): try: entity = self.entity_cache(eid) except KeyError: return - rcache = entity.relation_cached(rtype, role) + rcache = entity.cw_relation_cached(rtype, role) if rcache is not None: rset, entities = rcache for idx, row in enumerate(rset.rows): @@ -284,7 +285,8 @@ del rset.description[idx] del entities[idx] rset.rowcount -= 1 - entity._related_cache['%s_%s' % (rtype, role)] = (rset, tuple(entities)) + entity._cw_related_cache['%s_%s' % (rtype, role)] = ( + rset, tuple(entities)) # resource accessors ###################################################### diff -r 9ab2b4c74baf -r 1a534c596bff server/sources/__init__.py --- a/server/sources/__init__.py Thu May 20 20:47:55 2010 +0200 +++ b/server/sources/__init__.py Thu May 20 20:50:00 2010 +0200 @@ -341,7 +341,7 @@ entity. """ entity = self.repo.vreg['etypes'].etype_class(etype)(session) - entity.set_eid(eid) + entity.eid = eid return entity def after_entity_insertion(self, session, lid, entity): diff -r 9ab2b4c74baf -r 1a534c596bff server/sources/native.py --- a/server/sources/native.py Thu May 20 20:47:55 2010 +0200 +++ b/server/sources/native.py Thu May 20 20:50:00 2010 +0200 @@ -1007,10 +1007,10 @@ entity[rtype] = unicode(value, session.encoding, 'replace') else: entity[rtype] = value - entity.set_eid(eid) + entity.eid = eid session.repo.init_entity_caches(session, entity, self) entity.edited_attributes = set(entity) - entity.check() + entity._cw_check() self.repo.hm.call_hooks('before_add_entity', session, entity=entity) # restore the entity action.changes['cw_eid'] = eid @@ -1077,7 +1077,7 @@ return [session._( "Can't undo creation of entity %(eid)s of type %(etype)s, type " "no more supported" % {'eid': eid, 'etype': etype})] - entity.set_eid(eid) + entity.eid = eid # for proper eid/type cache update hook.set_operation(session, 'pendingeids', eid, CleanupDeletedEidsCacheOp) diff -r 9ab2b4c74baf -r 1a534c596bff server/ssplanner.py --- a/server/ssplanner.py Thu May 20 20:47:55 2010 +0200 +++ b/server/ssplanner.py Thu May 20 20:50:00 2010 +0200 @@ -487,7 +487,7 @@ value = row[index] index += 1 if rorder == InsertRelationsStep.FINAL: - edef.rql_set_value(rtype, value) + edef._cw_rql_set_value(rtype, value) elif rorder == InsertRelationsStep.RELATION: self.plan.add_relation_def( (edef, rtype, value) ) edef.querier_pending_relations[(rtype, 'subject')] = value @@ -584,7 +584,7 @@ edef = edefs[eid] except KeyError: edefs[eid] = edef = session.entity_from_eid(eid) - edef.rql_set_value(str(rschema), rhsval) + edef._cw_rql_set_value(str(rschema), rhsval) else: repo.glob_add_relation(session, lhsval, str(rschema), rhsval) result[i] = newrow diff -r 9ab2b4c74baf -r 1a534c596bff server/test/unittest_multisources.py --- a/server/test/unittest_multisources.py Thu May 20 20:47:55 2010 +0200 +++ b/server/test/unittest_multisources.py Thu May 20 20:50:00 2010 +0200 @@ -15,9 +15,6 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -""" - -""" from os.path import dirname, join, abspath from datetime import datetime, timedelta @@ -113,11 +110,11 @@ self.assertEquals(len(rset), 4) # since they are orderd by eid, we know the 3 first one is coming from the system source # and the others from external source - self.assertEquals(rset.get_entity(0, 0).metainformation(), + self.assertEquals(rset.get_entity(0, 0).cw_metainformation(), {'source': {'adapter': 'native', 'uri': 'system'}, 'type': u'Card', 'extid': None}) externent = rset.get_entity(3, 0) - metainf = externent.metainformation() + metainf = externent.cw_metainformation() self.assertEquals(metainf['source'], {'adapter': 'pyrorql', 'base-url': 'http://extern.org/', 'uri': 'extern'}) self.assertEquals(metainf['type'], 'Card') self.assert_(metainf['extid']) diff -r 9ab2b4c74baf -r 1a534c596bff server/test/unittest_security.py --- a/server/test/unittest_security.py Thu May 20 20:47:55 2010 +0200 +++ b/server/test/unittest_security.py Thu May 20 20:50:00 2010 +0200 @@ -192,8 +192,7 @@ self.assertEquals(len(rset), 1) ent = rset.get_entity(0, 0) session.set_pool() # necessary - self.assertRaises(Unauthorized, - ent.e_schema.check_perm, session, 'update', eid=ent.eid) + self.assertRaises(Unauthorized, ent.cw_check_perm, 'update') self.assertRaises(Unauthorized, cu.execute, "SET P travaille S WHERE P is Personne, S is Societe") # test nothing has actually been inserted: @@ -561,11 +560,11 @@ self.execute('SET TI comment %(c)s WHERE TI wf_info_for X, X ref "ARCT01"', {'c': u'bouh!'}) self.commit() - aff.clear_related_cache('wf_info_for', 'object') + aff.cw_clear_relation_cache('wf_info_for', 'object') trinfo = iworkflowable.latest_trinfo() self.assertEquals(trinfo.comment, 'bouh!') # but not from_state/to_state - aff.clear_related_cache('wf_info_for', role='object') + aff.cw_clear_relation_cache('wf_info_for', role='object') self.assertRaises(Unauthorized, self.execute, 'SET TI from_state S WHERE TI eid %(ti)s, S name "ben non"', {'ti': trinfo.eid}) diff -r 9ab2b4c74baf -r 1a534c596bff server/test/unittest_storage.py --- a/server/test/unittest_storage.py Thu May 20 20:47:55 2010 +0200 +++ b/server/test/unittest_storage.py Thu May 20 20:50:00 2010 +0200 @@ -15,9 +15,7 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -"""unit tests for module cubicweb.server.sources.storages - -""" +"""unit tests for module cubicweb.server.sources.storages""" from __future__ import with_statement @@ -89,11 +87,11 @@ f1.set_attributes(data=Binary('the new data')) self.rollback() self.assertEquals(file(expected_filepath).read(), 'the-data') - f1.delete() + f1.cw_delete() self.failUnless(osp.isfile(expected_filepath)) self.rollback() self.failUnless(osp.isfile(expected_filepath)) - f1.delete() + f1.cw_delete() self.commit() self.failIf(osp.isfile(expected_filepath)) diff -r 9ab2b4c74baf -r 1a534c596bff server/test/unittest_undo.py --- a/server/test/unittest_undo.py Thu May 20 20:47:55 2010 +0200 +++ b/server/test/unittest_undo.py Thu May 20 20:50:00 2010 +0200 @@ -15,9 +15,6 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -""" - -""" from __future__ import with_statement from cubicweb import ValidationError @@ -104,7 +101,7 @@ address=u'toto@logilab.org', reverse_use_email=toto) txuuid1 = self.commit() - toto.delete() + toto.cw_delete() txuuid2 = self.commit() undoable_transactions = self.cnx.undoable_transactions txs = undoable_transactions(action='D') @@ -147,7 +144,7 @@ self.commit() txs = self.cnx.undoable_transactions() self.assertEquals(len(txs), 2) - toto.delete() + toto.cw_delete() txuuid = self.commit() actions = self.cnx.transaction_info(txuuid).actions_list() self.assertEquals(len(actions), 1) @@ -186,7 +183,7 @@ c = session.create_entity('Card', title=u'hop', content=u'hop') p = session.create_entity('Personne', nom=u'louis', fiche=c) self.commit() - c.delete() + c.cw_delete() txuuid = self.commit() c2 = session.create_entity('Card', title=u'hip', content=u'hip') p.set_relations(fiche=c2) @@ -207,9 +204,9 @@ session.execute('DELETE U in_group G WHERE U eid %(x)s', {'x': self.toto.eid}) self.toto.set_relations(in_group=g) self.commit() - self.toto.delete() + self.toto.cw_delete() txuuid = self.commit() - g.delete() + g.cw_delete() self.commit() errors = self.cnx.undo_transaction(txuuid) self.assertEquals(errors, diff -r 9ab2b4c74baf -r 1a534c596bff test/unittest_entity.py --- a/test/unittest_entity.py Thu May 20 20:47:55 2010 +0200 +++ b/test/unittest_entity.py Thu May 20 20:50:00 2010 +0200 @@ -103,21 +103,21 @@ e = self.execute('Any X WHERE X eid %(x)s', {'x': eid2}).get_entity(0, 0) e.copy_relations(user.eid) self.commit() - e.clear_related_cache('in_state', 'subject') + e.cw_clear_relation_cache('in_state', 'subject') self.assertEquals(e.cw_adapt_to('IWorkflowable').state, 'activated') def test_related_cache_both(self): user = self.execute('Any X WHERE X eid %(x)s', {'x':self.user().eid}).get_entity(0, 0) adeleid = self.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0] self.commit() - self.assertEquals(user._related_cache, {}) + self.assertEquals(user._cw_related_cache, {}) email = user.primary_email[0] - self.assertEquals(sorted(user._related_cache), ['primary_email_subject']) - self.assertEquals(email._related_cache.keys(), ['primary_email_object']) + self.assertEquals(sorted(user._cw_related_cache), ['primary_email_subject']) + self.assertEquals(email._cw_related_cache.keys(), ['primary_email_object']) groups = user.in_group - self.assertEquals(sorted(user._related_cache), ['in_group_subject', 'primary_email_subject']) + self.assertEquals(sorted(user._cw_related_cache), ['in_group_subject', 'primary_email_subject']) for group in groups: - self.failIf('in_group_subject' in group._related_cache, group._related_cache.keys()) + self.failIf('in_group_subject' in group._cw_related_cache, group._cw_related_cache.keys()) def test_related_limit(self): req = self.request() @@ -197,20 +197,20 @@ Note.fetch_attrs, Note.fetch_order = fetch_config(('type',)) SubNote.fetch_attrs, SubNote.fetch_order = fetch_config(('type',)) p = self.request().create_entity('Personne', nom=u'pouet') - self.assertEquals(p.related_rql('evaluee'), + self.assertEquals(p.cw_related_rql('evaluee'), 'Any X,AA,AB ORDERBY AA ASC WHERE E eid %(x)s, E evaluee X, ' 'X type AA, X modification_date AB') Personne.fetch_attrs, Personne.fetch_order = fetch_config(('nom', )) # XXX - self.assertEquals(p.related_rql('evaluee'), + self.assertEquals(p.cw_related_rql('evaluee'), 'Any X,AA ORDERBY AA DESC ' 'WHERE E eid %(x)s, E evaluee X, X modification_date AA') tag = self.vreg['etypes'].etype_class('Tag')(self.request()) - self.assertEquals(tag.related_rql('tags', 'subject'), + self.assertEquals(tag.cw_related_rql('tags', 'subject'), 'Any X,AA ORDERBY AA DESC ' 'WHERE E eid %(x)s, E tags X, X modification_date AA') - self.assertEquals(tag.related_rql('tags', 'subject', ('Personne',)), + self.assertEquals(tag.cw_related_rql('tags', 'subject', ('Personne',)), 'Any X,AA,AB ORDERBY AA ASC ' 'WHERE E eid %(x)s, E tags X, X is IN (Personne), X nom AA, ' 'X modification_date AB') @@ -219,47 +219,47 @@ tag = self.vreg['etypes'].etype_class('Tag')(self.request()) for ttype in self.schema['tags'].objects(): self.vreg['etypes'].etype_class(ttype).fetch_attrs = ('modification_date',) - self.assertEquals(tag.related_rql('tags', 'subject'), + self.assertEquals(tag.cw_related_rql('tags', 'subject'), 'Any X,AA ORDERBY AA DESC ' 'WHERE E eid %(x)s, E tags X, X modification_date AA') def test_unrelated_rql_security_1(self): user = self.request().user - rql = user.unrelated_rql('use_email', 'EmailAddress', 'subject')[0] + rql = user.cw_unrelated_rql('use_email', 'EmailAddress', 'subject')[0] self.assertEquals(rql, 'Any O,AA,AB,AC ORDERBY AC DESC ' 'WHERE NOT S use_email O, S eid %(x)s, O is EmailAddress, O address AA, O alias AB, O modification_date AC') self.create_user('toto') self.login('toto') user = self.request().user - rql = user.unrelated_rql('use_email', 'EmailAddress', 'subject')[0] + rql = user.cw_unrelated_rql('use_email', 'EmailAddress', 'subject')[0] self.assertEquals(rql, 'Any O,AA,AB,AC ORDERBY AC DESC ' 'WHERE NOT S use_email O, S eid %(x)s, O is EmailAddress, O address AA, O alias AB, O modification_date AC') user = self.execute('Any X WHERE X login "admin"').get_entity(0, 0) - self.assertRaises(Unauthorized, user.unrelated_rql, 'use_email', 'EmailAddress', 'subject') + self.assertRaises(Unauthorized, user.cw_unrelated_rql, 'use_email', 'EmailAddress', 'subject') self.login('anon') user = self.request().user - self.assertRaises(Unauthorized, user.unrelated_rql, 'use_email', 'EmailAddress', 'subject') + self.assertRaises(Unauthorized, user.cw_unrelated_rql, 'use_email', 'EmailAddress', 'subject') def test_unrelated_rql_security_2(self): email = self.execute('INSERT EmailAddress X: X address "hop"').get_entity(0, 0) - rql = email.unrelated_rql('use_email', 'CWUser', 'object')[0] + rql = email.cw_unrelated_rql('use_email', 'CWUser', 'object')[0] self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ASC ' 'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD') - #rql = email.unrelated_rql('use_email', 'Person', 'object')[0] + #rql = email.cw_unrelated_rql('use_email', 'Person', 'object')[0] #self.assertEquals(rql, '') self.login('anon') email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0) - rql = email.unrelated_rql('use_email', 'CWUser', 'object')[0] + rql = email.cw_unrelated_rql('use_email', 'CWUser', 'object')[0] self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ' 'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD, ' 'A eid %(B)s, EXISTS(S identity A, NOT A in_group C, C name "guests", C is CWGroup)') - #rql = email.unrelated_rql('use_email', 'Person', 'object')[0] + #rql = email.cw_unrelated_rql('use_email', 'Person', 'object')[0] #self.assertEquals(rql, '') def test_unrelated_rql_security_nonexistant(self): self.login('anon') email = self.vreg['etypes'].etype_class('EmailAddress')(self.request()) - rql = email.unrelated_rql('use_email', 'CWUser', 'object')[0] + rql = email.cw_unrelated_rql('use_email', 'CWUser', 'object')[0] self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ' 'WHERE S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD, ' 'A eid %(B)s, EXISTS(S identity A, NOT A in_group C, C name "guests", C is CWGroup)') @@ -455,9 +455,9 @@ trinfo = self.execute('Any X WHERE X eid %(x)s', {'x': eid}).get_entity(0, 0) trinfo.complete() self.failUnless(isinstance(trinfo['creation_date'], datetime)) - self.failUnless(trinfo.relation_cached('from_state', 'subject')) - self.failUnless(trinfo.relation_cached('to_state', 'subject')) - self.failUnless(trinfo.relation_cached('wf_info_for', 'subject')) + self.failUnless(trinfo.cw_relation_cached('from_state', 'subject')) + self.failUnless(trinfo.cw_relation_cached('to_state', 'subject')) + self.failUnless(trinfo.cw_relation_cached('wf_info_for', 'subject')) self.assertEquals(trinfo.by_transition, ()) def test_request_cache(self): @@ -501,7 +501,7 @@ def test_metainformation_and_external_absolute_url(self): req = self.request() note = req.create_entity('Note', type=u'z') - metainf = note.metainformation() + metainf = note.cw_metainformation() self.assertEquals(metainf, {'source': {'adapter': 'native', 'uri': 'system'}, 'type': u'Note', 'extid': None}) self.assertEquals(note.absolute_url(), 'http://testing.fr/cubicweb/note/%s' % note.eid) metainf['source'] = metainf['source'].copy() diff -r 9ab2b4c74baf -r 1a534c596bff test/unittest_rset.py --- a/test/unittest_rset.py Thu May 20 20:47:55 2010 +0200 +++ b/test/unittest_rset.py Thu May 20 20:50:00 2010 +0200 @@ -229,10 +229,10 @@ self.assertEquals(e['surname'], 'di mascio') self.assertRaises(KeyError, e.__getitem__, 'firstname') self.assertRaises(KeyError, e.__getitem__, 'creation_date') - self.assertEquals(pprelcachedict(e._related_cache), []) + self.assertEquals(pprelcachedict(e._cw_related_cache), []) e.complete() self.assertEquals(e['firstname'], 'adrien') - self.assertEquals(pprelcachedict(e._related_cache), []) + self.assertEquals(pprelcachedict(e._cw_related_cache), []) def test_get_entity_advanced(self): self.request().create_entity('Bookmark', title=u'zou', path=u'/view') @@ -245,19 +245,19 @@ self.assertEquals(e['title'], 'zou') self.assertRaises(KeyError, e.__getitem__, 'path') self.assertEquals(e.view('text'), 'zou') - self.assertEquals(pprelcachedict(e._related_cache), []) + self.assertEquals(pprelcachedict(e._cw_related_cache), []) e = rset.get_entity(0, 1) self.assertEquals(e.cw_row, 0) self.assertEquals(e.cw_col, 1) self.assertEquals(e['login'], 'anon') self.assertRaises(KeyError, e.__getitem__, 'firstname') - self.assertEquals(pprelcachedict(e._related_cache), + self.assertEquals(pprelcachedict(e._cw_related_cache), []) e.complete() self.assertEquals(e['firstname'], None) self.assertEquals(e.view('text'), 'anon') - self.assertEquals(pprelcachedict(e._related_cache), + self.assertEquals(pprelcachedict(e._cw_related_cache), []) self.assertRaises(NotAnEntity, rset.get_entity, 0, 2) @@ -269,7 +269,7 @@ seid = self.execute('State X WHERE X name "activated"')[0][0] # for_user / in_group are prefetched in CWUser __init__, in_state should # be filed from our query rset - self.assertEquals(pprelcachedict(e._related_cache), + self.assertEquals(pprelcachedict(e._cw_related_cache), [('in_state_subject', [seid])]) def test_get_entity_advanced_prefilled_cache(self): @@ -279,7 +279,7 @@ 'X title XT, S name SN, U login UL, X eid %s' % e.eid) e = rset.get_entity(0, 0) self.assertEquals(e['title'], 'zou') - self.assertEquals(pprelcachedict(e._related_cache), + self.assertEquals(pprelcachedict(e._cw_related_cache), [('created_by_subject', [5])]) # first level of recursion u = e.created_by[0] @@ -298,9 +298,9 @@ e = rset.get_entity(0, 0) # if any of the assertion below fails with a KeyError, the relation is not cached # related entities should be an empty list - self.assertEquals(e.related_cache('primary_email', 'subject', True), ()) + self.assertEquals(e._cw_relation_cache('primary_email', 'subject', True), ()) # related rset should be an empty rset - cached = e.related_cache('primary_email', 'subject', False) + cached = e._cw_relation_cache('primary_email', 'subject', False) self.assertIsInstance(cached, ResultSet) self.assertEquals(cached.rowcount, 0) diff -r 9ab2b4c74baf -r 1a534c596bff web/formfields.py --- a/web/formfields.py Thu May 20 20:47:55 2010 +0200 +++ b/web/formfields.py Thu May 20 20:50:00 2010 +0200 @@ -323,7 +323,7 @@ value = getattr(entity, self.name) if value is not None or not self.fallback_on_none_attribute: return value - elif entity.has_eid() or entity.relation_cached(self.name, self.role): + elif entity.has_eid() or entity.cw_relation_cached(self.name, self.role): value = [r[0] for r in entity.related(self.name, self.role)] if value or not self.fallback_on_none_attribute: return value @@ -399,7 +399,7 @@ entity = form.edited_entity if entity.e_schema.has_metadata(self.name, 'format') and ( entity.has_eid() or '%s_format' % self.name in entity): - return form.edited_entity.attr_metadata(self.name, 'format') + return form.edited_entity.cw_attr_metadata(self.name, 'format') return form._cw.property_value('ui.default-text-format') def encoding(self, form): @@ -408,7 +408,7 @@ entity = form.edited_entity if entity.e_schema.has_metadata(self.name, 'encoding') and ( entity.has_eid() or '%s_encoding' % self.name in entity): - return form.edited_entity.attr_metadata(self.name, 'encoding') + return form.edited_entity.cw_attr_metadata(self.name, 'encoding') return form._cw.encoding def form_init(self, form): diff -r 9ab2b4c74baf -r 1a534c596bff web/views/autoform.py --- a/web/views/autoform.py Thu May 20 20:47:55 2010 +0200 +++ b/web/views/autoform.py Thu May 20 20:50:00 2010 +0200 @@ -766,7 +766,7 @@ """return a list of (relation schema, role) to edit for the entity""" if self.display_fields is not None: return self.display_fields - if self.edited_entity.has_eid() and not self.edited_entity.has_perm('update'): + if self.edited_entity.has_eid() and not self.edited_entity.cw_has_perm('update'): return [] # XXX we should simply put eid in the generated section, no? return [(rtype, role) for rtype, _, role in self._relations_by_section( @@ -869,7 +869,7 @@ vvreg = self._cw.vreg['views'] # display inline-edition view for all existing related entities for i, relentity in enumerate(related.entities()): - if relentity.has_perm('update'): + if relentity.cw_has_perm('update'): yield vvreg.select('inline-edition', self._cw, rset=related, row=i, col=0, etype=ttype, rtype=rschema, role=role, diff -r 9ab2b4c74baf -r 1a534c596bff web/views/editcontroller.py --- a/web/views/editcontroller.py Thu May 20 20:47:55 2010 +0200 +++ b/web/views/editcontroller.py Thu May 20 20:50:00 2010 +0200 @@ -305,7 +305,7 @@ entity = self._cw.entity_from_eid(eid, etype) path, params = entity.cw_adapt_to('IEditControl').after_deletion_path() redirect_info.add( (path, tuple(params.iteritems())) ) - entity.delete() + entity.cw_delete() if len(redirect_info) > 1: # In the face of ambiguity, refuse the temptation to guess. self._after_deletion_path = 'view', () diff -r 9ab2b4c74baf -r 1a534c596bff web/views/editforms.py --- a/web/views/editforms.py Thu May 20 20:47:55 2010 +0200 +++ b/web/views/editforms.py Thu May 20 20:50:00 2010 +0200 @@ -206,7 +206,7 @@ if not rschema.final: # ensure relation cache is filed rset = self.copying.related(rschema, role) - self.newentity.set_related_cache(rschema, role, rset) + self.newentity.cw_set_relation_cache(rschema, role, rset) def submited_message(self): """return the message that will be displayed on successful edition""" @@ -342,7 +342,7 @@ rdef = entity.e_schema.rdef(rtype) afs = uicfg.autoform_section.etype_get( entity.__regid__, rtype, 'subject', rdef.object) - if 'main_hidden' in afs or not entity.has_perm('update'): + if 'main_hidden' in afs or not entity.cw_has_perm('update'): return False if not rdef.has_perm(self._cw, 'update', eid=entity.eid): return False diff -r 9ab2b4c74baf -r 1a534c596bff web/views/editviews.py --- a/web/views/editviews.py Thu May 20 20:47:55 2010 +0200 +++ b/web/views/editviews.py Thu May 20 20:50:00 2010 +0200 @@ -59,9 +59,9 @@ # them. Use fetch_order and not fetch_unrelated_order as sort method # since the latter is mainly there to select relevant items in the combo # box, it doesn't give interesting result in this context - rql, args = entity.unrelated_rql(rtype, etype, role, - ordermethod='fetch_order', - vocabconstraints=False) + rql, args = entity.cw_unrelated_rql(rtype, etype, role, + ordermethod='fetch_order', + vocabconstraints=False) rset = self._cw.execute(rql, args, tuple(args)) return rset, 'list', "search-associate-content", True diff -r 9ab2b4c74baf -r 1a534c596bff web/views/treeview.py --- a/web/views/treeview.py Thu May 20 20:47:55 2010 +0200 +++ b/web/views/treeview.py Thu May 20 20:50:00 2010 +0200 @@ -54,7 +54,7 @@ XXX should be removed from the public interface """ - return self.entity.related_rql(self.tree_relation, self.parent_role) + return self.entity.cw_related_rql(self.tree_relation, self.parent_role) @implements_adapter_compat('ITree') def different_type_children(self, entities=True):