98 def init(self, schema, check=True): |
98 def init(self, schema, check=True): |
99 # XXX check existing keys against schema |
99 # XXX check existing keys against schema |
100 if check: |
100 if check: |
101 for (stype, rtype, otype, tagged), value in list(self._tagdefs.items()): |
101 for (stype, rtype, otype, tagged), value in list(self._tagdefs.items()): |
102 for ertype in (stype, rtype, otype): |
102 for ertype in (stype, rtype, otype): |
103 if ertype != '*' and not ertype in schema: |
103 if ertype != '*' and ertype not in schema: |
104 self.warning('removing rtag %s: %s, %s undefined in schema', |
104 self.warning('removing rtag %s: %s, %s undefined in schema', |
105 (stype, rtype, otype, tagged), value, ertype) |
105 (stype, rtype, otype, tagged), value, ertype) |
106 self.del_rtag(stype, rtype, otype, tagged) |
106 self.del_rtag(stype, rtype, otype, tagged) |
107 break |
107 break |
108 if self._init is not None: |
108 if self._init is not None: |
140 |
140 |
141 def tag_relation(self, key, tag): |
141 def tag_relation(self, key, tag): |
142 assert len(key) == 4, 'bad key: %s' % list(key) |
142 assert len(key) == 4, 'bad key: %s' % list(key) |
143 if self._allowed_values is not None: |
143 if self._allowed_values is not None: |
144 assert tag in self._allowed_values, \ |
144 assert tag in self._allowed_values, \ |
145 '%r is not an allowed tag (should be in %s)' % ( |
145 '%r is not an allowed tag (should be in %s)' % ( |
146 tag, self._allowed_values) |
146 tag, self._allowed_values) |
147 self._tagdefs[_ensure_str_key(key)] = tag |
147 self._tagdefs[_ensure_str_key(key)] = tag |
148 return tag |
148 return tag |
149 |
149 |
150 def _tag_etype_attr(self, etype, attr, desttype='*', *args, **kwargs): |
150 def _tag_etype_attr(self, etype, attr, desttype='*', *args, **kwargs): |
151 if isinstance(attr, string_types): |
151 if isinstance(attr, string_types): |
155 if role == 'subject': |
155 if role == 'subject': |
156 self.tag_subject_of((etype, attr, desttype), *args, **kwargs) |
156 self.tag_subject_of((etype, attr, desttype), *args, **kwargs) |
157 else: |
157 else: |
158 self.tag_object_of((desttype, attr, etype), *args, **kwargs) |
158 self.tag_object_of((desttype, attr, etype), *args, **kwargs) |
159 |
159 |
160 |
|
161 # rtag runtime api ######################################################## |
160 # rtag runtime api ######################################################## |
162 |
161 |
163 def del_rtag(self, *key): |
162 def del_rtag(self, *key): |
164 del self._tagdefs[key] |
163 del self._tagdefs[key] |
165 |
164 |
176 return self.get(etype, rtype, ttype, role) |
175 return self.get(etype, rtype, ttype, role) |
177 return self.get(ttype, rtype, etype, role) |
176 return self.get(ttype, rtype, etype, role) |
178 |
177 |
179 # these are overridden by set_log_methods below |
178 # these are overridden by set_log_methods below |
180 # only defining here to prevent pylint from complaining |
179 # only defining here to prevent pylint from complaining |
181 info = warning = error = critical = exception = debug = lambda msg,*a,**kw: None |
180 info = warning = error = critical = exception = debug = lambda msg, *a, **kw: None |
182 |
181 |
183 |
182 |
184 class RelationTagsSet(RelationTags): |
183 class RelationTagsSet(RelationTags): |
185 """This class associates a set of tags to each key. |
184 """This class associates a set of tags to each key. |
186 """ |
185 """ |