28 self._tagdefs = {} |
28 self._tagdefs = {} |
29 if allowed_values is not None: |
29 if allowed_values is not None: |
30 self._allowed_values = allowed_values |
30 self._allowed_values = allowed_values |
31 self._initfunc = initfunc |
31 self._initfunc = initfunc |
32 register_rtag(self) |
32 register_rtag(self) |
33 |
33 |
34 def __repr__(self): |
34 def __repr__(self): |
35 return repr(self._tagdefs) |
35 return repr(self._tagdefs) |
36 |
36 |
37 # dict compat |
37 # dict compat |
38 def __getitem__(self, key): |
38 def __getitem__(self, key): |
50 keys.remove((rtype, tagged, '*', otype)) |
50 keys.remove((rtype, tagged, '*', otype)) |
51 if otype == '*': |
51 if otype == '*': |
52 keys.remove((rtype, tagged, stype, '*')) |
52 keys.remove((rtype, tagged, stype, '*')) |
53 return keys |
53 return keys |
54 |
54 |
55 def init(self, schema): |
55 def init(self, schema, check=True): |
56 # XXX check existing keys against schema |
56 # XXX check existing keys against schema |
57 for (rtype, tagged, stype, otype), value in self._tagdefs.items(): |
57 if check: |
58 for ertype in (stype, rtype, otype): |
58 for (rtype, tagged, stype, otype), value in self._tagdefs.items(): |
59 if ertype != '*' and not ertype in schema: |
59 for ertype in (stype, rtype, otype): |
60 self.warning('removing rtag %s: %s, %s undefined in schema', |
60 if ertype != '*' and not ertype in schema: |
61 (stype, rtype, otype, tagged), value, ertype) |
61 self.warning('removing rtag %s: %s, %s undefined in schema', |
62 self.del_rtag(stype, rtype, otype, tagged) |
62 (stype, rtype, otype, tagged), value, ertype) |
|
63 self.del_rtag(stype, rtype, otype, tagged) |
|
64 break |
63 if self._initfunc is not None: |
65 if self._initfunc is not None: |
64 for eschema in schema.entities(): |
66 for eschema in schema.entities(): |
65 for rschema, tschemas, role in eschema.relation_definitions(True): |
67 for rschema, tschemas, role in eschema.relation_definitions(True): |
66 for tschema in tschemas: |
68 for tschema in tschemas: |
67 if role == 'subject': |
69 if role == 'subject': |