rtags.py
branchtls-sprint
changeset 1769 fb91d2b8a441
parent 1752 4b0b912ff5b7
child 1849 1901fa97f521
equal deleted inserted replaced
1768:b59b7c422a8a 1769:fb91d2b8a441
    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':