author | Rémi Cardona <remi.cardona@logilab.fr> |
Wed, 16 Sep 2015 17:07:26 +0200 | |
changeset 10695 | 321b99973b69 |
parent 10686 | a08d5a657836 |
permissions | -rw-r--r-- |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
1 |
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5314
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
4931
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
18 |
""" |
5314
86e5abbebfaf
[doc/book] refresh the autoform section with uicfg content (moved there)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
4931
diff
changeset
|
19 |
A RelationTag object is an object which allows to link a configuration |
86e5abbebfaf
[doc/book] refresh the autoform section with uicfg content (moved there)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
4931
diff
changeset
|
20 |
information to a relation definition. For instance, the standard |
86e5abbebfaf
[doc/book] refresh the autoform section with uicfg content (moved there)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
4931
diff
changeset
|
21 |
primary view uses a RelationTag object (uicfg.primaryview_section) to |
86e5abbebfaf
[doc/book] refresh the autoform section with uicfg content (moved there)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
4931
diff
changeset
|
22 |
get the section to display relations. |
4931
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
23 |
|
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
24 |
.. sourcecode:: python |
1152 | 25 |
|
4931
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
26 |
# display ``entry_of`` relations in the ``relations`` section in the ``BlogEntry`` primary view |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
27 |
uicfg.primaryview_section.tag_subject_of(('BlogEntry', 'entry_of', '*'), |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
28 |
'relations') |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
29 |
|
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
30 |
# hide every relation ``entry_of`` in the ``Blog`` primary view |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
31 |
uicfg.primaryview_section.tag_object_of(('*', 'entry_of', 'Blog'), 'hidden') |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
32 |
|
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
33 |
Three primitives are defined: |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
34 |
* ``tag_subject_of`` tag a relation in the subject's context |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
35 |
* ``tag_object_of`` tag a relation in the object's context |
92c9d0a5dc11
improve documentation for uicfg and rtags
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
4391
diff
changeset
|
36 |
* ``tag_attribute`` shortcut for tag_subject_of |
1152 | 37 |
""" |
38 |
__docformat__ = "restructuredtext en" |
|
1148
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
39 |
|
1740
2292ae32c98f
warn and drop rtags not in schema, this may be intentional; drop possibility to not specify value for bool rtags
sylvain.thenault@logilab.fr
parents:
1739
diff
changeset
|
40 |
import logging |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
41 |
from warnings import warn |
1740
2292ae32c98f
warn and drop rtags not in schema, this may be intentional; drop possibility to not specify value for bool rtags
sylvain.thenault@logilab.fr
parents:
1739
diff
changeset
|
42 |
|
10612
84468b90e9c1
[py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents:
8667
diff
changeset
|
43 |
from six import string_types |
84468b90e9c1
[py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents:
8667
diff
changeset
|
44 |
|
1740
2292ae32c98f
warn and drop rtags not in schema, this may be intentional; drop possibility to not specify value for bool rtags
sylvain.thenault@logilab.fr
parents:
1739
diff
changeset
|
45 |
from logilab.common.logging_ext import set_log_methods |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
46 |
from logilab.common.registry import RegistrableInstance, yes |
1533 | 47 |
|
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
48 |
def _ensure_str_key(key): |
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
49 |
return tuple(str(k) for k in key) |
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
50 |
|
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
51 |
class RegistrableRtags(RegistrableInstance): |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
52 |
__registry__ = 'uicfg' |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
53 |
__select__ = yes() |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
54 |
|
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
55 |
|
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
56 |
class RelationTags(RegistrableRtags): |
1533 | 57 |
"""a tag store for full relation definitions : |
1148
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
58 |
|
1533 | 59 |
(subject type, relation type, object type, tagged) |
1152 | 60 |
|
61 |
allowing to set tags using wildcard (eg '*') as subject type / object type |
|
62 |
||
1533 | 63 |
This class associates a single tag to each key. |
1152 | 64 |
""" |
1739 | 65 |
_allowed_values = None |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
66 |
# _init expected to be a method (introduced in 3.17), while _initfunc a |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
67 |
# function given as __init__ argument and kept for bw compat |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
68 |
_init = _initfunc = None |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
69 |
|
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
70 |
def __init__(self): |
1148
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
71 |
self._tagdefs = {} |
1769
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
72 |
|
1528
864ae7c15ef5
other fixlets
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1451
diff
changeset
|
73 |
def __repr__(self): |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
74 |
# find a way to have more infos but keep it readable |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
75 |
# (in error messages in case of an ambiguity for instance) |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
76 |
return '%s (%s): %s' % (id(self), self.__regid__, self.__class__) |
1528
864ae7c15ef5
other fixlets
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1451
diff
changeset
|
77 |
|
1533 | 78 |
# dict compat |
79 |
def __getitem__(self, key): |
|
80 |
return self.get(*key) |
|
81 |
__contains__ = __getitem__ |
|
1451 | 82 |
|
2689
44f041222d0f
[autoreload] handle uicfg reloading properly with the new event / callback mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2369
diff
changeset
|
83 |
def clear(self): |
44f041222d0f
[autoreload] handle uicfg reloading properly with the new event / callback mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2369
diff
changeset
|
84 |
self._tagdefs.clear() |
44f041222d0f
[autoreload] handle uicfg reloading properly with the new event / callback mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2369
diff
changeset
|
85 |
|
1739 | 86 |
def _get_keys(self, stype, rtype, otype, tagged): |
5843
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
87 |
keys = [] |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
88 |
if '*' not in (stype, otype): |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
89 |
keys.append(('*', rtype, '*', tagged)) |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
90 |
if '*' != stype: |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
91 |
keys.append(('*', rtype, otype, tagged)) |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
92 |
if '*' != otype: |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
93 |
keys.append((stype, rtype, '*', tagged)) |
85c4d5334f2c
[refactor] refactor rtag keys generations.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
5424
diff
changeset
|
94 |
keys.append((stype, rtype, otype, tagged)) |
1533 | 95 |
return keys |
1451 | 96 |
|
1769
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
97 |
def init(self, schema, check=True): |
1739 | 98 |
# XXX check existing keys against schema |
1769
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
99 |
if check: |
10686
a08d5a657836
[py3k] add list() around dict methods
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10612
diff
changeset
|
100 |
for (stype, rtype, otype, tagged), value in list(self._tagdefs.items()): |
1769
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
101 |
for ertype in (stype, rtype, otype): |
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
102 |
if ertype != '*' and not ertype in schema: |
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
103 |
self.warning('removing rtag %s: %s, %s undefined in schema', |
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
104 |
(stype, rtype, otype, tagged), value, ertype) |
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
105 |
self.del_rtag(stype, rtype, otype, tagged) |
fb91d2b8a441
fix some rtags pb on i18n catalog generation
sylvain.thenault@logilab.fr
parents:
1752
diff
changeset
|
106 |
break |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
107 |
if self._init is not None: |
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
108 |
self.apply(schema, self._init) |
4364
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
109 |
|
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
110 |
def apply(self, schema, func): |
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
111 |
for eschema in schema.entities(): |
6899
e592fb8ee27b
[rtags] speepup initialization by avoiding to get file entity types relations (useless)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6246
diff
changeset
|
112 |
if eschema.final: |
e592fb8ee27b
[rtags] speepup initialization by avoiding to get file entity types relations (useless)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6246
diff
changeset
|
113 |
continue |
4364
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
114 |
for rschema, tschemas, role in eschema.relation_definitions(True): |
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
115 |
for tschema in tschemas: |
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
116 |
if role == 'subject': |
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
117 |
sschema, oschema = eschema, tschema |
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
118 |
else: |
766359c69f2f
[uicfg] fix autoform_section rtags initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4339
diff
changeset
|
119 |
sschema, oschema = tschema, eschema |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
120 |
func(sschema, rschema, oschema, role) |
1739 | 121 |
|
122 |
# rtag declaration api #################################################### |
|
123 |
||
3473
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
124 |
def tag_attribute(self, key, *args, **kwargs): |
1739 | 125 |
key = list(key) |
126 |
key.append('*') |
|
4339
fe93b670343d
some fixes so that deprecation warning are properly localized
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
127 |
key.append('subject') |
fe93b670343d
some fixes so that deprecation warning are properly localized
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
128 |
self.tag_relation(key, *args, **kwargs) |
1548
bd225e776739
new tag_attribute convenience method
sylvain.thenault@logilab.fr
parents:
1533
diff
changeset
|
129 |
|
3473
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
130 |
def tag_subject_of(self, key, *args, **kwargs): |
1739 | 131 |
key = list(key) |
132 |
key.append('subject') |
|
3473
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
133 |
self.tag_relation(key, *args, **kwargs) |
1739 | 134 |
|
3473
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
135 |
def tag_object_of(self, key, *args, **kwargs): |
1739 | 136 |
key = list(key) |
137 |
key.append('object') |
|
3473
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
138 |
self.tag_relation(key, *args, **kwargs) |
1533 | 139 |
|
1739 | 140 |
def tag_relation(self, key, tag): |
4391
bd8480824e0b
ensure we get a correct key
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4364
diff
changeset
|
141 |
assert len(key) == 4, 'bad key: %s' % list(key) |
1739 | 142 |
if self._allowed_values is not None: |
1859
b068abd45a1c
nicer error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1849
diff
changeset
|
143 |
assert tag in self._allowed_values, \ |
b068abd45a1c
nicer error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1849
diff
changeset
|
144 |
'%r is not an allowed tag (should be in %s)' % ( |
b068abd45a1c
nicer error message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1849
diff
changeset
|
145 |
tag, self._allowed_values) |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
146 |
self._tagdefs[_ensure_str_key(key)] = tag |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
147 |
return tag |
1533 | 148 |
|
8667
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
149 |
def _tag_etype_attr(self, etype, attr, desttype='*', *args, **kwargs): |
10612
84468b90e9c1
[py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents:
8667
diff
changeset
|
150 |
if isinstance(attr, string_types): |
8667
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
151 |
attr, role = attr, 'subject' |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
152 |
else: |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
153 |
attr, role = attr |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
154 |
if role == 'subject': |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
155 |
self.tag_subject_of((etype, attr, desttype), *args, **kwargs) |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
156 |
else: |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
157 |
self.tag_object_of((desttype, attr, etype), *args, **kwargs) |
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
158 |
|
5a394fc419b4
[web/uihelper,uicfg] transform uihelper functions into uicfg objects methods (closes #2543949)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8666
diff
changeset
|
159 |
|
1739 | 160 |
# rtag runtime api ######################################################## |
161 |
||
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
162 |
def del_rtag(self, *key): |
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
163 |
del self._tagdefs[key] |
1739 | 164 |
|
3473
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
165 |
def get(self, *key): |
d8bc02158efc
[rtags] ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3472
diff
changeset
|
166 |
for key in reversed(self._get_keys(*key)): |
1148
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
167 |
try: |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
168 |
return self._tagdefs[key] |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
169 |
except KeyError: |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
170 |
continue |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
171 |
return None |
1451 | 172 |
|
1721
694f6a50e138
final rtags api (eventually :$)
sylvain.thenault@logilab.fr
parents:
1548
diff
changeset
|
173 |
def etype_get(self, etype, rtype, role, ttype='*'): |
694f6a50e138
final rtags api (eventually :$)
sylvain.thenault@logilab.fr
parents:
1548
diff
changeset
|
174 |
if role == 'subject': |
694f6a50e138
final rtags api (eventually :$)
sylvain.thenault@logilab.fr
parents:
1548
diff
changeset
|
175 |
return self.get(etype, rtype, ttype, role) |
694f6a50e138
final rtags api (eventually :$)
sylvain.thenault@logilab.fr
parents:
1548
diff
changeset
|
176 |
return self.get(ttype, rtype, etype, role) |
1533 | 177 |
|
7083
b8e35cde46e9
help pylint by explicitely defining some attributes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
6900
diff
changeset
|
178 |
# these are overridden by set_log_methods below |
b8e35cde46e9
help pylint by explicitely defining some attributes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
6900
diff
changeset
|
179 |
# only defining here to prevent pylint from complaining |
b8e35cde46e9
help pylint by explicitely defining some attributes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
6900
diff
changeset
|
180 |
info = warning = error = critical = exception = debug = lambda msg,*a,**kw: None |
1533 | 181 |
|
1451 | 182 |
|
1533 | 183 |
class RelationTagsSet(RelationTags): |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
184 |
"""This class associates a set of tags to each key. |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
185 |
""" |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
186 |
tag_container_cls = set |
1533 | 187 |
|
1739 | 188 |
def tag_relation(self, key, tag): |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
189 |
rtags = self._tagdefs.setdefault(_ensure_str_key(key), |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
190 |
self.tag_container_cls()) |
1148
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
191 |
rtags.add(tag) |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
192 |
return rtags |
1451 | 193 |
|
1739 | 194 |
def get(self, stype, rtype, otype, tagged): |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
195 |
rtags = self.tag_container_cls() |
1721
694f6a50e138
final rtags api (eventually :$)
sylvain.thenault@logilab.fr
parents:
1548
diff
changeset
|
196 |
for key in self._get_keys(stype, rtype, otype, tagged): |
1148
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
197 |
try: |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
198 |
rtags.update(self._tagdefs[key]) |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
199 |
except KeyError: |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
200 |
continue |
55a8238f8f7c
keep notion of relation tags, tough with simplier implementation and usage
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
201 |
return rtags |
1739 | 202 |
|
203 |
||
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
204 |
class RelationTagsDict(RelationTagsSet): |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
205 |
"""This class associates a set of tags to each key.""" |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
206 |
tag_container_cls = dict |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
207 |
|
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
208 |
def tag_relation(self, key, tag): |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
209 |
key = _ensure_str_key(key) |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
210 |
try: |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
211 |
rtags = self._tagdefs[key] |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
212 |
rtags.update(tag) |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
213 |
return rtags |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
214 |
except KeyError: |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
215 |
self._tagdefs[key] = tag |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
216 |
return tag |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
217 |
|
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
218 |
def setdefault(self, key, tagkey, tagvalue): |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
219 |
key = _ensure_str_key(key) |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
220 |
try: |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
221 |
rtags = self._tagdefs[key] |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
222 |
rtags.setdefault(tagkey, tagvalue) |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
223 |
return rtags |
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
224 |
except KeyError: |
3472
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
225 |
self._tagdefs[key] = {tagkey: tagvalue} |
5345570eefc6
[rtags] make internal key order consistent with api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2689
diff
changeset
|
226 |
return self._tagdefs[key] |
2369
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
227 |
|
5a2b8ed266ca
new RelationTagsDict class, use it in uicfg where necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
228 |
|
1739 | 229 |
class RelationTagsBool(RelationTags): |
230 |
_allowed_values = frozenset((True, False)) |
|
231 |
||
232 |
||
6246
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
233 |
class NoTargetRelationTagsDict(RelationTagsDict): |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
234 |
|
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
235 |
@property |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
236 |
def name(self): |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
237 |
return self.__class__.name |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
238 |
|
6900
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
239 |
# tag_subject_of / tag_object_of issue warning if '*' is not given as target |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
240 |
# type, while tag_relation handle it silently since it may be used during |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
241 |
# initialization |
6246
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
242 |
def tag_subject_of(self, key, tag): |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
243 |
subj, rtype, obj = key |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
244 |
if obj != '*': |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
245 |
self.warning('using explict target type in %s.tag_subject_of() ' |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
246 |
'has no effect, use (%s, %s, "*") instead of (%s, %s, %s)', |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
247 |
self.name, subj, rtype, subj, rtype, obj) |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
248 |
super(NoTargetRelationTagsDict, self).tag_subject_of((subj, rtype, '*'), tag) |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
249 |
|
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
250 |
def tag_object_of(self, key, tag): |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
251 |
subj, rtype, obj = key |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
252 |
if subj != '*': |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
253 |
self.warning('using explict subject type in %s.tag_object_of() ' |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
254 |
'has no effect, use ("*", %s, %s) instead of (%s, %s, %s)', |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
255 |
self.name, rtype, obj, subj, rtype, obj) |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
256 |
super(NoTargetRelationTagsDict, self).tag_object_of(('*', rtype, obj), tag) |
62e25fac41cd
[views/reledit] refactor composite handling
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
6240
diff
changeset
|
257 |
|
6900
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
258 |
def tag_relation(self, key, tag): |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
259 |
if key[-1] == 'subject' and key[-2] != '*': |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
260 |
if isinstance(key, tuple): |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
261 |
key = list(key) |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
262 |
key[-2] = '*' |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
263 |
elif key[-1] == 'object' and key[0] != '*': |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
264 |
if isinstance(key, tuple): |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
265 |
key = list(key) |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
266 |
key[0] = '*' |
fcd4e6beec09
[rtags] fix NoTargetRelationTagsDict to ensure relation are tagged using '*' during initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6899
diff
changeset
|
267 |
super(NoTargetRelationTagsDict, self).tag_relation(key, tag) |
8666
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
268 |
|
1dd655788ece
make ui configurations selectable (closes #2406609)
Florent Cayré <florent.cayre@logilab.fr>
parents:
7083
diff
changeset
|
269 |
|
1740
2292ae32c98f
warn and drop rtags not in schema, this may be intentional; drop possibility to not specify value for bool rtags
sylvain.thenault@logilab.fr
parents:
1739
diff
changeset
|
270 |
set_log_methods(RelationTags, logging.getLogger('cubicweb.rtags')) |