Source code for tdw_catalog.metadata_template
from typing import List, Optional
from tdw_catalog import organization_member
from tdw_catalog.entity import Entity, Property, EntityBase
from tdw_catalog.errors import _convert_error
from datetime import datetime
from tdw_catalog import Catalog
import tdw_catalog.metadata_template.field as field
import tdw_catalog.metadata_template.update_builder as update_builder
import tdw_catalog.organization as organization
[docs]@Entity([
Property("id", str, serialize=True),
Property("organization_id",
str,
relation="tdw_catalog.organization.Organization",
serialize=True),
Property("created_by",
str,
relation="tdw_catalog.organization.OrganizationMember",
relation_key="created_by_member",
serialize=True),
Property("title", str, writable=True),
Property("description", Optional[str], writable=True),
Property("fields",
List[field.MetadataTemplateField],
deserialize=field._deserialize_metadata_template_fields,
writable=True),
Property("created_at", datetime),
Property("updated_at", datetime)
])
class MetadataTemplate(EntityBase):
"""
:class:`.MetadataTemplate`\\ s encompass a standard set of :class:`.MetadataTemplateField`\\ s which can be applied to :class:`.Dataset`\\ s within the :class:`.Catalog`
Attributes
----------
id : str
The unique ID of the :class:`.MetadataTemplate`
organization : Organization
The :class:`.Organization` to which this :class:`.MetadataTemplate` belongs
organization_id : str
The unique ID of the :class:`.Organization` to which this :class:`.MetadataTemplate` belongs
created_by : str
The unique user ID of the :class:`.OrganizationMember` who created this :class:`.MetadataTemplate`
created_by_member : OrganizationMember
The :class:`.OrganizationMember` who created this :class:`.MetadataTemplate`
title : str
A title for this :class:`.MetadataTemplate`
description : Optional[str]
An optional description of this :class:`.MetadataTemplate`
fields: List[MetadataTemplateField]
This list of :class:`.MetadataTemplateField`\\ s constitutes the fields which would be attached to a :class:`.Dataset` if this :class:`.MetadataTemplate` was assigned to the :class:`.Dataset`
created_at : datetime
The datetime at which this :class:`.MetadataTemplate` was created
updated_at : datetime
The datetime at which this :class:`.MetadataTemplate` was last updated
"""
_client: 'Catalog'
id: str
organization: 'organization.Organization'
organization_id: str
created_by: str
title: str
description: Optional[str]
fields: List['field.MetadataTemplateField']
created_at: datetime
updated_at: datetime
def __str__(self) -> str:
return f"<{self.__class__.__name__} id={self.id} title={self.title}>"
def _get_organization(self):
return organization.Organization.get(self._client,
self.organization_id)
def _get_created_by_member(self):
return organization_member.OrganizationMember.get(
self._client, self.organization_id, self.created_by)
[docs] @classmethod
def get(cls, client: 'Catalog', organization_id: str, id: str):
"""
Retrieve a :class:`.MetadataTemplate` belonging to this :class:`.Organization`
Parameters
----------
client : Catalog
The :class:`.Catalog` client of the :class:`.Organization` containing the :class:`.MetadataTemplate`
organization_id : str
The unique ID of the :class:`.Organization`
id : str
The unique ID of the :class:`.MetadataTemplate`
Returns
-------
MetadataTemplate
The :class:`.MetadataTemplate` associated with the given ID
Raises
------
CatalogInternalException
If call to the :class:`.Catalog` server fails
CatalogNotFoundException
If no MetadataTemplate is found matching the provided ID
CatalogPermissionDeniedException
If the caller is not allowed to retrieve this :class:`.MetadataTemplate`
"""
try:
res = client._get_field_template(organization_id=organization_id,
id=id)
return MetadataTemplate(client, **res)
except Exception as e:
raise _convert_error(e)
[docs] def delete(self) -> None:
"""
Delete this :class:`.MetadataTemplate` from the :class:`.Organization`. :class:`.Dataset`\\ s which employ this template will have their templated metadata shifted to custom metadata.
Parameters
----------
None
Returns
-------
None
Raises
------
CatalogInternalException
If call to the :class:`.Catalog` server fails
CatalogNotFoundException
If no MetadataTemplate is found matching the given ID
CatalogPermissionDeniedException
if the caller is not allowed to delete this :class:`.MetadataTemplate`
"""
try:
self._client._delete_field_template(template=self.serialize())
except Exception as e:
raise _convert_error(e)
[docs] def save(self) -> 'MetadataTemplate':
"""
Save and update this :class:`.MetadataTemplate` inside the :class:`.Organization`
Parameters
----------
None
Returns
-------
MetadataTemplate
The updated :class:`.MetadataTemplate` after it has been saved
Raises
------
CatalogInternalException
If call to the :class:`.Catalog` server fails
CatalogNotFoundException
If no :class:`.MetadataTemplate` is found inside the :class:`.Organization` matching the ID of the updated :class:`.MetadataTemplate`
CatalogPermissionDeniedException
If the caller is not allowed to update this :class:`.MetadataTemplate`
"""
try:
res = self._client._update_field_template(
template=self.serialize())
return MetadataTemplate(client=self._client, **res)
except Exception as e:
raise _convert_error(e)
[docs] def modify_fields(self) -> 'update_builder.MetadataTemplateUpdateBuilder':
"""
Returns an object that can be used to manage and modify fields within this template. Changes to the template are saved to the :class:`.Catalog` when `.save()` is called on the returned object.
Parameters
----------
None
Returns
-------
MetadataTemplateUpdateBuilder
A MetadataTemplateUpdateBuilder which allows for the addition, removal, updating, and reordering of fields for the :class:`.MetadataTemplate`.
"""
return update_builder.MetadataTemplateUpdateBuilder(
client=self._client, template=self)