Add GET with fields param (#1033)

This commit is contained in:
Pere Miquel Brull 2021-11-02 21:04:55 +01:00 committed by GitHub
parent 617ca4be3f
commit 87fd93a3d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 7 deletions

View File

@ -297,28 +297,36 @@ class OpenMetadata(OMetaLineageMixin, OMetaTableMixin, Generic[T, C]):
resp = method(self.get_suffix(entity), data=data.json())
return entity_class(**resp)
def get_by_name(self, entity: Type[T], fqdn: str) -> Optional[T]:
def get_by_name(
self, entity: Type[T], fqdn: str, fields: Optional[List[str]] = None
) -> Optional[T]:
"""
Return entity by name or None
"""
return self._get(entity=entity, path=f"name/{fqdn}")
return self._get(entity=entity, path=f"name/{fqdn}", fields=fields)
def get_by_id(self, entity: Type[T], entity_id: str) -> Optional[T]:
def get_by_id(
self, entity: Type[T], entity_id: str, fields: Optional[List[str]] = None
) -> Optional[T]:
"""
Return entity by ID or None
"""
return self._get(entity=entity, path=entity_id)
return self._get(entity=entity, path=entity_id, fields=fields)
def _get(self, entity: Type[T], path: str) -> Optional[T]:
def _get(
self, entity: Type[T], path: str, fields: Optional[List[str]] = None
) -> Optional[T]:
"""
Generic GET operation for an entity
:param entity: Entity Class
:param path: URL suffix by FQDN or ID
:param fields: List of fields to return
"""
fields_str = "?fields=" + ",".join(fields) if fields else ""
try:
resp = self.client.get(f"{self.get_suffix(entity)}/{path}")
resp = self.client.get(f"{self.get_suffix(entity)}/{path}{fields_str}")
return entity(**resp)
except APIError as err:
logger.error(

View File

@ -65,6 +65,20 @@ class OMetaModelTest(TestCase):
self.assertEqual(res_create.id, res.id)
self.assertEqual(res.owner.id, self.user.id)
# Getting without owner field does not return it by default
res_none = self.metadata.get_by_name(
entity=Model, fqdn=self.entity.fullyQualifiedName
)
self.assertIsNone(res_none.owner)
# We can request specific fields to be added
res_owner = self.metadata.get_by_name(
entity=Model,
fqdn=self.entity.fullyQualifiedName,
fields=["owner", "followers"],
)
self.assertEqual(res_owner.owner.id, self.user.id)
def test_get_name(self):
"""
We can fetch a model by name and get it back as Entity
@ -129,7 +143,7 @@ class OMetaModelTest(TestCase):
# Then we should not find it
res = self.metadata.list_entities(entity=Model)
print(res)
assert not next(
iter(
ent