From 03274e8c71bf34e1d0f12ca8982faf4ecd78d29c Mon Sep 17 00:00:00 2001 From: Jeremy Magland Date: Mon, 22 Apr 2024 10:53:23 -0400 Subject: [PATCH 1/5] skip register type when already registered when loading namespace --- src/hdmf/spec/namespace.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/hdmf/spec/namespace.py b/src/hdmf/spec/namespace.py index a2ae0bd37..48fa8a8a9 100644 --- a/src/hdmf/spec/namespace.py +++ b/src/hdmf/spec/namespace.py @@ -466,6 +466,9 @@ def __load_namespace(self, namespace, reader, resolve=True): return included_types def __register_type(self, ndt, inc_ns, catalog, registered_types): + if ndt in registered_types: + # already registered + return spec = inc_ns.get_spec(ndt) spec_file = inc_ns.catalog.get_spec_source_file(ndt) self.__register_dependent_types(spec, inc_ns, catalog, registered_types) From b19e429733e4cf70507846e1b0402c3f3347bc27 Mon Sep 17 00:00:00 2001 From: Jeremy Magland Date: Mon, 22 Apr 2024 10:58:19 -0400 Subject: [PATCH 2/5] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00eeeb5dd..fdefc990e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Updated `_field_config` to take `type_map` as an argument for APIs. @mavaylon1 [#1094](https://github.com/hdmf-dev/hdmf/pull/1094) - Added `TypeConfigurator` to automatically wrap fields with `TermSetWrapper` according to a configuration file. @mavaylon1 [#1016](https://github.com/hdmf-dev/hdmf/pull/1016) - Updated `TermSetWrapper` to support validating a single field within a compound array. @mavaylon1 [#1061](https://github.com/hdmf-dev/hdmf/pull/1061) +- Speed up loading namespaces by skipping register_type when already registered. ## HDMF 3.13.0 (March 20, 2024) From b0d350a7fd2f889b1f10b61072b4a76027f814a4 Mon Sep 17 00:00:00 2001 From: Matthew Avaylon Date: Sun, 18 Aug 2024 21:26:40 -0700 Subject: [PATCH 3/5] Update CHANGELOG.md --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d7137dea..222c19b40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,6 @@ dataset based on the shape of the dataset data and the dimension names in the sp is available on build (during the write process), but not on read of a dataset from a file. @rly [#1081](https://github.com/hdmf-dev/hdmf/pull/1081) - Speed up loading namespaces by skipping register_type when already registered. @magland [#1103](https://github.com/hdmf-dev/hdmf/pull/1103) - ## HDMF 3.14.2 (July 7, 2024) ### Enhancements From 321a865aac531d7dab772661895175f4b47316a4 Mon Sep 17 00:00:00 2001 From: Matthew Avaylon Date: Sun, 18 Aug 2024 21:28:55 -0700 Subject: [PATCH 4/5] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 222c19b40..c83a7ac3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ - Added new attribute "dimension_labels" on `DatasetBuilder` which specifies the names of the dimensions used in the dataset based on the shape of the dataset data and the dimension names in the spec for the data type. This attribute is available on build (during the write process), but not on read of a dataset from a file. @rly [#1081](https://github.com/hdmf-dev/hdmf/pull/1081) -- Speed up loading namespaces by skipping register_type when already registered. @magland [#1103](https://github.com/hdmf-dev/hdmf/pull/1103) +- Speed up loading namespaces by skipping register_type when already registered. @magland [#1102](https://github.com/hdmf-dev/hdmf/pull/1102) ## HDMF 3.14.2 (July 7, 2024) From 065fe704b2392029f23bc5d422aef4e9a704f0a3 Mon Sep 17 00:00:00 2001 From: Matthew Avaylon Date: Sun, 18 Aug 2024 21:30:50 -0700 Subject: [PATCH 5/5] Update namespace.py --- src/hdmf/spec/namespace.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/hdmf/spec/namespace.py b/src/hdmf/spec/namespace.py index 48fa8a8a9..f0417175f 100644 --- a/src/hdmf/spec/namespace.py +++ b/src/hdmf/spec/namespace.py @@ -468,16 +468,17 @@ def __load_namespace(self, namespace, reader, resolve=True): def __register_type(self, ndt, inc_ns, catalog, registered_types): if ndt in registered_types: # already registered - return - spec = inc_ns.get_spec(ndt) - spec_file = inc_ns.catalog.get_spec_source_file(ndt) - self.__register_dependent_types(spec, inc_ns, catalog, registered_types) - if isinstance(spec, DatasetSpec): - built_spec = self.dataset_spec_cls.build_spec(spec) + pass else: - built_spec = self.group_spec_cls.build_spec(spec) - registered_types.add(ndt) - catalog.register_spec(built_spec, spec_file) + spec = inc_ns.get_spec(ndt) + spec_file = inc_ns.catalog.get_spec_source_file(ndt) + self.__register_dependent_types(spec, inc_ns, catalog, registered_types) + if isinstance(spec, DatasetSpec): + built_spec = self.dataset_spec_cls.build_spec(spec) + else: + built_spec = self.group_spec_cls.build_spec(spec) + registered_types.add(ndt) + catalog.register_spec(built_spec, spec_file) def __register_dependent_types(self, spec, inc_ns, catalog, registered_types): """Ensure that classes for all types used by this type are registered