Commit 41ded6ea authored by Antoine Millet's avatar Antoine Millet
Browse files

Fixed bug with overridden tags

Also changed the structure used to store overridden tags, was a dict of
list, now a dict of tags directly.
parent b28b3ed7
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -20,18 +20,25 @@ class SObject(TqlObject):

    def __init__(self, *args, **kwargs):
        super(SObject, self).__init__(*args, **kwargs)
        self._overridden = defaultdict(lambda: [])
        self._overridden = defaultdict(lambda: None)

    def register(self, tag, override=False):
        """ Register a tag on this object (or override).
        """

        # If the tag must override another one, move the old one on the
        # overridden tags dict:
        if override:
            # The tag to register must override an eventual existing tag.
            # Overridden tag is moved in the overridden tags dict:
            if tag.name in self._tags:
                self._overridden[tag.name].append(self._tags[tag.name])
                self._overridden[tag.name] = self._tags[tag.name]
                del self._tags[tag.name]
        elif tag.name in self._tags:
            # The tag to register is already overridden, we place it directly
            # on the overridden tags dict:
            if tag.name in self._overridden:
                raise KeyError('A tag with this name is already registered on this object')
            self._overridden[tag.name] = tag
            return
        return super(SObject, self).register(tag)

    def unregister(self, name, override=False):
@@ -40,14 +47,15 @@ class SObject(TqlObject):
        super(SObject, self).unregister(name)
        # If a tag is overriden, replace it on the tag list:
        if override and name in self._overridden:
            self._tags[name] = self._overridden[name].pop()
            self._tags[name] = self._overridden[name]
            del self._overridden[name]

    def is_overriding(self, name):
        """ Return True if a tag is overriding another one for the name.

        If the tag is not found, False is returned.
        """
        return bool(self._overridden[name])
        return self._overridden[name] is not None


class CCSAsyncTagInterface(BaseTagInterface):