Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
tdw-catalog / tdw_catalog / glossary_term.py
Size: Mime:
from datetime import datetime
from typing import Optional

from tdw_catalog import Catalog
import tdw_catalog.organization as organization
from tdw_catalog.entity import Entity, Property, EntityBase
from tdw_catalog.errors import CatalogException, _convert_error, _raise_error
from tdw_catalog.relations import _OrganizationRelation


@Entity([
    Property("id", str, serialize=True),
    Property("organization_id",
             str,
             relation="tdw_catalog.organization.Organization",
             serialize=True),
    Property("user_id", str),
    Property("title", str, writable=True),
    Property("description", Optional[str], writable=True),
    Property("created_at", datetime),
    Property("updated_at", datetime),
])
class GlossaryTerm(EntityBase, _OrganizationRelation):
    """
    :class:`.GlossaryTerm`\\ s are used to categorize and classify columns within :class:`.Dataset`\\ s

    Attributes
    ----------
    id : str
        :class:`.GlossaryTerm`\\ 's unique id
    organization_id :  str
        The unique ID of the :class:`.Organization` to which this :class:`.GlossaryTerm` belongs
    user_id : str
        The unique ID of the :class:`.User` who created this :class:`.GlossaryTerm`
    title : str
        The title for this :class:`.GlossaryTerm`
    description: Optional[str]
        An Optional description for this :class:`.GlossaryTerm`
    created_at : datetime
        The datetime at which this :class:`.GlossaryTerm` was created
    updated_at : datetime
        The datetime at which this :class:`.GlossaryTerm` was last updated
    """

    _client: 'Catalog'
    id: str
    title: str
    organization: 'organization.Organization'
    organization_id: str
    user_id: str
    description: Optional[str]
    created_at: datetime
    updated_at: datetime

    def __str__(self) -> str:
        return f"<GlossaryTerm id={self.id} title={self.title}>"

    @classmethod
    def get(cls, client: 'Catalog', id: str):
        try:
            res = client._get_glossary_term(id=id)
            return cls(client, **res)
        except Exception as e:
            err = _raise_error(e, "Unable to fetch GlossaryTerm {}".format(id))

    def save(self) -> None:
        """
        Update this :class:`.GlossaryTerm`, saving any changes to its title

        Parameters
        ----------
        None

        Returns
        -------
        None

        Raises
        ------
        CatalogPermissionDeniedException
            If the caller is not allowed to update this :class:`.GlossaryTerm`, or if the given :class:`.GlossaryTerm` ID does not exist
        CatalogException
            If call to the :class:`.Catalog` server fails
        """
        try:
            res = self._client._update_glossary_term(
                id=self.id, title=self.title, description=self.description)
            self.deserialize(res)
        except Exception as e:
            raise _convert_error(e)

    def delete(self) -> None:
        """
        Delete this :class:`.GlossaryTerm`. This :class:`.GlossaryTerm` object should not be
        used after `delete()` has successfully returned

        Parameters
        ----------
        None

        Returns
        -------
        None

        Raises
        ------
        CatalogPermissionDeniedException
            If the caller is not allowed to delete this :class:`.GlossaryTerm`
        CatalogNotFoundException
            If the :class:`.GlossaryTerm` being deleted does not exist
        CatalogException
            If call to the :class:`.Catalog` server fails
        """
        try:
            self._client._delete_glossary_term(id=self.id)
        except Exception as e:
            raise _convert_error(e)