22 allowing to set tags using wildcard (eg '*') as subject type / object type |
22 allowing to set tags using wildcard (eg '*') as subject type / object type |
23 |
23 |
24 This class associates a single tag to each key. |
24 This class associates a single tag to each key. |
25 """ |
25 """ |
26 _allowed_values = None |
26 _allowed_values = None |
27 def __init__(self, initfunc=None, allowed_values=None): |
27 def __init__(self, name=None, initfunc=None, allowed_values=None): |
|
28 self._name = name or '<unknown>' |
28 self._tagdefs = {} |
29 self._tagdefs = {} |
29 if allowed_values is not None: |
30 if allowed_values is not None: |
30 self._allowed_values = allowed_values |
31 self._allowed_values = allowed_values |
31 self._initfunc = initfunc |
32 self._initfunc = initfunc |
32 register_rtag(self) |
33 register_rtag(self) |
33 |
34 |
34 def __repr__(self): |
35 def __repr__(self): |
35 return repr(self._tagdefs) |
36 return '%s: %s' % (self._name, repr(self._tagdefs)) |
36 |
37 |
37 # dict compat |
38 # dict compat |
38 def __getitem__(self, key): |
39 def __getitem__(self, key): |
39 return self.get(*key) |
40 return self.get(*key) |
40 __contains__ = __getitem__ |
41 __contains__ = __getitem__ |
93 #if isinstance(key, basestring): |
94 #if isinstance(key, basestring): |
94 # stype, rtype, otype = key.split() |
95 # stype, rtype, otype = key.split() |
95 #else: |
96 #else: |
96 stype, rtype, otype, tagged = [str(k) for k in key] |
97 stype, rtype, otype, tagged = [str(k) for k in key] |
97 if self._allowed_values is not None: |
98 if self._allowed_values is not None: |
98 assert tag in self._allowed_values, '%r is not an allowed tag' % tag |
99 assert tag in self._allowed_values, \ |
|
100 '%r is not an allowed tag (should be in %s)' % ( |
|
101 tag, self._allowed_values) |
99 self._tagdefs[(rtype, tagged, stype, otype)] = tag |
102 self._tagdefs[(rtype, tagged, stype, otype)] = tag |
100 |
103 |
101 # rtag runtime api ######################################################## |
104 # rtag runtime api ######################################################## |
102 |
105 |
103 def del_rtag(self, stype, rtype, otype, tagged): |
106 def del_rtag(self, stype, rtype, otype, tagged): |