diff -r b41aef0e63a7 -r 5a2b8ed266ca rtags.py --- a/rtags.py Fri Jul 10 09:44:36 2009 +0200 +++ b/rtags.py Fri Jul 10 12:15:09 2009 +0200 @@ -101,6 +101,7 @@ '%r is not an allowed tag (should be in %s)' % ( tag, self._allowed_values) self._tagdefs[(rtype, tagged, stype, otype)] = tag + return tag # rtag runtime api ######################################################## @@ -123,15 +124,19 @@ class RelationTagsSet(RelationTags): - """This class associates a set of tags to each key.""" + """This class associates a set of tags to each key. + """ + tag_container_cls = set def tag_relation(self, key, tag): stype, rtype, otype, tagged = [str(k) for k in key] - rtags = self._tagdefs.setdefault((rtype, tagged, stype, otype), set()) + rtags = self._tagdefs.setdefault((rtype, tagged, stype, otype), + self.tag_container_cls()) rtags.add(tag) + return rtags def get(self, stype, rtype, otype, tagged): - rtags = set() + rtags = self.tag_container_cls() for key in self._get_keys(stype, rtype, otype, tagged): try: rtags.update(self._tagdefs[key]) @@ -140,6 +145,31 @@ return rtags +class RelationTagsDict(RelationTagsSet): + """This class associates a set of tags to each key.""" + tag_container_cls = dict + + def tag_relation(self, key, tag): + stype, rtype, otype, tagged = [str(k) for k in key] + try: + rtags = self._tagdefs[(rtype, tagged, stype, otype)] + rtags.update(tag) + return rtags + except KeyError: + self._tagdefs[(rtype, tagged, stype, otype)] = tag + return tag + + def setdefault(self, key, tagkey, tagvalue): + stype, rtype, otype, tagged = [str(k) for k in key] + try: + rtags = self._tagdefs[(rtype, tagged, stype, otype)] + rtags.setdefault(tagkey, tagvalue) + return rtags + except KeyError: + self._tagdefs[(rtype, tagged, stype, otype)] = {tagkey: tagvalue} + return self._tagdefs[(rtype, tagged, stype, otype)] + + class RelationTagsBool(RelationTags): _allowed_values = frozenset((True, False))