Skip to content

Inconsistent tags argument in Taggable.{__init__, _with_new_tags, tagged} #136

@matthiasdiener

Description

@matthiasdiener

I wonder whether they should all accept tags: ToTagSetConvertible instead of the current mix of tags: ToTagSetConvertible and tags: FrozenSet[Tag].

pytools/pytools/tag.py

Lines 253 to 284 in ea121e1

def __init__(self, tags: FrozenSet[Tag] = frozenset()):
"""
Constructor for all objects that possess a `tags` attribute.
:arg tags: a :class:`frozenset` of :class:`~pytools.tag.Tag` objects.
Tags can be modified via the :meth:`~pytools.tag.Taggable.tagged` and
:meth:`~pytools.tag.Taggable.without_tags` routines. Input checking
of *tags* should be performed before creating a
:class:`~pytools.tag.Taggable` instance, using
:func:`~pytools.tag.check_tag_uniqueness`.
"""
self.tags = tags
def _with_new_tags(self, tags: FrozenSet[Tag]) -> Self:
"""
Returns a copy of *self* with the specified tags. This method
should be overridden by subclasses.
"""
from warnings import warn
warn(f"_with_new_tags() for {self.__class__} fell back "
"to using copy(). This is deprecated and will stop working in "
"July of 2022. Instead, override _with_new_tags to specify "
"how tags should be applied to an instance.",
DeprecationWarning, stacklevel=2)
# mypy is right: we're not promising this attribute is defined.
# Once this deprecation expires, this will go back to being an
# abstract method.
return self.copy(tags=tags) # type: ignore[attr-defined] # pylint: disable=no-member # noqa: E501
def tagged(self, tags: ToTagSetConvertible) -> Self:
"""

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions