Source code for tamr_unify_client.categorization.category.resource

from copy import deepcopy

from tamr_unify_client.base_resource import BaseResource


[docs]class Category(BaseResource): """A category of a taxonomy""" @classmethod def from_json(cls, client, data, api_path=None): return super().from_data(client, data, api_path) @property def name(self): """:type: str""" return self._data.get("name") @property def description(self): """:type: str""" return self._data.get("description") @property def path(self): """:type: list[str]""" return self._data.get("path")[:]
[docs] def parent(self): """Gets the parent Category of this one, or None if it is a tier 1 category :returns: The parent Category or None :rtype: :class:`~tamr_unify_client.categorization.category.resource.Category` """ parent = self._data.get("parent") if parent: alias = self.api_path.rsplit("/", 1)[0] + "/" + parent.split("/")[-1] resource_json = self.client.get(alias).successful().json() return Category.from_json(self.client, resource_json, alias) else: return None
[docs] def spec(self): """Returns this category's spec. :return: The spec for the category. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return CategorySpec.of(self)
def __repr__(self): return ( f"{self.__class__.__module__}." f"{self.__class__.__qualname__}(" f"relative_id={self.relative_id!r}, " f"name={self.name!r}," f"path={'/'.join(self.path)!r}," f"description={self.description!r})" )
[docs]class CategorySpec: """A representation of the server view of a category.""" def __init__(self, client, data, api_path): self.client = client self._data = data self.api_path = api_path
[docs] @staticmethod def of(resource): """Creates a category spec from a category. :param resource: The existing category. :type resource: :class:`~tamr_unify_client.categorization.category.resource.Category` :return: The corresponding category spec. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return CategorySpec( resource.client, deepcopy(resource._data), resource.api_path )
[docs] @staticmethod def new(): """Creates a blank spec that could be used to construct a new category. :return: The empty spec. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return CategorySpec(None, {}, None)
[docs] def from_data(self, data): """Creates a spec with the same client and API path as this one, but new data. :param data: The data for the new spec. :type data: dict :return: The new spec. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return CategorySpec(self.client, data, self.api_path)
[docs] def to_dict(self): """Returns a version of this spec that conforms to the API representation. :returns: The spec's dict. :rtype: dict """ return deepcopy(self._data)
[docs] def with_name(self, new_name): """Creates a new spec with the same properties, updating name. :param new_name: The new name. :type new_name: str :return: The new spec. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return self.from_data({**self._data, "name": new_name})
[docs] def with_description(self, new_description): """Creates a new spec with the same properties, updating description. :param new_description: The new description. :type new_description: str :return: The new spec. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return self.from_data({**self._data, "description": new_description})
[docs] def with_path(self, new_path): """Creates a new spec with the same properties, updating path. :param new_path: The new path. :type new_path: list[str] :return: The new spec. :rtype: :class:`~tamr_unify_client.categorization.category.resource.CategorySpec` """ return self.from_data({**self._data, "path": new_path})
def __repr__(self): return ( f"{self.__class__.__module__}." f"{self.__class__.__qualname__}(" f"dict={self._data})" )