h5rdmtoolbox 1.2.2__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/PKG-INFO +31 -17
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/README.md +22 -16
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/__init__.py +99 -10
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/_cfg.py +23 -21
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/_repr.py +185 -61
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/_user.py +35 -3
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/cli.py +52 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/consts.py +3 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/__init__.py +19 -5
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/core.py +4 -3
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/convention/definition.py +33 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/generate.py +6 -6
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/convention/hdf_ontology.py +102 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/convention/ontology/__init__.py +4 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/convention/ontology/h5namespace.py +40 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/convention/ontology/h5ontocls.py +62 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_attributes.py +27 -26
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/__init__.py +6 -3
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/h5interface.py +7 -6
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/table.py +10 -47
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/utils.py +3 -2
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/toolbox_validators.py +54 -63
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/data/def_icon.png +0 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/data/id_icon.png +0 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/data/iri_icon.png +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/data/style.css +32 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/data/type_icon.png +0 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/database/__init__.py +80 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/database/hdfdb/__init__.py +0 -4
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/database/hdfdb/filedb.py +32 -20
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/database/hdfdb/objdb.py +154 -75
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/database/hdfdb/query.py +12 -3
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/database/hdfdb/utils.py +10 -5
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/database/template.py → h5rdmtoolbox-1.3.0/h5rdmtoolbox/database/interface.py +15 -2
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/database/mongo.py +18 -14
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/extensions/magnitude.py +67 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/extensions/normalize.py +103 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/extensions/units.py +45 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/extensions/vector.py +138 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/identifiers.py +13 -10
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/layout/core.py +612 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/protocols.py +219 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/repository/interface.py +17 -10
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/repository/zenodo/core.py +402 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/repository/zenodo/metadata.py +71 -9
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/repository/zenodo/tokens.py +86 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/tutorial.py +13 -8
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/utils.py +69 -55
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/wrapper/__init__.py +7 -0
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/accessory.py → h5rdmtoolbox-1.3.0/h5rdmtoolbox/wrapper/accessor.py +31 -8
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/wrapper/core.py +498 -321
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/wrapper/ds_decoder.py +1 -0
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/wrapper/h5attr.py +473 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/wrapper/h5utils.py +1 -1
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/wrapper/h5yaml.py +49 -21
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/wrapper/jsonld.py +1039 -0
- {h5rdmtoolbox-1.2.2/h5rdmtoolbox/database → h5rdmtoolbox-1.3.0/h5rdmtoolbox/wrapper}/lazy.py +56 -68
- h5rdmtoolbox-1.3.0/h5rdmtoolbox/wrapper/rdf.py +501 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/wrapper/xr2hdf.py +32 -27
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox.egg-info/PKG-INFO +31 -17
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox.egg-info/SOURCES.txt +24 -26
- h5rdmtoolbox-1.3.0/h5rdmtoolbox.egg-info/entry_points.txt +2 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox.egg-info/requires.txt +10 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/setup.cfg +12 -21
- h5rdmtoolbox-1.3.0/tests/clean_zenodo_sandbox.py +23 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/standard_attributes/standard_names/test_interface.py +6 -6
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/standard_attributes/standard_names/test_provenance.py +3 -3
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/standard_attributes/standard_names/test_snt.py +34 -4
- h5rdmtoolbox-1.3.0/tests/conventions/standard_attributes/test_standard_attributes.py +60 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/standard_attributes/test_standard_names.py +1 -2
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/test_conventions.py +8 -30
- h5rdmtoolbox-1.3.0/tests/conventions/test_engmeta.py +55 -0
- h5rdmtoolbox-1.3.0/tests/conventions/test_ontology.py +231 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/test_toolbox_validators.py +13 -4
- h5rdmtoolbox-1.3.0/tests/database/test_find_rdf.py +35 -0
- h5rdmtoolbox-1.3.0/tests/database/test_hdfDB.py +564 -0
- h5rdmtoolbox-1.3.0/tests/database/test_mongo.py +244 -0
- h5rdmtoolbox-1.3.0/tests/layouts/test_core.py +313 -0
- h5rdmtoolbox-1.3.0/tests/layouts/test_docs.py +66 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/repository/test_zenodo.py +96 -40
- h5rdmtoolbox-1.3.0/tests/test_extensions.py +136 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/test_identifiers.py +22 -8
- h5rdmtoolbox-1.3.0/tests/test_repr.py +114 -0
- h5rdmtoolbox-1.3.0/tests/test_user.py +100 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/test_utils.py +25 -23
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/test_version.py +4 -6
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/wrapper/test_core.py +272 -58
- h5rdmtoolbox-1.3.0/tests/wrapper/test_dump.py +52 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/wrapper/test_file.py +84 -181
- h5rdmtoolbox-1.3.0/tests/wrapper/test_jsonld.py +511 -0
- h5rdmtoolbox-1.3.0/tests/wrapper/test_lazy.py +62 -0
- h5rdmtoolbox-1.3.0/tests/wrapper/test_namespaces.py +45 -0
- h5rdmtoolbox-1.3.0/tests/wrapper/test_rdf.py +389 -0
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/cache.py +0 -3
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/consts.py +0 -8
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/convention/_h5tbx.py +0 -37
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/convention/_m4i_namespace.py +0 -213
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/convention/_obo_namespace.py +0 -60
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/data/__init__.py +0 -9
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/database/__init__.py +0 -9
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/database/hdfdb/nonsearchable.py +0 -11
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/ipyvolume.py +0 -176
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/magnitude.py +0 -77
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/normalize.py +0 -174
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/scatterhist.py +0 -100
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/units.py +0 -23
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/vector.py +0 -85
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/hdfgui.py +0 -39
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/layout/core.py +0 -322
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/namespace.py +0 -7
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/repository/h5metamapper.py +0 -68
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/repository/zenodo/core.py +0 -316
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/repository/zenodo/tokens.py +0 -62
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/__init__.py +0 -9
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/h5attr.py +0 -314
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/iri.py +0 -193
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/jsonld.py +0 -134
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/__init__.py +0 -1
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/_build.py +0 -167
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/_codemeta_namespace.py +0 -82
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/_m4i_namespace.py +0 -213
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/_obo_namespace.py +0 -60
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/_qudt_quantitykind_namespace.py +0 -21953
- h5rdmtoolbox-1.2.2/h5rdmtoolbox/wrapper/namespaces/_qudt_unit_namespace.py +0 -27814
- h5rdmtoolbox-1.2.2/tests/clean_zenodo_sandbox.py +0 -31
- h5rdmtoolbox-1.2.2/tests/conventions/standard_attributes/test_standard_attributes.py +0 -32
- h5rdmtoolbox-1.2.2/tests/database/notest_mongo_old.py +0 -253
- h5rdmtoolbox-1.2.2/tests/database/test_hdfDB.py +0 -283
- h5rdmtoolbox-1.2.2/tests/database/test_mongo.py +0 -130
- h5rdmtoolbox-1.2.2/tests/layouts/test_core.py +0 -95
- h5rdmtoolbox-1.2.2/tests/repository/test_metadatamapper.py +0 -61
- h5rdmtoolbox-1.2.2/tests/test_extensions.py +0 -210
- h5rdmtoolbox-1.2.2/tests/test_logger.py +0 -31
- h5rdmtoolbox-1.2.2/tests/test_repr.py +0 -79
- h5rdmtoolbox-1.2.2/tests/test_user.py +0 -57
- h5rdmtoolbox-1.2.2/tests/wrapper/test_dump.py +0 -21
- h5rdmtoolbox-1.2.2/tests/wrapper/test_namespaces.py +0 -107
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/LICENSE +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/_version.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/cfg.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/consts.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/errors.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/references.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/accessor.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/affixes.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/cache.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/consts.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/name.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/standard_names/transformation.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/utils.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/convention/warnings.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/data/fluid-v1.yml +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/data/h5tbx.yaml +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/data/piv-v1.yml +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/data/tutorial_convention.yaml +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/data/tutorial_standard_name_table.yaml +0 -0
- /h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/__init__.py → /h5rdmtoolbox-1.3.0/h5rdmtoolbox/dev.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/errors.py +0 -0
- {h5rdmtoolbox-1.2.2/tests → h5rdmtoolbox-1.3.0/h5rdmtoolbox/extensions}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/layout/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/plotting.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/protected_attributes.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/repository/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/repository/zenodo/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/repository/zenodo/utils.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/warnings.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox/wrapper/h5ext.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox.egg-info/dependency_links.txt +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/h5rdmtoolbox.egg-info/top_level.txt +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/pyproject.toml +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/setup.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/conventions → h5rdmtoolbox-1.3.0/tests}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/conventions/standard_attributes → h5rdmtoolbox-1.3.0/tests/conventions}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/conventions/standard_attributes/standard_names → h5rdmtoolbox-1.3.0/tests/conventions/standard_attributes}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/database → h5rdmtoolbox-1.3.0/tests/conventions/standard_attributes/standard_names}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/standard_attributes/standard_names/test_transformations_and_affixes.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/test_references.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/conventions/test_utils.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/layouts → h5rdmtoolbox-1.3.0/tests/database}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/repository → h5rdmtoolbox-1.3.0/tests/layouts}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2/tests/wrapper → h5rdmtoolbox-1.3.0/tests/repository}/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/test_config.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/test_plotting.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/test_xarray_export.py +0 -0
- /h5rdmtoolbox-1.2.2/h5rdmtoolbox/extensions/dataset.py → /h5rdmtoolbox-1.3.0/tests/wrapper/__init__.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/wrapper/test_h5ext.py +0 -0
- {h5rdmtoolbox-1.2.2 → h5rdmtoolbox-1.3.0}/tests/wrapper/test_xr2df.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: h5rdmtoolbox
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: Supporting a FAIR Research Data lifecycle using Python and HDF5.
|
|
5
5
|
Home-page: https://h5rdmtoolbox.readthedocs.io/en/latest/
|
|
6
6
|
Author: Matthias Probst
|
|
@@ -29,12 +29,15 @@ Requires-Dist: pint==0.21.1
|
|
|
29
29
|
Requires-Dist: pint_xarray
|
|
30
30
|
Requires-Dist: regex
|
|
31
31
|
Requires-Dist: packaging
|
|
32
|
+
Requires-Dist: ontolutils>=0.2.20
|
|
32
33
|
Requires-Dist: python-forge
|
|
33
34
|
Requires-Dist: requests
|
|
34
35
|
Requires-Dist: pydantic>=2.3.0
|
|
35
36
|
Requires-Dist: rdflib
|
|
36
37
|
Provides-Extra: database
|
|
37
38
|
Requires-Dist: pymongo; extra == "database"
|
|
39
|
+
Provides-Extra: layout-validation
|
|
40
|
+
Requires-Dist: tabulate; extra == "layout-validation"
|
|
38
41
|
Provides-Extra: csv
|
|
39
42
|
Requires-Dist: pandas; extra == "csv"
|
|
40
43
|
Provides-Extra: snt
|
|
@@ -42,6 +45,8 @@ Requires-Dist: xmltodict; extra == "snt"
|
|
|
42
45
|
Requires-Dist: tabulate; extra == "snt"
|
|
43
46
|
Requires-Dist: python-gitlab; extra == "snt"
|
|
44
47
|
Requires-Dist: pypandoc; extra == "snt"
|
|
48
|
+
Provides-Extra: gui
|
|
49
|
+
Requires-Dist: PyQt5; extra == "gui"
|
|
45
50
|
Provides-Extra: test
|
|
46
51
|
Requires-Dist: pytest>=7.1.2; extra == "test"
|
|
47
52
|
Requires-Dist: pytest-cov; extra == "test"
|
|
@@ -82,7 +87,9 @@ Requires-Dist: sphinx-design; extra == "docs"
|
|
|
82
87
|
Requires-Dist: simplejson; extra == "docs"
|
|
83
88
|
Requires-Dist: myst-nb; extra == "docs"
|
|
84
89
|
Requires-Dist: sphinxcontrib-bibtex; extra == "docs"
|
|
90
|
+
Requires-Dist: kglab; extra == "docs"
|
|
85
91
|
Provides-Extra: complete
|
|
92
|
+
Requires-Dist: PyQt5; extra == "complete"
|
|
86
93
|
Requires-Dist: pytest>=7.1.2; extra == "complete"
|
|
87
94
|
Requires-Dist: pytest-cov; extra == "complete"
|
|
88
95
|
Requires-Dist: pylint; extra == "complete"
|
|
@@ -121,6 +128,7 @@ Requires-Dist: sphinx-design; extra == "complete"
|
|
|
121
128
|
Requires-Dist: simplejson; extra == "complete"
|
|
122
129
|
Requires-Dist: myst-nb; extra == "complete"
|
|
123
130
|
Requires-Dist: sphinxcontrib-bibtex; extra == "complete"
|
|
131
|
+
Requires-Dist: kglab; extra == "complete"
|
|
124
132
|
|
|
125
133
|
# HDF5 Research Data Management Toolbox
|
|
126
134
|
|
|
@@ -131,7 +139,7 @@ Requires-Dist: sphinxcontrib-bibtex; extra == "complete"
|
|
|
131
139
|
|
|
132
140
|
*Note, that the project is still under development!*
|
|
133
141
|
|
|
134
|
-
The "HDF5 Research Data Management Toolbox" (h5RDMtoolbox) is a
|
|
142
|
+
The "HDF5 Research Data Management Toolbox" (h5RDMtoolbox) is a Python package supporting everybody who is working with
|
|
135
143
|
HDF5 to achieve a sustainable data lifecycle which follows
|
|
136
144
|
the [FAIR (Findable, Accessible, Interoperable, Reusable)](https://www.nature.com/articles/sdata201618)
|
|
137
145
|
principles. It specifically supports the five main steps of *planning*, *collecting*, *analyzing*, *sharing* and
|
|
@@ -142,13 +150,14 @@ information of try the [quickstart using colab](#quickstart).
|
|
|
142
150
|
|
|
143
151
|
- Combining HDF5 and [xarray](https://docs.xarray.dev/en/stable/) to allow easy access to metadata and data during
|
|
144
152
|
analysis and processing (
|
|
145
|
-
see [here](https://h5rdmtoolbox.readthedocs.io/en/latest/gettingstarted/quickoverview.html#datasets-xarray-interface).
|
|
153
|
+
see [here](https://h5rdmtoolbox.readthedocs.io/en/latest/gettingstarted/quickoverview.html#datasets-xarray-interface)).
|
|
146
154
|
- Assigning [metadata with "globally unique and persistent identifiers"]() as required
|
|
147
|
-
by [F1 of the FAIR principles](https://www.go-fair.org/fair-principles/f1-meta-data-assigned-globally-unique-persistent-identifiers/)
|
|
148
|
-
|
|
155
|
+
by [F1 of the FAIR principles](https://www.go-fair.org/fair-principles/f1-meta-data-assigned-globally-unique-persistent-identifiers/).
|
|
156
|
+
This can be achieved by using [RDF triples](https://www.w3.org/RDF/), which removes "ambiguity in the meaning of your
|
|
157
|
+
published data".
|
|
149
158
|
- Define standard attributes through
|
|
150
159
|
[conventions](https://h5rdmtoolbox.readthedocs.io/en/latest/userguide/convention/index.html) and enforce users to use
|
|
151
|
-
|
|
160
|
+
certain attributes in their HDF5 files, such as units and a description, for example.
|
|
152
161
|
- Upload HDF5 files directly
|
|
153
162
|
to [repositories](https://h5rdmtoolbox.readthedocs.io/en/latest/userguide/repository/index.html)
|
|
154
163
|
like [Zenodo](https://zenodo.org/)
|
|
@@ -159,20 +168,21 @@ information of try the [quickstart using colab](#quickstart).
|
|
|
159
168
|
|
|
160
169
|
For everybody, who is...
|
|
161
170
|
|
|
162
|
-
- ... looking for a management approach for his or her data
|
|
163
|
-
- ... community has not yet established a stable convention
|
|
164
|
-
- ... working with small and big data, that fits into HDF5 files
|
|
165
|
-
- ... looking for an easy way to work with HDF5, especially through Jupyter Notebooks
|
|
166
|
-
- ...
|
|
167
|
-
- ...
|
|
168
|
-
- ...
|
|
171
|
+
- ... looking for a management approach for his or her data.
|
|
172
|
+
- ... community has not yet established a stable convention.
|
|
173
|
+
- ... working with small and big data, that fits into HDF5 files.
|
|
174
|
+
- ... looking for an easy way to work with HDF5, especially through Jupyter Notebooks.
|
|
175
|
+
- ... trying to integrate HDF5 with repositories and databases.
|
|
176
|
+
- ... wishing to enrich data semantically with the RDF standard.
|
|
177
|
+
- ... looking for a way to do all the above whiles not needing to learn a new syntax.
|
|
178
|
+
- ... new to HDF5 and wants to learn about it, especially with respect to the FAIR principles and data management.
|
|
169
179
|
|
|
170
180
|
## Who is it not for?
|
|
171
181
|
|
|
172
182
|
For everybody, who ...
|
|
173
183
|
|
|
174
184
|
- ... is looking for a management approach which at the same time allows high-performance and/or parallel work with HDF5
|
|
175
|
-
- ... has established conventions and managements approaches in his or her community
|
|
185
|
+
- ... has already well-established conventions and managements approaches in his or her community
|
|
176
186
|
|
|
177
187
|
## Package Architecture/structure
|
|
178
188
|
|
|
@@ -185,8 +195,9 @@ of each other.
|
|
|
185
195
|
Current implementation highlights in the modules:
|
|
186
196
|
|
|
187
197
|
- The **wrapper** module adds functionality on top of the `h5py` package. It allows to include so-called standard names,
|
|
188
|
-
which are defined in conventions. And it implements
|
|
189
|
-
metadata from HDF5 to the user.
|
|
198
|
+
which are defined in conventions. And it implements interfaces, such as to the package `xarray`, which allows to carry
|
|
199
|
+
metadata from HDF5 to the user. Other high-level interfaces like `.rdf` allows assigning semantic information to the
|
|
200
|
+
HDF5 file.
|
|
190
201
|
- For the **database** module, `hdfDB` and `mongoDB` are implemented. The `hdfDB` module allows to use HDF5 files as a
|
|
191
202
|
database. The `mongoDB` module allows to use mongoDB as a database by mapping the metadata of HDF5 files to the
|
|
192
203
|
database.
|
|
@@ -258,9 +269,13 @@ specific to the features of the package:
|
|
|
258
269
|
- `pint_xarray>=0.2.1`: Working with units for usage with xarray
|
|
259
270
|
- `python-forge==18.6.0`: Used to update function signatures when using
|
|
260
271
|
the [standard attributes](https://h5rdmtoolbox.readthedocs.io/en/latest/conventions/standard_attributes_and_conventions.html)
|
|
272
|
+
- `pydantic`: Used to
|
|
273
|
+
validate [standard attributes](https://h5rdmtoolbox.readthedocs.io/en/latest/conventions/standard_attributes_and_conventions.html)
|
|
261
274
|
- `pyyaml>6.0.0`: Reading and writing of yaml files, e.g. metadata definitions (conventions). Note, lower versions
|
|
262
275
|
collide with python 3.11
|
|
263
276
|
- `requests`: Used to download files from the internet or validate URLs, e.g. metadata definitions (conventions)
|
|
277
|
+
- `rdflib`: Used to enable working with RDF
|
|
278
|
+
- `ontolutils`: Required to work with RDF and derive semantic description of HDF5 file content
|
|
264
279
|
|
|
265
280
|
#### Optional dependencies
|
|
266
281
|
|
|
@@ -285,7 +300,6 @@ Install optional dependencies by specifying them in square brackets after the pa
|
|
|
285
300
|
- `python-gitlab`: Access to gitlab repositories
|
|
286
301
|
- `pypandoc>=2.3`: Conversion of markdown files to html
|
|
287
302
|
|
|
288
|
-
|
|
289
303
|
## Citing the package
|
|
290
304
|
|
|
291
305
|
If you intend to use the package in your work, you may cite the paper in the
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
*Note, that the project is still under development!*
|
|
9
9
|
|
|
10
|
-
The "HDF5 Research Data Management Toolbox" (h5RDMtoolbox) is a
|
|
10
|
+
The "HDF5 Research Data Management Toolbox" (h5RDMtoolbox) is a Python package supporting everybody who is working with
|
|
11
11
|
HDF5 to achieve a sustainable data lifecycle which follows
|
|
12
12
|
the [FAIR (Findable, Accessible, Interoperable, Reusable)](https://www.nature.com/articles/sdata201618)
|
|
13
13
|
principles. It specifically supports the five main steps of *planning*, *collecting*, *analyzing*, *sharing* and
|
|
@@ -18,13 +18,14 @@ information of try the [quickstart using colab](#quickstart).
|
|
|
18
18
|
|
|
19
19
|
- Combining HDF5 and [xarray](https://docs.xarray.dev/en/stable/) to allow easy access to metadata and data during
|
|
20
20
|
analysis and processing (
|
|
21
|
-
see [here](https://h5rdmtoolbox.readthedocs.io/en/latest/gettingstarted/quickoverview.html#datasets-xarray-interface).
|
|
21
|
+
see [here](https://h5rdmtoolbox.readthedocs.io/en/latest/gettingstarted/quickoverview.html#datasets-xarray-interface)).
|
|
22
22
|
- Assigning [metadata with "globally unique and persistent identifiers"]() as required
|
|
23
|
-
by [F1 of the FAIR principles](https://www.go-fair.org/fair-principles/f1-meta-data-assigned-globally-unique-persistent-identifiers/)
|
|
24
|
-
|
|
23
|
+
by [F1 of the FAIR principles](https://www.go-fair.org/fair-principles/f1-meta-data-assigned-globally-unique-persistent-identifiers/).
|
|
24
|
+
This can be achieved by using [RDF triples](https://www.w3.org/RDF/), which removes "ambiguity in the meaning of your
|
|
25
|
+
published data".
|
|
25
26
|
- Define standard attributes through
|
|
26
27
|
[conventions](https://h5rdmtoolbox.readthedocs.io/en/latest/userguide/convention/index.html) and enforce users to use
|
|
27
|
-
|
|
28
|
+
certain attributes in their HDF5 files, such as units and a description, for example.
|
|
28
29
|
- Upload HDF5 files directly
|
|
29
30
|
to [repositories](https://h5rdmtoolbox.readthedocs.io/en/latest/userguide/repository/index.html)
|
|
30
31
|
like [Zenodo](https://zenodo.org/)
|
|
@@ -35,20 +36,21 @@ information of try the [quickstart using colab](#quickstart).
|
|
|
35
36
|
|
|
36
37
|
For everybody, who is...
|
|
37
38
|
|
|
38
|
-
- ... looking for a management approach for his or her data
|
|
39
|
-
- ... community has not yet established a stable convention
|
|
40
|
-
- ... working with small and big data, that fits into HDF5 files
|
|
41
|
-
- ... looking for an easy way to work with HDF5, especially through Jupyter Notebooks
|
|
42
|
-
- ...
|
|
43
|
-
- ...
|
|
44
|
-
- ...
|
|
39
|
+
- ... looking for a management approach for his or her data.
|
|
40
|
+
- ... community has not yet established a stable convention.
|
|
41
|
+
- ... working with small and big data, that fits into HDF5 files.
|
|
42
|
+
- ... looking for an easy way to work with HDF5, especially through Jupyter Notebooks.
|
|
43
|
+
- ... trying to integrate HDF5 with repositories and databases.
|
|
44
|
+
- ... wishing to enrich data semantically with the RDF standard.
|
|
45
|
+
- ... looking for a way to do all the above whiles not needing to learn a new syntax.
|
|
46
|
+
- ... new to HDF5 and wants to learn about it, especially with respect to the FAIR principles and data management.
|
|
45
47
|
|
|
46
48
|
## Who is it not for?
|
|
47
49
|
|
|
48
50
|
For everybody, who ...
|
|
49
51
|
|
|
50
52
|
- ... is looking for a management approach which at the same time allows high-performance and/or parallel work with HDF5
|
|
51
|
-
- ... has established conventions and managements approaches in his or her community
|
|
53
|
+
- ... has already well-established conventions and managements approaches in his or her community
|
|
52
54
|
|
|
53
55
|
## Package Architecture/structure
|
|
54
56
|
|
|
@@ -61,8 +63,9 @@ of each other.
|
|
|
61
63
|
Current implementation highlights in the modules:
|
|
62
64
|
|
|
63
65
|
- The **wrapper** module adds functionality on top of the `h5py` package. It allows to include so-called standard names,
|
|
64
|
-
which are defined in conventions. And it implements
|
|
65
|
-
metadata from HDF5 to the user.
|
|
66
|
+
which are defined in conventions. And it implements interfaces, such as to the package `xarray`, which allows to carry
|
|
67
|
+
metadata from HDF5 to the user. Other high-level interfaces like `.rdf` allows assigning semantic information to the
|
|
68
|
+
HDF5 file.
|
|
66
69
|
- For the **database** module, `hdfDB` and `mongoDB` are implemented. The `hdfDB` module allows to use HDF5 files as a
|
|
67
70
|
database. The `mongoDB` module allows to use mongoDB as a database by mapping the metadata of HDF5 files to the
|
|
68
71
|
database.
|
|
@@ -134,9 +137,13 @@ specific to the features of the package:
|
|
|
134
137
|
- `pint_xarray>=0.2.1`: Working with units for usage with xarray
|
|
135
138
|
- `python-forge==18.6.0`: Used to update function signatures when using
|
|
136
139
|
the [standard attributes](https://h5rdmtoolbox.readthedocs.io/en/latest/conventions/standard_attributes_and_conventions.html)
|
|
140
|
+
- `pydantic`: Used to
|
|
141
|
+
validate [standard attributes](https://h5rdmtoolbox.readthedocs.io/en/latest/conventions/standard_attributes_and_conventions.html)
|
|
137
142
|
- `pyyaml>6.0.0`: Reading and writing of yaml files, e.g. metadata definitions (conventions). Note, lower versions
|
|
138
143
|
collide with python 3.11
|
|
139
144
|
- `requests`: Used to download files from the internet or validate URLs, e.g. metadata definitions (conventions)
|
|
145
|
+
- `rdflib`: Used to enable working with RDF
|
|
146
|
+
- `ontolutils`: Required to work with RDF and derive semantic description of HDF5 file content
|
|
140
147
|
|
|
141
148
|
#### Optional dependencies
|
|
142
149
|
|
|
@@ -161,7 +168,6 @@ Install optional dependencies by specifying them in square brackets after the pa
|
|
|
161
168
|
- `python-gitlab`: Access to gitlab repositories
|
|
162
169
|
- `pypandoc>=2.3`: Conversion of markdown files to html
|
|
163
170
|
|
|
164
|
-
|
|
165
171
|
## Citing the package
|
|
166
172
|
|
|
167
173
|
If you intend to use the package in your work, you may cite the paper in the
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
"""h5rdtoolbox repository"""
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import appdirs
|
|
4
|
+
import logging
|
|
3
5
|
import pathlib
|
|
6
|
+
from logging.handlers import RotatingFileHandler
|
|
7
|
+
|
|
8
|
+
_logdir = pathlib.Path(appdirs.user_log_dir('h5rdmtoolbox'))
|
|
9
|
+
_logdir.mkdir(parents=True, exist_ok=True)
|
|
10
|
+
|
|
11
|
+
DEFAULT_LOGGING_LEVEL = logging.WARNING
|
|
12
|
+
_formatter = logging.Formatter(
|
|
13
|
+
'%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
|
|
14
|
+
datefmt='%Y-%m-%d_%H:%M:%S')
|
|
15
|
+
|
|
16
|
+
_stream_handler = logging.StreamHandler()
|
|
17
|
+
_stream_handler.setLevel(DEFAULT_LOGGING_LEVEL)
|
|
18
|
+
_stream_handler.setFormatter(_formatter)
|
|
19
|
+
|
|
20
|
+
_file_handler = RotatingFileHandler(_logdir / 'h5rdmtoolbox.log')
|
|
21
|
+
_file_handler.setLevel(logging.DEBUG) # log everything to file!
|
|
22
|
+
_file_handler.setFormatter(_formatter)
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__package__)
|
|
25
|
+
logger.addHandler(_stream_handler)
|
|
26
|
+
logger.addHandler(_file_handler)
|
|
27
|
+
|
|
28
|
+
import atexit
|
|
4
29
|
# noinspection PyUnresolvedReferences
|
|
5
30
|
import pint_xarray
|
|
6
31
|
import shutil
|
|
@@ -20,16 +45,24 @@ from . import utils
|
|
|
20
45
|
from .wrapper.core import lower, Lower, File, Group, Dataset
|
|
21
46
|
from . import warnings, errors
|
|
22
47
|
from .wrapper import jsonld
|
|
23
|
-
from .wrapper.
|
|
48
|
+
from .wrapper.lazy import lazy
|
|
49
|
+
from .wrapper.h5attr import Attribute
|
|
50
|
+
# from h5rdmtoolbox.wrapper.accessor import register_accessor
|
|
51
|
+
import json
|
|
52
|
+
from .wrapper.accessor import register_accessor
|
|
24
53
|
|
|
25
54
|
name = 'h5rdmtoolbox'
|
|
26
55
|
__this_dir__ = pathlib.Path(__file__).parent
|
|
27
56
|
__author__ = 'Matthias Probst'
|
|
28
57
|
__author_orcid__ = 'https://orcid.org/0000-0001-8729-0482'
|
|
29
58
|
|
|
30
|
-
logger = utils.create_tbx_logger('h5rdmtoolbox')
|
|
31
59
|
|
|
32
|
-
|
|
60
|
+
def get_package_meta():
|
|
61
|
+
"""Reads codemeta.json and returns it as dict"""
|
|
62
|
+
with open(__this_dir__ / '../codemeta.json', 'r') as f:
|
|
63
|
+
codemeta = json.loads(f.read())
|
|
64
|
+
return codemeta
|
|
65
|
+
|
|
33
66
|
|
|
34
67
|
cv_h5py = convention.Convention(name='h5py',
|
|
35
68
|
contact=__author_orcid__)
|
|
@@ -40,7 +73,7 @@ use(None)
|
|
|
40
73
|
|
|
41
74
|
|
|
42
75
|
def dump(src: Union[str, File, pathlib.Path],
|
|
43
|
-
**kwargs) -> None:
|
|
76
|
+
*args, **kwargs) -> None:
|
|
44
77
|
"""Call h5.dump() on the provided HDF5 file
|
|
45
78
|
|
|
46
79
|
Parameters
|
|
@@ -52,7 +85,7 @@ def dump(src: Union[str, File, pathlib.Path],
|
|
|
52
85
|
"""
|
|
53
86
|
if isinstance(src, File):
|
|
54
87
|
with File(src.hdf_filename) as h5:
|
|
55
|
-
return h5.dump(**kwargs)
|
|
88
|
+
return h5.dump(*args, **kwargs)
|
|
56
89
|
|
|
57
90
|
if isinstance(src, (str, pathlib.Path)):
|
|
58
91
|
pass
|
|
@@ -86,10 +119,58 @@ def dumps(src: Union[str, File, pathlib.Path]):
|
|
|
86
119
|
return h5.dumps()
|
|
87
120
|
|
|
88
121
|
|
|
122
|
+
def dump_jsonld(hdf_filename: Union[str, pathlib.Path],
|
|
123
|
+
skipND: int = 1,
|
|
124
|
+
structural: bool = True,
|
|
125
|
+
semantic: bool = True,
|
|
126
|
+
resolve_keys: bool = False,
|
|
127
|
+
**kwargs) -> str:
|
|
128
|
+
"""Dump the JSON-LD representation of the file. With semantic=True and structural=False, the JSON-LD
|
|
129
|
+
represents the semantic content only. To get a pure structural representation, set semantic=False, which
|
|
130
|
+
will ignore any RDF content. If both are set to True, the JSON-LD will contain both structural and semantic.
|
|
131
|
+
|
|
132
|
+
Parameters
|
|
133
|
+
----------
|
|
134
|
+
hdf_filename : str, pathlib.Path
|
|
135
|
+
the HDF5 file to dump.
|
|
136
|
+
skipND : int=1
|
|
137
|
+
Skip writing data of datasets with more then skipND dimensions. Only
|
|
138
|
+
considered if structural=True.
|
|
139
|
+
structural : bool=True
|
|
140
|
+
Include structural information in the JSON-LD output.
|
|
141
|
+
semantic : bool=True
|
|
142
|
+
Include semantic information in the JSON-LD output.
|
|
143
|
+
resolve_keys : bool=False
|
|
144
|
+
Resolve keys in the JSON-LD output. This is used when semantic=True.
|
|
145
|
+
If resolve_keys is False and an attribute name in the HDF5 file, which has
|
|
146
|
+
a predicate is different in its name from the predicate, the attribute name is used.
|
|
147
|
+
Example: an attribute "name" is associated with "foaf:lastName", then "name" is used
|
|
148
|
+
and "name": "https://xmlns.com/foaf/0.1/lastName" is added to the context.
|
|
149
|
+
|
|
150
|
+
"""
|
|
151
|
+
from .wrapper import jsonld
|
|
152
|
+
if not structural and not semantic:
|
|
153
|
+
raise ValueError('At least one of structural or semantic must be True.')
|
|
154
|
+
if structural and not semantic:
|
|
155
|
+
return jsonld.dump_file(hdf_filename, skipND=skipND)
|
|
156
|
+
with File(hdf_filename) as h5:
|
|
157
|
+
return jsonld.dumps(h5, structural=structural, resolve_keys=resolve_keys, **kwargs)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def get_filesize(hdf_filename: Union[str, pathlib.Path]) -> int:
|
|
161
|
+
"""Get the size of the HDF5 file in bytes"""
|
|
162
|
+
return utils.get_filesize(hdf_filename)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def get_checksum(hdf_filename: Union[str, pathlib.Path]) -> str:
|
|
166
|
+
"""Get the checksum of the HDF5 file"""
|
|
167
|
+
return utils.get_checksum(hdf_filename)
|
|
168
|
+
|
|
169
|
+
|
|
89
170
|
def register_dataset_decoder(decoder: Callable, decoder_name: str = None, overwrite: bool = False):
|
|
90
171
|
"""A decoder function takes a xarray.DataArray and a dataset as input and returns a xarray.DataArray
|
|
91
172
|
It is called after the dataset is loaded into memory and before being returned to the user. Be careful:
|
|
92
|
-
Multiple decoders can be registered and they are called in the order of registration. Hence, your decoder
|
|
173
|
+
Multiple decoders can be registered, and they are called in the order of registration. Hence, your decoder
|
|
93
174
|
may behave unexpectedly!
|
|
94
175
|
"""
|
|
95
176
|
from .wrapper import ds_decoder
|
|
@@ -105,6 +186,15 @@ def register_dataset_decoder(decoder: Callable, decoder_name: str = None, overwr
|
|
|
105
186
|
atexit_verbose = False
|
|
106
187
|
|
|
107
188
|
|
|
189
|
+
def set_loglevel(level: Union[int, str]):
|
|
190
|
+
"""Set the logging level of the h5rdmtoolbox logger"""
|
|
191
|
+
import logging
|
|
192
|
+
_logger = logging.getLogger('h5rdmtoolbox')
|
|
193
|
+
_logger.setLevel(level)
|
|
194
|
+
for h in _logger.handlers:
|
|
195
|
+
h.setLevel(level)
|
|
196
|
+
|
|
197
|
+
|
|
108
198
|
@atexit.register
|
|
109
199
|
def clean_temp_data(full: bool = False):
|
|
110
200
|
"""cleaning up the tmp directory"""
|
|
@@ -163,8 +253,7 @@ xr.set_options(display_expand_data=False)
|
|
|
163
253
|
|
|
164
254
|
__all__ = ('__version__', '__author__', '__author_orcid__',
|
|
165
255
|
'UserDir', 'use',
|
|
166
|
-
'File', 'Group', 'Dataset',
|
|
256
|
+
'File', 'Group', 'Dataset', 'Attribute',
|
|
167
257
|
'dump', 'dumps', 'cv_h5py', 'lower', 'Lower',
|
|
168
258
|
'set_config', 'get_config', 'get_ureg',
|
|
169
|
-
'Convention', '
|
|
170
|
-
'jsonld')
|
|
259
|
+
'Convention', 'jsonld', 'lazy')
|
|
@@ -17,26 +17,28 @@ def is_valid_logger_level(level: Union[str, int]):
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
CONFIG = {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
20
|
+
'return_xarray': True,
|
|
21
|
+
'advanced_shape_repr': True,
|
|
22
|
+
'natural_naming': True,
|
|
23
|
+
'hdf_compression': None, # 'gzip',
|
|
24
|
+
'hdf_compression_opts': None, # 5,
|
|
25
|
+
'adjusting_plotting_labels': True,
|
|
26
|
+
'xarray_unit_repr_in_plots': 'in',
|
|
27
|
+
'plotting_name_order': ('plot_name', 'long_name', 'standard_name'),
|
|
28
|
+
'require_unit': True, # datasets require units
|
|
29
|
+
'ureg_format': 'C~',
|
|
30
|
+
'init_logger_level': 'ERROR',
|
|
31
|
+
'dtime_fmt': '%Y%m%d%H%M%S%f',
|
|
32
|
+
'expose_user_prop_to_attrs': True,
|
|
33
|
+
'add_provenance': False,
|
|
34
|
+
'ignore_set_std_attr_err': False,
|
|
35
|
+
'auto_create_h5tbx_version': False, # automatically creates the group h5rdmtoolbox with the version attribute
|
|
36
|
+
'uuid_name': 'uuid', # attribute name used for UUIDs
|
|
37
|
+
# if a standard attribute is defined and cannot be retrieved because the value is invalid, ignore it:
|
|
38
|
+
'ignore_get_std_attr_err': False,
|
|
39
|
+
'allow_deleting_standard_attributes': False,
|
|
40
|
+
'ignore_none': False
|
|
41
|
+
}
|
|
40
42
|
|
|
41
43
|
_VALIDATORS = {
|
|
42
44
|
'return_xarray': lambda x: isinstance(x, bool),
|
|
@@ -54,8 +56,8 @@ _VALIDATORS = {
|
|
|
54
56
|
'expose_user_prop_to_attrs': lambda x: isinstance(x, bool),
|
|
55
57
|
'add_provenance': lambda x: isinstance(x, bool),
|
|
56
58
|
'ignore_set_std_attr_err': lambda x: isinstance(x, bool),
|
|
57
|
-
|
|
58
59
|
'ignore_get_std_attr_err': lambda x: isinstance(x, bool),
|
|
60
|
+
'ignore_none': lambda x: isinstance(x, bool)
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
|