From 959d441661d7cc75ea026d6f21cdf4ba9ee47538 Mon Sep 17 00:00:00 2001 From: Ayush Shah Date: Fri, 18 Feb 2022 12:50:55 +0530 Subject: [PATCH] Glossary Entity Added - Ingestion fix (#2794) * Added Glossary * Modified Glossary: Mixin and suffix * Glossary Mixin Methods * Sample Data and Mixin for Glossary * Modified comments * Glossary Mixin Updated * Added Glossary import * Import issues fixed, removed upper limit for jinja2 as it conflicted * Removed Glossary Import --- ingestion/setup.py | 2 +- .../ingestion/ometa/mixins/glossary_mixin.py | 24 +++++++++++++++++++ .../src/metadata/ingestion/ometa/ometa_api.py | 7 +++++- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 ingestion/src/metadata/ingestion/ometa/mixins/glossary_mixin.py diff --git a/ingestion/setup.py b/ingestion/setup.py index 9346cd11dba..2924bf116a6 100644 --- a/ingestion/setup.py +++ b/ingestion/setup.py @@ -42,7 +42,7 @@ base_requirements = { "sql-metadata~=2.0.0", "requests~=2.26", "cryptography", - "Jinja2>=2.11.3, <3.0", + "Jinja2>=2.11.3", "PyYAML", "jsonschema", "parsimonious==0.8.1", diff --git a/ingestion/src/metadata/ingestion/ometa/mixins/glossary_mixin.py b/ingestion/src/metadata/ingestion/ometa/mixins/glossary_mixin.py new file mode 100644 index 00000000000..3c6544b4bfe --- /dev/null +++ b/ingestion/src/metadata/ingestion/ometa/mixins/glossary_mixin.py @@ -0,0 +1,24 @@ +""" +Mixin class containing Glossaries specific methods + +To be used be OpenMetadata +""" +import logging +from typing import Type, TypeVar + +from pydantic import BaseModel + +T = TypeVar("T", bound=BaseModel) # pylint: disable=invalid-name +logger = logging.getLogger(__name__) + + +class GlossaryMixin: + def create_glossaries_category(self, entity: Type[T], glossaries_body): + """Method to create new Glossary category + Args: + glossaries_body (Glossary): body of the request + """ + resp = self.client.put( + path=self.get_suffix(entity), data=glossaries_body.json() + ) + logger.info(f"Created a Glossary: {resp}") diff --git a/ingestion/src/metadata/ingestion/ometa/ometa_api.py b/ingestion/src/metadata/ingestion/ometa/ometa_api.py index 616c0284672..9b6b565f90d 100644 --- a/ingestion/src/metadata/ingestion/ometa/ometa_api.py +++ b/ingestion/src/metadata/ingestion/ometa/ometa_api.py @@ -25,6 +25,7 @@ from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest from metadata.generated.schema.entity.data.chart import Chart from metadata.generated.schema.entity.data.dashboard import Dashboard from metadata.generated.schema.entity.data.database import Database +from metadata.generated.schema.entity.data.glossary import Glossary from metadata.generated.schema.entity.data.location import Location from metadata.generated.schema.entity.data.metrics import Metrics from metadata.generated.schema.entity.data.mlmodel import MlModel @@ -47,6 +48,7 @@ from metadata.generated.schema.type.entityHistory import EntityVersionHistory from metadata.generated.schema.type.entityReference import EntityReference from metadata.ingestion.ometa.auth_provider import AuthenticationProvider from metadata.ingestion.ometa.client import REST, APIError, ClientConfig +from metadata.ingestion.ometa.mixins.glossary_mixin import GlossaryMixin from metadata.ingestion.ometa.mixins.mlmodel_mixin import OMetaMlModelMixin from metadata.ingestion.ometa.mixins.pipeline_mixin import OMetaPipelineMixin from metadata.ingestion.ometa.mixins.table_mixin import OMetaTableMixin @@ -63,7 +65,6 @@ from metadata.ingestion.ometa.utils import get_entity_type, uuid_to_str logger = logging.getLogger(__name__) - # The naming convention is T for Entity Types and C for Create Types T = TypeVar("T", bound=BaseModel) C = TypeVar("C", bound=BaseModel) @@ -103,6 +104,7 @@ class OpenMetadata( OMetaTableMixin, OMetaVersionMixin, OMetaTagMixin, + GlossaryMixin, Generic[T, C], ): """ @@ -221,6 +223,9 @@ class OpenMetadata( if issubclass(entity, (Tag, TagCategory)): return "/tags" + if issubclass(entity, Glossary): + return "/glossaries" + if issubclass(entity, get_args(Union[Role, self.get_create_entity_type(Role)])): return "/roles"