def add(self, tag=None, category=None, data=None):
        if not tag:
            return
        for tagstr in make_iter(tag):
            if not tagstr:
                continue
            tagstr = tagstr.strip().lower()
            category = category.strip().lower() if category is not None else None
            data = str(data) if data is not None else None
            # this will only create tag if no matches existed beforehand (it
            # will overload data on an existing tag since that is not
            # considered part of making the tag unique)
            tagobj = self.obj.__class__.objects.create_tag(key=tagstr, category=category, data=data,
                                            tagtype=self._tagtype)
            getattr(self.obj, self._m2m_fieldname).add(tagobj)
            if self._cache is None:
                self._recache()
            cachestring = "%s-%s" % (tagstr, category)
            self._cache[cachestring] = tagobj
Associate/Disassociate EIP to VPC instance
dataset/ETHPy150Open evennia/evennia/evennia/typeclasses/tags.py/TagHandler.add--crossover with--dataset/ETHPy150Open spulec/moto/tests/test_ec2/test_elastic_ip_addresses.py/test_eip_associate_vpc