From dbb04c4e74c1286b74531f0d34a02c26bf6d4c08 Mon Sep 17 00:00:00 2001 From: Dmitriy Apollonin Date: Fri, 16 Dec 2022 13:35:36 -0700 Subject: [PATCH 1/3] add get_by_name method to metadata ontology --- CHANGELOG.md | 4 ++++ labelbox/schema/data_row_metadata.py | 27 +++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00a629b5e..6f2c636fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +# Version 3.34.0 (...) +### Added +* Added `get_by_name()` method to MetadataOntology object to access both custom and reserved metadata by name. + # Version 3.33.0 (2022-12-13) ### Added * Added SDK support for creating batches with up to 100k data rows diff --git a/labelbox/schema/data_row_metadata.py b/labelbox/schema/data_row_metadata.py index 461076151..fc3fd4d85 100644 --- a/labelbox/schema/data_row_metadata.py +++ b/labelbox/schema/data_row_metadata.py @@ -147,6 +147,29 @@ def _build_ontology(self): str, DataRowMetadataSchema] = self._make_normalized_name_index( self.custom_fields) + def get_by_name(self, name: str) -> Union[DataRowMetadataSchema, Dict[str, DataRowMetadataSchema]]: + """ Get metadata by name + + >>> mdo.get_by_name(name) + + Args: + name (str): Name of metadata schema + + Returns: + Metadata schema as `DataRowMetadataSchema` or dict, in case of nested metadata + + Raises: + KeyError: When provided name is not presented in neither reserved nor custom metadata list + """ + + # search through reserved names first + if name in self.reserved_by_name: + return self.reserved_by_name[name] + elif name in self.custom_by_name: + return self.custom_by_name[name] + else: + raise KeyError(f"There is no metadata with name {name}") + @staticmethod def _make_name_index( fields: List[DataRowMetadataSchema] @@ -224,7 +247,7 @@ def _parse_ontology(raw_ontology) -> List[DataRowMetadataSchema]: return fields def refresh_ontology(self): - """ Update the `DataRowMetadataOntology` instance with the latest + """ Update the `DataRowMetadataOntology` instance with the latest metadata ontology schemas """ self._raw_ontology = self._get_ontology() @@ -279,7 +302,7 @@ def update_schema(self, name: str, new_name: str) -> DataRowMetadataSchema: Returns: Updated metadata schema as `DataRowMetadataSchema` - + Raises: KeyError: When provided name is not a valid custom metadata """ From e202f77b0fa7a8e46065b6ba913745752602673f Mon Sep 17 00:00:00 2001 From: Dmitriy Apollonin Date: Fri, 16 Dec 2022 16:32:37 -0700 Subject: [PATCH 2/3] yapf --- labelbox/schema/data_row_metadata.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/labelbox/schema/data_row_metadata.py b/labelbox/schema/data_row_metadata.py index fc3fd4d85..b82276706 100644 --- a/labelbox/schema/data_row_metadata.py +++ b/labelbox/schema/data_row_metadata.py @@ -147,7 +147,9 @@ def _build_ontology(self): str, DataRowMetadataSchema] = self._make_normalized_name_index( self.custom_fields) - def get_by_name(self, name: str) -> Union[DataRowMetadataSchema, Dict[str, DataRowMetadataSchema]]: + def get_by_name( + self, name: str + ) -> Union[DataRowMetadataSchema, Dict[str, DataRowMetadataSchema]]: """ Get metadata by name >>> mdo.get_by_name(name) From f245781a7fcc9fb740fd3c3d521c2c663de4b1fb Mon Sep 17 00:00:00 2001 From: Dmitriy Apollonin Date: Fri, 16 Dec 2022 17:06:16 -0700 Subject: [PATCH 3/3] change language a bit --- labelbox/schema/data_row_metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labelbox/schema/data_row_metadata.py b/labelbox/schema/data_row_metadata.py index b82276706..51b0be44a 100644 --- a/labelbox/schema/data_row_metadata.py +++ b/labelbox/schema/data_row_metadata.py @@ -158,7 +158,7 @@ def get_by_name( name (str): Name of metadata schema Returns: - Metadata schema as `DataRowMetadataSchema` or dict, in case of nested metadata + Metadata schema as `DataRowMetadataSchema` or dict, in case of Enum metadata Raises: KeyError: When provided name is not presented in neither reserved nor custom metadata list