# HG changeset patch # User sylvain.thenault@logilab.fr # Date 1240993743 -7200 # Node ID bcd4bfff658bec0ad0a22fe7214bc02d444806f0 # Parent 111c52e0022f528425a4a14809557c90872152ca update rtags api diff -r 111c52e0022f -r bcd4bfff658b entity.py --- a/entity.py Wed Apr 29 09:27:03 2009 +0200 +++ b/entity.py Wed Apr 29 10:29:03 2009 +0200 @@ -51,11 +51,11 @@ def _dispatch_rtags(tags, rtype, role, stype, otype): for tag in tags: if tag in _MODE_TAGS: - uicfg.rmode.set_rtag(tag, rtype, role, stype, otype) + uicfg.rmode.tag_relation(tag, (stype, rtype, otype), role) elif tag in _CATEGORY_TAGS: - uicfg.rcategories.set_rtag(tag, rtype, role, stype, otype) + uicfg.rcategories.tag_relation(tag, (stype, rtype, otype), role) elif tag == 'inlineview': - uicfg.rinlined.set_rtag(True, rtype, role, stype, otype) + uicfg.rinlined.tag_relation(True, (stype, rtype, otype), role) else: raise ValueError(tag) @@ -127,7 +127,8 @@ if wdgname == 'StringWidget': wdgname = 'TextInput' widget = getattr(formwidgets, wdgname) - AutomaticEntityForm.rwidgets.set_rtag(wdgname, rtype, 'subject', etype) + AutomaticEntityForm.rwidgets.tag_relation( + wdgname, (etype, rtype, '*'), 'subject') return super(_metaentity, mcs).__new__(mcs, name, bases, classdict) diff -r 111c52e0022f -r bcd4bfff658b rtags.py --- a/rtags.py Wed Apr 29 09:27:03 2009 +0200 +++ b/rtags.py Wed Apr 29 10:29:03 2009 +0200 @@ -6,88 +6,81 @@ """ __docformat__ = "restructuredtext en" + class RelationTags(object): - """RelationTags instances are a tag store for full relation definitions : + """a tag store for full relation definitions : - (subject type, relation type, object type, role) + (subject type, relation type, object type, tagged) allowing to set tags using wildcard (eg '*') as subject type / object type - if `use_set` is True, a set of tags is associated to each key, and you - should use rtags / etype_rtags / add_rtag api. Otherwise, a single tag is - associated to each key, and you should use rtag / etype_rtag / set_rtag api. + This class associates a single tag to each key. """ - def __init__(self, use_set=False): - self.use_set = use_set + def __init__(self): self._tagdefs = {} def __repr__(self): return repr(self._tagdefs) - def set_rtag(self, tag, rtype, role, stype='*', otype='*'): - assert not self.use_set - assert role in ('subject', 'object'), role - self._tagdefs[(str(rtype), role, str(stype), str(otype))] = tag + # dict compat + def __getitem__(self, key): + return self.get(*key) + __contains__ = __getitem__ - def del_rtag(self, rtype, role, stype='*', otype='*'): - assert not self.use_set - assert role in ('subject', 'object'), role - del self._tagdefs[(str(rtype), role, str(stype), str(otype))] + def _get_keys(self, rtype, tagged, stype, otype): + assert tagged in ('subject', 'object'), tagged + keys = [(rtype, tagged, '*', '*'), + (rtype, tagged, '*', otype), + (rtype, tagged, stype, '*'), + (rtype, tagged, stype, otype)] + if stype == '*' or otype == '*': + keys.remove((rtype, tagged, '*', '*')) + if stype == '*': + keys.remove((rtype, tagged, '*', otype)) + if otype == '*': + keys.remove((rtype, tagged, stype, '*')) + return keys - def rtag(self, rtype, role, stype='*', otype='*'): - assert not self.use_set - for key in reversed(self._get_keys(rtype, role, stype, otype)): + def tag_relation(self, tag, relation, tagged): + assert tagged in ('subject', 'object'), tagged + stype, rtype, otype = relation + self._tagdefs[(str(rtype), tagged, str(stype), str(otype))] = tag + + def del_rtag(self, relation, tagged): + assert tagged in ('subject', 'object'), tagged + stype, rtype, otype = relation + del self._tagdefs[(str(rtype), tagged, str(stype), str(otype))] + + def get(self, rtype, tagged, stype='*', otype='*'): + for key in reversed(self._get_keys(rtype, tagged, stype, otype)): try: return self._tagdefs[key] except KeyError: continue return None - def etype_rtag(self, etype, rtype, role, ttype='*'): - if role == 'subject': - return self.rtag(rtype, role, etype, ttype) - return self.rtag(rtype, role, ttype, etype) + def etype_get(self, etype, rtype, tagged, ttype='*'): + if tagged == 'subject': + return self.get(rtype, tagged, etype, ttype) + return self.get(rtype, tagged, ttype, etype) + + - def add_rtag(self, tag, rtype, role, stype='*', otype='*'): - assert self.use_set - assert role in ('subject', 'object'), role - rtags = self._tagdefs.setdefault((rtype, role, stype, otype), set()) +class RelationTagsSet(RelationTags): + """This class associates a set of tags to each key.""" + + def tag_relation(self, tag, relation, tagged): + assert tagged in ('subject', 'object'), tagged + stype, rtype, otype = relation + rtags = self._tagdefs.setdefault((rtype, tagged, stype, otype), set()) rtags.add(tag) - def rtags(self, rtype, role, stype='*', otype='*'): - assert self.use_set + def get(self, rtype, tagged, stype='*', otype='*'): rtags = set() - for key in self._get_keys(rtype, role, stype, otype): + for key in self._get_keys(rtype, tagged, stype, otype): try: rtags.update(self._tagdefs[key]) except KeyError: continue return rtags - - def etype_rtags(self, etype, rtype, role, ttype='*'): - if role == 'subject': - return self.rtags(rtype, role, etype, ttype) - return self.rtags(rtype, role, ttype, etype) - - def _get_keys(self, rtype, role, stype, otype): - assert role in ('subject', 'object'), role - keys = [(rtype, role, '*', '*'), - (rtype, role, '*', otype), - (rtype, role, stype, '*'), - (rtype, role, stype, otype)] - if stype == '*' or otype == '*': - keys.remove((rtype, role, '*', '*')) - if stype == '*': - keys.remove((rtype, role, '*', otype)) - if otype == '*': - keys.remove((rtype, role, stype, '*')) - return keys - - # dict compat - def __getitem__(self, key): - if isinstance(key, basestring): - key = (key,) - return self.rtags(*key) - - __contains__ = __getitem__ diff -r 111c52e0022f -r bcd4bfff658b test/unittest_rtags.py --- a/test/unittest_rtags.py Wed Apr 29 09:27:03 2009 +0200 +++ b/test/unittest_rtags.py Wed Apr 29 10:29:03 2009 +0200 @@ -1,19 +1,19 @@ from logilab.common.testlib import TestCase, unittest_main -from cubicweb.rtags import RelationTags +from cubicweb.rtags import RelationTags, RelationTagsSet class RelationTagsTC(TestCase): - + def test_rtags_expansion(self): rtags = RelationTags() - rtags.set_rtag('primary', 'travaille', 'subject', 'Societe') - rtags.set_rtag('secondary', 'evaluee', 'subject') - rtags.set_rtag('generated', 'tags', 'object') - self.assertEquals(rtags.rtag('evaluee', 'subject', 'Note'), 'secondary') - self.assertEquals(rtags.rtag('travaille', 'subject', 'Societe'), 'primary') - self.assertEquals(rtags.rtag('travaille', 'subject', 'Note'), None) - self.assertEquals(rtags.rtag('tags', 'subject', 'Note'), None) - self.assertEquals(rtags.rtag('tags', 'object', 'Note'), 'generated') - + rtags.tag_relation('primary', ('Societe', 'travaille', '*'), 'subject', ) + rtags.tag_relation('secondary', ('*', 'evaluee', '*'), 'subject') + rtags.tag_relation('generated', ('*', 'tags', '*'), 'object') + self.assertEquals(rtags.get('evaluee', 'subject', 'Note'), 'secondary') + self.assertEquals(rtags.get('travaille', 'subject', 'Societe'), 'primary') + self.assertEquals(rtags.get('travaille', 'subject', 'Note'), None) + self.assertEquals(rtags.get('tags', 'subject', 'Note'), None) + self.assertEquals(rtags.get('tags', 'object', 'Note'), 'generated') + # self.assertEquals(rtags.rtag('evaluee', 'Note', 'subject'), set(('secondary', 'link'))) # self.assertEquals(rtags.is_inlined('evaluee', 'Note', 'subject'), False) # self.assertEquals(rtags.rtag('evaluee', 'Personne', 'subject'), set(('secondary', 'link'))) @@ -30,7 +30,16 @@ # self.assertEquals(rtags.rtag('evaluee', 'Note', 'subject'), set(('inlineview', 'link'))) # self.assertEquals(rtags.is_inlined('evaluee', 'Note', 'subject'), True) # self.assertEquals(rtags.rtag('evaluee', 'Personne', 'subject'), set(('secondary', 'link'))) -# self.assertEquals(rtags.is_inlined('evaluee', 'Personne', 'subject'), False) +# self.assertEquals(rtags.is_inlined('evaluee', 'Personne', 'subject'), False) + + + def test_rtagset_expansion(self): + rtags = RelationTagsSet() + rtags.tag_relation('primary', ('Societe', 'travaille', '*'), 'subject', ) + rtags.tag_relation('secondary', ('*', 'travaille', '*'), 'subject') + self.assertEquals(rtags.get('travaille', 'subject', 'Societe'), set(('primary', 'secondary'))) + self.assertEquals(rtags.get('travaille', 'subject', 'Note'), set(('secondary',))) + self.assertEquals(rtags.get('tags', 'subject', 'Note'), set()) if __name__ == '__main__': unittest_main() diff -r 111c52e0022f -r bcd4bfff658b web/test/unittest_views_editforms.py --- a/web/test/unittest_views_editforms.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/test/unittest_views_editforms.py Wed Apr 29 10:29:03 2009 +0200 @@ -9,13 +9,14 @@ class AutomaticEntityFormTC(EnvBasedTC): def test_custom_widget(self): - AEF.rwidgets.set_rtag(AutoCompletionWidget, 'login', 'subject', 'CWUser') + AEF.rwidgets.tag_relation(AutoCompletionWidget, + ('CWUser', 'login', '*'), 'subject') form = self.vreg.select_object('forms', 'edition', self.request(), None, entity=self.user()) field = form.field_by_name('login') self.assertIsInstance(field.widget, AutoCompletionWidget) AEF.rwidgets.del_rtag('login', 'subject', 'CWUser') - + def test_euser_relations_by_category(self): #for (rtype, role, stype, otype), tag in AEF.rcategories._tagdefs.items(): @@ -41,7 +42,7 @@ ('modification_date', 'subject'), ('owned_by', 'subject'), ('bookmarked_by', 'object'), - ]) + ]) self.assertListEquals(rbc(e, 'generic'), [('primary_email', 'subject'), ('use_email', 'subject'), @@ -65,7 +66,7 @@ def test_inlined_view(self): self.failUnless(AEF.rinlined.etype_rtag('CWUser', 'use_email', 'subject')) self.failIf(AEF.rinlined.etype_rtag('CWUser', 'primary_email', 'subject')) - + def test_personne_relations_by_category(self): e = self.etype_instance('Personne') self.assertListEquals(rbc(e, 'primary'), @@ -91,7 +92,7 @@ ('creation_date', 'subject'), ('modification_date', 'subject'), ('owned_by', 'subject'), - ]) + ]) self.assertListEquals(rbc(e, 'generic'), [('travaille', 'subject'), ('connait', 'object') @@ -103,7 +104,7 @@ ('is_instance_of', 'subject'), ('identity', 'object'), ]) - + def test_edition_form(self): rset = self.execute('CWUser X LIMIT 1') form = self.vreg.select_object('forms', 'edition', rset.req, rset, @@ -112,41 +113,41 @@ self.vreg.select_object('forms', 'edition', self.request(), None, entity=rset.get_entity(0, 0)) self.failIf(any(f for f in form.fields if f is None)) - - + + class FormViewsTC(WebTest): def test_delete_conf_formview(self): rset = self.execute('CWGroup X') self.view('deleteconf', rset, template=None).source - + def test_automatic_edition_formview(self): rset = self.execute('CWUser X') self.view('edition', rset, row=0, template=None).source - + def test_automatic_edition_formview(self): rset = self.execute('CWUser X') self.view('copy', rset, row=0, template=None).source - + def test_automatic_creation_formview(self): self.view('creation', None, etype='CWUser', template=None).source - + def test_automatic_muledit_formview(self): rset = self.execute('CWUser X') self.view('muledit', rset, template=None).source - + def test_automatic_reledit_formview(self): rset = self.execute('CWUser X') self.view('reledit', rset, row=0, rtype='login', template=None).source - + def test_automatic_inline_edit_formview(self): geid = self.execute('CWGroup X LIMIT 1')[0][0] rset = self.execute('CWUser X LIMIT 1') self.view('inline-edition', rset, row=0, rtype='in_group', peid=geid, template=None).source - + def test_automatic_inline_creation_formview(self): geid = self.execute('CWGroup X LIMIT 1')[0][0] self.view('inline-creation', None, etype='CWUser', rtype='in_group', peid=geid, template=None).source - + if __name__ == '__main__': unittest_main() diff -r 111c52e0022f -r bcd4bfff658b web/uicfg.py --- a/web/uicfg.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/uicfg.py Wed Apr 29 10:29:03 2009 +0200 @@ -9,32 +9,33 @@ :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr """ __docformat__ = "restructuredtext en" -from cubicweb.rtags import RelationTags + +from cubicweb.rtags import RelationTags, RelationTagsSet # autoform.AutomaticEntityForm configuration ################################## # relations'category (eg primary/secondary/generic/metadata/generated) rcategories = RelationTags() # use primary and not generated for eid since it has to be an hidden -rcategories.set_rtag('primary', 'eid', 'subject') -rcategories.set_rtag('primary', 'in_state', 'subject') -rcategories.set_rtag('secondary', 'description', 'subject') -rcategories.set_rtag('metadata', 'creation_date', 'subject') -rcategories.set_rtag('metadata', 'modification_date', 'subject') -rcategories.set_rtag('metadata', 'owned_by', 'subject') -rcategories.set_rtag('metadata', 'created_by', 'subject') -rcategories.set_rtag('generated', 'has_text', 'subject') -rcategories.set_rtag('generated', 'is', 'subject') -rcategories.set_rtag('generated', 'is', 'object') -rcategories.set_rtag('generated', 'is_instance_of', 'subject') -rcategories.set_rtag('generated', 'is_instance_of', 'object') -rcategories.set_rtag('generated', 'identity', 'subject') -rcategories.set_rtag('generated', 'identity', 'object') -rcategories.set_rtag('generated', 'require_permission', 'subject') -rcategories.set_rtag('generated', 'wf_info_for', 'subject') -rcategories.set_rtag('generated', 'wf_info_for', 'object') -rcategories.set_rtag('generated', 'for_user', 'subject') -rcategories.set_rtag('generated', 'for_user', 'object') +rcategories.tag_relation('primary', ('*', 'eid', '*'), 'subject') +rcategories.tag_relation('primary', ('*', 'in_state', '*'), 'subject') +rcategories.tag_relation('secondary', ('*', 'description', '*'), 'subject') +rcategories.tag_relation('metadata', ('*', 'creation_date', '*'), 'subject') +rcategories.tag_relation('metadata', ('*', 'modification_date', '*'), 'subject') +rcategories.tag_relation('metadata', ('*', 'owned_by', '*'), 'subject') +rcategories.tag_relation('metadata', ('*', 'created_by', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'has_text', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'is', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'is', '*'), 'object') +rcategories.tag_relation('generated', ('*', 'is_instance_of', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'is_instance_of', '*'), 'object') +rcategories.tag_relation('generated', ('*', 'identity', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'identity', '*'), 'object') +rcategories.tag_relation('generated', ('*', 'require_permission', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'wf_info_for', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'wf_info_for', '*'), 'object') +rcategories.tag_relation('generated', ('*', 'for_user', '*'), 'subject') +rcategories.tag_relation('generated', ('*', 'for_user', '*'), 'object') # relations'field class rfields = RelationTags() @@ -50,21 +51,21 @@ # set of tags of the form _on_new on relations. is a # schema action (add/update/delete/read), and when such a tag is found # permissions checking is by-passed and supposed to be ok -rpermissions_overrides = RelationTags(use_set=True) +rpermissions_overrides = RelationTagsSet() # boxes.EditBox configuration ################################################# # 'link' / 'create' relation tags, used to control the "add entity" submenu rmode = RelationTags() -rmode.set_rtag('link', 'is', 'subject') -rmode.set_rtag('link', 'is', 'object') -rmode.set_rtag('link', 'is_instance_of', 'subject') -rmode.set_rtag('link', 'is_instance_of', 'object') -rmode.set_rtag('link', 'identity', 'subject') -rmode.set_rtag('link', 'identity', 'object') -rmode.set_rtag('link', 'owned_by', 'subject') -rmode.set_rtag('link', 'created_by', 'subject') -rmode.set_rtag('link', 'require_permission', 'subject') -rmode.set_rtag('link', 'wf_info_for', 'subject') -rmode.set_rtag('link', 'wf_info_for', 'object') +rmode.tag_relation('link', ('*', 'is', '*'), 'subject') +rmode.tag_relation('link', ('*', 'is', '*'), 'object') +rmode.tag_relation('link', ('*', 'is_instance_of', '*'), 'subject') +rmode.tag_relation('link', ('*', 'is_instance_of', '*'), 'object') +rmode.tag_relation('link', ('*', 'identity', '*'), 'subject') +rmode.tag_relation('link', ('*', 'identity', '*'), 'object') +rmode.tag_relation('link', ('*', 'owned_by', '*'), 'subject') +rmode.tag_relation('link', ('*', 'created_by', '*'), 'subject') +rmode.tag_relation('link', ('*', 'require_permission', '*'), 'subject') +rmode.tag_relation('link', ('*', 'wf_info_for', '*'), 'subject') +rmode.tag_relation('link', ('*', 'wf_info_for', '*'), 'object') diff -r 111c52e0022f -r bcd4bfff658b web/views/autoform.py --- a/web/views/autoform.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/autoform.py Wed Apr 29 10:29:03 2009 +0200 @@ -70,7 +70,7 @@ category = 'secondary' else: category = 'generic' - cls.rcategories.set_rtag(category, rschema, role, X, Y) + cls.rcategories.add_relation(category, (X, rschema, Y), role) @classmethod def erelations_by_category(cls, entity, categories=None, permission=None, rtags=None): diff -r 111c52e0022f -r bcd4bfff658b web/views/bookmark.py --- a/web/views/bookmark.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/bookmark.py Wed Apr 29 10:29:03 2009 +0200 @@ -14,8 +14,8 @@ from cubicweb.web import uicfg, action, box, formwidgets from cubicweb.web.views.baseviews import PrimaryView -uicfg.rcategories.set_rtag('primary', 'path', 'subject', 'Bookmark') -uicfg.rwidgets.set_rtag(formwidgets.TextInput, 'path', 'subject', 'Bookmark') +uicfg.rcategories.tag_relation('primary', ('Bookmark', 'path', '*'), 'subject') +uicfg.rwidgets.tag_relation(formwidgets.TextInput, ('Bookmark', 'path', '*'), 'subject') class FollowAction(action.Action): diff -r 111c52e0022f -r bcd4bfff658b web/views/boxes.py --- a/web/views/boxes.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/boxes.py Wed Apr 29 10:29:03 2009 +0200 @@ -64,7 +64,7 @@ else: # link mode by default mode = 'link' - cls.rmode.set_rtag(mode, rschema, role, X, Y) + cls.rmode.tag_relation(mode, (X, rschema, Y), role) @classmethod def relation_mode(cls, rtype, etype, targettype, role='subject'): diff -r 111c52e0022f -r bcd4bfff658b web/views/cwproperties.py --- a/web/views/cwproperties.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/cwproperties.py Wed Apr 29 10:29:03 2009 +0200 @@ -24,6 +24,9 @@ _ = unicode +uicfg.rfields.tag_relation(PropertyKeyField, ('CWProperty', 'pkey', '*'), 'subject') +uicfg.rfields.tag_relation(PropertyValueField, ('CWProperty', 'value', '*'), 'subject') + # some string we want to be internationalizable for nicer display of eproperty # groups _('navigation') @@ -324,6 +327,3 @@ wdg.attrs.setdefault('size', 3) self.widget = wdg -uicfg.rfields.set_rtag(PropertyKeyField, 'pkey', 'subject', 'CWProperty') -uicfg.rfields.set_rtag(PropertyValueField, 'value', 'subject', 'CWProperty') - diff -r 111c52e0022f -r bcd4bfff658b web/views/cwuser.py --- a/web/views/cwuser.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/cwuser.py Wed Apr 29 10:29:03 2009 +0200 @@ -14,18 +14,18 @@ from cubicweb.web.views.baseviews import PrimaryView -uicfg.rcategories.set_rtag('secondary', 'firstname', 'subject', 'CWUser') -uicfg.rcategories.set_rtag('secondary', 'surname', 'subject', 'CWUser') -uicfg.rcategories.set_rtag('metadata', 'last_login_time', 'subject', 'CWUser') -uicfg.rcategories.set_rtag('primary', 'in_group', 'subject', 'CWUser') -uicfg.rcategories.set_rtag('generated', 'owned_by', 'object', otype='CWUser') -uicfg.rcategories.set_rtag('generated', 'created_by', 'object', otype='CWUser') -uicfg.rcategories.set_rtag('metadata', 'bookmarked_by', 'object', otype='CWUser') -uicfg.rinlined.set_rtag(True, 'use_email', 'subject', 'CWUser') -uicfg.rmode.set_rtag('create', 'in_group', 'object', otype='CWGroup') -uicfg.rmode.set_rtag('link', 'owned_by', 'object', otype='CWUser') -uicfg.rmode.set_rtag('link', 'created_by', 'object', otype='CWUser') -uicfg.rmode.set_rtag('create', 'bookmarked_by', 'object', otype='CWUser') +uicfg.rcategories.tag_relation('secondary', ('CWUser', 'firstname', '*'), 'subject') +uicfg.rcategories.tag_relation('secondary', ('CWUser', 'surname', '*'), 'subject') +uicfg.rcategories.tag_relation('metadata', ('CWUser', 'last_login_time', '*'), 'subject') +uicfg.rcategories.tag_relation('primary', ('CWUser', 'in_group', '*'), 'subject') +uicfg.rcategories.tag_relation('generated', ('*', 'owned_by', 'CWUser'), 'object') +uicfg.rcategories.tag_relation('generated', ('*', 'created_by', 'CWUser'), 'object') +uicfg.rcategories.tag_relation('metadata', ('*', 'bookmarked_by', 'CWUser'), 'object') +uicfg.rinlined.tag_relation(True, ('CWUser', 'use_email', '*'), 'subject') +uicfg.rmode.tag_relation('create', ('*', 'in_group', 'CWGroup'), 'object') +uicfg.rmode.tag_relation('link', ('*', 'owned_by', 'CWUser'), 'object') +uicfg.rmode.tag_relation('link', ('*', 'created_by', 'CWUser'), 'object') +uicfg.rmode.tag_relation('create', ('*', 'bookmarked_by', 'CWUser'), 'object') class UserPreferencesEntityAction(action.Action): diff -r 111c52e0022f -r bcd4bfff658b web/views/schema.py --- a/web/views/schema.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/schema.py Wed Apr 29 10:29:03 2009 +0200 @@ -19,19 +19,19 @@ from cubicweb.web.views import TmpFileViewMixin, baseviews -uicfg.rcategories.set_rtag('primary', 'require_group', 'subject', 'CWPermission') -uicfg.rcategories.set_rtag('generated', 'final', 'subject', 'EEtype') -uicfg.rcategories.set_rtag('generated', 'final', 'subject', 'ERtype') -uicfg.rinlined.set_rtag(True, 'relation_type', 'subject', 'CWRelation') -uicfg.rinlined.set_rtag(True, 'from_entity', 'subject', 'CWRelation') -uicfg.rinlined.set_rtag(True, 'to_entity', 'subject', 'CWRelation') -uicfg.rwidgets.set_rtag('StringWidget', 'expression', 'subject', 'RQLExpression') +uicfg.rcategories.tag_relation('primary', ('CWPermission', 'require_group', '*'), 'subject') +uicfg.rcategories.tag_relation('generated', ('EEtype', 'final', '*'), 'subject') +uicfg.rcategories.tag_relation('generated', ('ERtype', 'final', '*'), 'subject') +uicfg.rinlined.tag_relation(True, ('CWRelation', 'relation_type', '*'), 'subject') +uicfg.rinlined.tag_relation(True, ('CWRelation', 'from_entity', '*'), 'subject') +uicfg.rinlined.tag_relation(True, ('CWRelation', 'to_entity', '*'), 'subject') +uicfg.rwidgets.tag_relation('StringWidget', ('RQLExpression', 'expression', '*'), 'subject') -uicfg.rmode.set_rtag('create', 'state_of', 'object', otype='CWEType') -uicfg.rmode.set_rtag('create', 'transition_of', 'object', otype='CWEType') -uicfg.rmode.set_rtag('create', 'relation_type', 'object', otype='CWRType') -uicfg.rmode.set_rtag('link', 'from_entity', 'object', otype='CWEType') -uicfg.rmode.set_rtag('link', 'to_entity', 'object', otype='CWEType') +uicfg.rmode.tag_relation('create', ('*', 'state_of', 'CWEType'), 'object') +uicfg.rmode.tag_relation('create', ('*', 'transition_of', 'CWEType'), 'object') +uicfg.rmode.tag_relation('create', ('*', 'relation_type', 'CWRType'), 'object') +uicfg.rmode.tag_relation('link', ('*', 'from_entity', 'CWEType'), 'object') +uicfg.rmode.tag_relation('link', ('*', 'to_entity', 'CWEType'), 'object') class ViewSchemaAction(action.Action): diff -r 111c52e0022f -r bcd4bfff658b web/views/workflow.py --- a/web/views/workflow.py Wed Apr 29 09:27:03 2009 +0200 +++ b/web/views/workflow.py Wed Apr 29 10:29:03 2009 +0200 @@ -25,10 +25,10 @@ _ = unicode -EditBox.rmode.set_rtag('create', 'destination_state', 'subject', 'Transition') -EditBox.rmode.set_rtag('create', 'allowed_transition', 'object', otype='Transition') -EditBox.rmode.set_rtag('create', 'destination_state', 'object', otype='State') -EditBox.rmode.set_rtag('create', 'allowed_transition', 'subject', 'State') +EditBox.rmode.tag_relation('create', ('Transition', 'destination_state', '*'), 'subject') +EditBox.rmode.tag_relation('create', ('*', 'allowed_transition', 'Transition'), 'object') +EditBox.rmode.tag_relation('create', ('*', 'destination_state', 'State'), 'object') +EditBox.rmode.tag_relation('create', ('State', 'allowed_transition', '*'), 'subject') # IWorkflowable views #########################################################