h5rdmtoolbox 2.5.2__tar.gz → 2.5.3__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.
Files changed (150) hide show
  1. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/PKG-INFO +6 -6
  2. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/rdf.py +8 -0
  3. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/user/attributes.py +30 -9
  4. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/user/file.py +7 -6
  5. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox.egg-info/PKG-INFO +6 -6
  6. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox.egg-info/requires.txt +4 -4
  7. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/setup.cfg +2 -2
  8. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/ld/test_ld.py +54 -1
  9. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/ld/test_rdf.py +10 -0
  10. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_core.py +2 -2
  11. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/LICENSE +0 -0
  12. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/README.md +0 -0
  13. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/__init__.py +0 -0
  14. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/_cfg.py +0 -0
  15. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/_repr.py +0 -0
  16. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/_version.py +0 -0
  17. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/cli.py +0 -0
  18. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/consts.py +0 -0
  19. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/__init__.py +0 -0
  20. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/cfg.py +0 -0
  21. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/consts.py +0 -0
  22. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/core.py +0 -0
  23. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/errors.py +0 -0
  24. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/generate.py +0 -0
  25. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/ontology/__init__.py +0 -0
  26. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/ontology/h5ontocls.py +0 -0
  27. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/ontology/hdf_datatypes.py +0 -0
  28. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/references.py +0 -0
  29. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/standard_attributes.py +0 -0
  30. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/toolbox_validators.py +0 -0
  31. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/convention/utils.py +0 -0
  32. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/def_icon.png +0 -0
  33. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/fluid-v1.yml +0 -0
  34. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/h5tbx.yaml +0 -0
  35. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/id_icon.png +0 -0
  36. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/iri_icon.png +0 -0
  37. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/ld_icon.png +0 -0
  38. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/piv-v1.yml +0 -0
  39. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/style.css +0 -0
  40. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/tutorial_convention.yaml +0 -0
  41. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/tutorial_standard_name_table.yaml +0 -0
  42. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/data/type_icon.png +0 -0
  43. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/__init__.py +0 -0
  44. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/hdfdb/__init__.py +0 -0
  45. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/hdfdb/filedb.py +0 -0
  46. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/hdfdb/objdb.py +0 -0
  47. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/hdfdb/query.py +0 -0
  48. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/hdfdb/utils.py +0 -0
  49. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/interface.py +0 -0
  50. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/lazy.py +0 -0
  51. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/database/mongo.py +0 -0
  52. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/errors.py +0 -0
  53. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/extensions/__init__.py +0 -0
  54. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/extensions/magnitude.py +0 -0
  55. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/extensions/normalize.py +0 -0
  56. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/extensions/onto.py +0 -0
  57. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/extensions/units.py +0 -0
  58. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/extensions/vector.py +0 -0
  59. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/gui/__init__.py +0 -0
  60. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/gui/fairify.py +0 -0
  61. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/gui/src/__init__.py +0 -0
  62. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/gui/src/main.py +0 -0
  63. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/identifiers.py +0 -0
  64. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/layout/__init__.py +0 -0
  65. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/layout/core.py +0 -0
  66. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/__init__.py +0 -0
  67. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/globals.py +0 -0
  68. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/hdf/__init__.py +0 -0
  69. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/hdf/attributes.py +0 -0
  70. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/hdf/datasets.py +0 -0
  71. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/hdf/file.py +0 -0
  72. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/hdf/groups.py +0 -0
  73. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/shacl.py +0 -0
  74. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/user/__init__.py +0 -0
  75. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/user/datasets.py +0 -0
  76. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/user/groups.py +0 -0
  77. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/user/utils.py +0 -0
  78. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/ld/utils.py +0 -0
  79. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/plotting.py +0 -0
  80. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/protected_attributes.py +0 -0
  81. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/protocols.py +0 -0
  82. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/__init__.py +0 -0
  83. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/default_metamapper.py +0 -0
  84. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/interface.py +0 -0
  85. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/utils.py +0 -0
  86. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/zenodo/__init__.py +0 -0
  87. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/zenodo/core.py +0 -0
  88. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/zenodo/metadata.py +0 -0
  89. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/zenodo/tokens.py +0 -0
  90. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/repository/zenodo/utils.py +0 -0
  91. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/tutorial.py +0 -0
  92. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/user.py +0 -0
  93. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/utils.py +0 -0
  94. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/__init__.py +0 -0
  95. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/accessor.py +0 -0
  96. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/accessors/__init__.py +0 -0
  97. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/accessors/provenance.py +0 -0
  98. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/core.py +0 -0
  99. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/ds_decoder.py +0 -0
  100. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/h5attr.py +0 -0
  101. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/h5ext.py +0 -0
  102. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/h5utils.py +0 -0
  103. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/h5yaml.py +0 -0
  104. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/jsonld.py +0 -0
  105. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox/wrapper/xr2hdf.py +0 -0
  106. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox.egg-info/SOURCES.txt +0 -0
  107. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox.egg-info/dependency_links.txt +0 -0
  108. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox.egg-info/entry_points.txt +0 -0
  109. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/h5rdmtoolbox.egg-info/top_level.txt +0 -0
  110. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/pyproject.toml +0 -0
  111. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/setup.py +0 -0
  112. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/__init__.py +0 -0
  113. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/clean_zenodo_sandbox.py +0 -0
  114. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/__init__.py +0 -0
  115. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/test_convention_vfuncs.py +0 -0
  116. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/test_conventions.py +0 -0
  117. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/test_engmeta.py +0 -0
  118. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/test_references.py +0 -0
  119. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/test_toolbox_validators.py +0 -0
  120. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/conventions/test_utils.py +0 -0
  121. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/database/__init__.py +0 -0
  122. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/database/test_find_rdf.py +0 -0
  123. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/database/test_hdfDB.py +0 -0
  124. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/database/test_mongo.py +0 -0
  125. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/layouts/__init__.py +0 -0
  126. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/layouts/test_core.py +0 -0
  127. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/layouts/test_docs.py +0 -0
  128. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/ld/__init__.py +0 -0
  129. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/ld/test_shacl.py +0 -0
  130. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/ld/test_user_graph.py +0 -0
  131. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/ld/test_utils.py +0 -0
  132. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/repository/__init__.py +0 -0
  133. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/repository/test_zenodo.py +0 -0
  134. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_cli.py +0 -0
  135. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_config.py +0 -0
  136. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_extensions.py +0 -0
  137. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_identifiers.py +0 -0
  138. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_plotting.py +0 -0
  139. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_repr.py +0 -0
  140. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_user.py +0 -0
  141. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_utils.py +0 -0
  142. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_version.py +0 -0
  143. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/test_xarray_export.py +0 -0
  144. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/__init__.py +0 -0
  145. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_dump.py +0 -0
  146. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_file.py +0 -0
  147. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_h5ext.py +0 -0
  148. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_lazy.py +0 -0
  149. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_namespaces.py +0 -0
  150. {h5rdmtoolbox-2.5.2 → h5rdmtoolbox-2.5.3}/tests/wrapper/test_xr2df.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: h5rdmtoolbox
3
- Version: 2.5.2
3
+ Version: 2.5.3
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
@@ -54,7 +54,7 @@ Provides-Extra: test
54
54
  Requires-Dist: pytest>=8.3.3; extra == "test"
55
55
  Requires-Dist: pytest-cov>=5.0.0; extra == "test"
56
56
  Requires-Dist: pylint; extra == "test"
57
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "test"
57
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "test"
58
58
  Requires-Dist: mongomock==4.1.2; extra == "test"
59
59
  Requires-Dist: xmltodict<=0.13.0; extra == "test"
60
60
  Requires-Dist: scipy>=1.10.1; extra == "test"
@@ -76,7 +76,7 @@ Requires-Dist: pymongo<=4.10.1,>=4.2.0; extra == "docs"
76
76
  Requires-Dist: pytest>=8.3.3; extra == "docs"
77
77
  Requires-Dist: pytest-cov>=5.0.0; extra == "docs"
78
78
  Requires-Dist: pylint; extra == "docs"
79
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "docs"
79
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "docs"
80
80
  Requires-Dist: mongomock==4.1.2; extra == "docs"
81
81
  Requires-Dist: xmltodict<=0.13.0; extra == "docs"
82
82
  Requires-Dist: scipy>=1.10.1; extra == "docs"
@@ -102,7 +102,7 @@ Requires-Dist: PyQt5==5.15.10; extra == "complete"
102
102
  Requires-Dist: pytest>=8.3.3; extra == "complete"
103
103
  Requires-Dist: pytest-cov>=5.0.0; extra == "complete"
104
104
  Requires-Dist: pylint; extra == "complete"
105
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "complete"
105
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "complete"
106
106
  Requires-Dist: mongomock==4.1.2; extra == "complete"
107
107
  Requires-Dist: xmltodict<=0.13.0; extra == "complete"
108
108
  Requires-Dist: scipy>=1.10.1; extra == "complete"
@@ -120,7 +120,7 @@ Requires-Dist: PyQt5==5.15.10; extra == "complete-with-docs"
120
120
  Requires-Dist: pytest>=8.3.3; extra == "complete-with-docs"
121
121
  Requires-Dist: pytest-cov>=5.0.0; extra == "complete-with-docs"
122
122
  Requires-Dist: pylint; extra == "complete-with-docs"
123
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "complete-with-docs"
123
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "complete-with-docs"
124
124
  Requires-Dist: mongomock==4.1.2; extra == "complete-with-docs"
125
125
  Requires-Dist: xmltodict<=0.13.0; extra == "complete-with-docs"
126
126
  Requires-Dist: scipy>=1.10.1; extra == "complete-with-docs"
@@ -141,7 +141,7 @@ Requires-Dist: pymongo<=4.10.1,>=4.2.0; extra == "complete-with-docs"
141
141
  Requires-Dist: pytest>=8.3.3; extra == "complete-with-docs"
142
142
  Requires-Dist: pytest-cov>=5.0.0; extra == "complete-with-docs"
143
143
  Requires-Dist: pylint; extra == "complete-with-docs"
144
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "complete-with-docs"
144
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "complete-with-docs"
145
145
  Requires-Dist: mongomock==4.1.2; extra == "complete-with-docs"
146
146
  Requires-Dist: xmltodict<=0.13.0; extra == "complete-with-docs"
147
147
  Requires-Dist: scipy>=1.10.1; extra == "complete-with-docs"
@@ -729,6 +729,14 @@ class FileIRIDict(Dict):
729
729
  def object(self):
730
730
  return self[RDF_FILE_OBJECT_ATTR_NAME]
731
731
 
732
+ @object.deleter
733
+ def object(self):
734
+ iri_data_data = self._attr.get(RDF_FILE_OBJECT_ATTR_NAME, None)
735
+ if iri_data_data is None:
736
+ iri_data_data = {}
737
+ iri_data_data.pop(self._attr_name, None)
738
+ self._attr[RDF_FILE_OBJECT_ATTR_NAME] = iri_data_data
739
+
732
740
  @object.setter
733
741
  def object(self, value):
734
742
  set_object(attr=self._attr,
@@ -25,7 +25,7 @@ def _is_date_str(value: str):
25
25
  # quick check, that first character is a digit
26
26
  if not re.match(r"^\d", value):
27
27
  return None
28
- # reject version-like strings composed only of digits and dots, e.g. "2.5.2"
28
+ # reject version-like strings composed only of digits and dots, e.g. "2.5.3"
29
29
  if re.match(r"^\d+(?:\.\d+)+$", value):
30
30
  return None
31
31
  try:
@@ -94,14 +94,35 @@ def process_file_attribute(parent_obj, name, data, graph, file_uri: Union[URIRef
94
94
 
95
95
  elif isinstance(rdf_user_object, dict):
96
96
  try:
97
- obj_graph = Graph().parse(data=json.loads(json.dumps(rdf_user_object)), format="json-ld")
98
- # relate the obj_graph with the predicate:
99
- _subjects = set(obj_graph.subjects())
100
- if len(_subjects) != 1:
101
- warnings.warn(f"Error parsing JSON-LD object for attribute. name={name}, data={data}. "
102
- f"Expected exactly one subject, found {len(_subjects)}")
103
- obj_graph.add((file_uri, to_uriref(rdf_user_predicate, blank_node_iri_base),
104
- to_uriref(list(_subjects)[0], blank_node_iri_base)))
97
+ jsonld_dict = json.loads(json.dumps(rdf_user_object))
98
+ obj_graph = Graph().parse(data=jsonld_dict,
99
+ format="json-ld")
100
+
101
+ if "@graph" not in jsonld_dict:
102
+ use_subject = jsonld_dict.get("@id")
103
+ obj_graph.add((file_uri, to_uriref(rdf_user_predicate, blank_node_iri_base),
104
+ to_uriref(use_subject, blank_node_iri_base)))
105
+ else:
106
+ _graph_entities = jsonld_dict["@graph"]
107
+ if len(_graph_entities) == 1:
108
+ use_subject = _graph_entities[0].get("@id")
109
+ obj_graph.add((file_uri, to_uriref(rdf_user_predicate, blank_node_iri_base),
110
+ to_uriref(use_subject, blank_node_iri_base)))
111
+ else:
112
+ for _entity in _graph_entities:
113
+ if RDF.type in _entity and _entity[RDF.type] == str(SCHEMA.PropertyValue):
114
+ use_subject = _entity.get("@id")
115
+ obj_graph.add((file_uri, to_uriref(rdf_user_predicate, blank_node_iri_base),
116
+ to_uriref(use_subject, blank_node_iri_base)))
117
+
118
+ # obj_graph = Graph().parse(data=json.loads(json.dumps(rdf_user_object)), format="json-ld")
119
+ # # relate the obj_graph with the predicate:
120
+ # _subjects = set(obj_graph.subjects())
121
+ # if len(_subjects) != 1:
122
+ # warnings.warn(f"Error parsing JSON-LD object for attribute. name={name}, data={data}. "
123
+ # f"Expected exactly one subject, found {len(_subjects)}")
124
+ # obj_graph.add((file_uri, to_uriref(rdf_user_predicate, blank_node_iri_base),
125
+ # to_uriref(list(_subjects)[0], blank_node_iri_base)))
105
126
  graph += obj_graph
106
127
  except Exception as e:
107
128
  warnings.warn(
@@ -2,6 +2,7 @@ from typing import Optional
2
2
  from typing import Union
3
3
 
4
4
  import h5py
5
+ import numpy as np
5
6
  import rdflib
6
7
  from ontolutils.namespacelib.hdf5 import HDF5
7
8
  from rdflib import Graph
@@ -38,16 +39,16 @@ def get_ld(
38
39
  file_node = get_file_bnode(source, file_uri=file_uri)
39
40
 
40
41
  if source.name == "/":
41
- file_rdf = file_frdf_manager.type
42
+ file_rdf_type = file_frdf_manager.type
42
43
  else:
43
- file_rdf = None
44
+ file_rdf_type = None
44
45
 
45
- if file_rdf:
46
- if isinstance(file_rdf, list):
47
- for rdf_type in file_rdf:
46
+ if file_rdf_type is not None:
47
+ if isinstance(file_rdf_type, list) or isinstance(file_rdf_type, np.ndarray):
48
+ for rdf_type in file_rdf_type:
48
49
  graph.add((file_node, rdflib.RDF.type, to_uriref(rdf_type, file_uri)))
49
50
  else:
50
- graph.add((file_node, rdflib.RDF.type, to_uriref(file_rdf, file_uri)))
51
+ graph.add((file_node, rdflib.RDF.type, to_uriref(file_rdf_type, file_uri)))
51
52
 
52
53
  for ak, av in source.attrs.items():
53
54
  process_file_attribute(source, ak, av, graph, file_node, blank_node_iri_base=file_uri)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: h5rdmtoolbox
3
- Version: 2.5.2
3
+ Version: 2.5.3
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
@@ -54,7 +54,7 @@ Provides-Extra: test
54
54
  Requires-Dist: pytest>=8.3.3; extra == "test"
55
55
  Requires-Dist: pytest-cov>=5.0.0; extra == "test"
56
56
  Requires-Dist: pylint; extra == "test"
57
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "test"
57
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "test"
58
58
  Requires-Dist: mongomock==4.1.2; extra == "test"
59
59
  Requires-Dist: xmltodict<=0.13.0; extra == "test"
60
60
  Requires-Dist: scipy>=1.10.1; extra == "test"
@@ -76,7 +76,7 @@ Requires-Dist: pymongo<=4.10.1,>=4.2.0; extra == "docs"
76
76
  Requires-Dist: pytest>=8.3.3; extra == "docs"
77
77
  Requires-Dist: pytest-cov>=5.0.0; extra == "docs"
78
78
  Requires-Dist: pylint; extra == "docs"
79
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "docs"
79
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "docs"
80
80
  Requires-Dist: mongomock==4.1.2; extra == "docs"
81
81
  Requires-Dist: xmltodict<=0.13.0; extra == "docs"
82
82
  Requires-Dist: scipy>=1.10.1; extra == "docs"
@@ -102,7 +102,7 @@ Requires-Dist: PyQt5==5.15.10; extra == "complete"
102
102
  Requires-Dist: pytest>=8.3.3; extra == "complete"
103
103
  Requires-Dist: pytest-cov>=5.0.0; extra == "complete"
104
104
  Requires-Dist: pylint; extra == "complete"
105
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "complete"
105
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "complete"
106
106
  Requires-Dist: mongomock==4.1.2; extra == "complete"
107
107
  Requires-Dist: xmltodict<=0.13.0; extra == "complete"
108
108
  Requires-Dist: scipy>=1.10.1; extra == "complete"
@@ -120,7 +120,7 @@ Requires-Dist: PyQt5==5.15.10; extra == "complete-with-docs"
120
120
  Requires-Dist: pytest>=8.3.3; extra == "complete-with-docs"
121
121
  Requires-Dist: pytest-cov>=5.0.0; extra == "complete-with-docs"
122
122
  Requires-Dist: pylint; extra == "complete-with-docs"
123
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "complete-with-docs"
123
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "complete-with-docs"
124
124
  Requires-Dist: mongomock==4.1.2; extra == "complete-with-docs"
125
125
  Requires-Dist: xmltodict<=0.13.0; extra == "complete-with-docs"
126
126
  Requires-Dist: scipy>=1.10.1; extra == "complete-with-docs"
@@ -141,7 +141,7 @@ Requires-Dist: pymongo<=4.10.1,>=4.2.0; extra == "complete-with-docs"
141
141
  Requires-Dist: pytest>=8.3.3; extra == "complete-with-docs"
142
142
  Requires-Dist: pytest-cov>=5.0.0; extra == "complete-with-docs"
143
143
  Requires-Dist: pylint; extra == "complete-with-docs"
144
- Requires-Dist: ssnolib<3.0.0,>=2.1.0.2; extra == "complete-with-docs"
144
+ Requires-Dist: ssnolib<3.0.0,>=2.2.0.0; extra == "complete-with-docs"
145
145
  Requires-Dist: mongomock==4.1.2; extra == "complete-with-docs"
146
146
  Requires-Dist: xmltodict<=0.13.0; extra == "complete-with-docs"
147
147
  Requires-Dist: scipy>=1.10.1; extra == "complete-with-docs"
@@ -25,7 +25,7 @@ PyQt5==5.15.10
25
25
  pytest>=8.3.3
26
26
  pytest-cov>=5.0.0
27
27
  pylint
28
- ssnolib<3.0.0,>=2.1.0.2
28
+ ssnolib<3.0.0,>=2.2.0.0
29
29
  mongomock==4.1.2
30
30
  xmltodict<=0.13.0
31
31
  scipy>=1.10.1
@@ -42,7 +42,7 @@ PyQt5==5.15.10
42
42
  pytest>=8.3.3
43
43
  pytest-cov>=5.0.0
44
44
  pylint
45
- ssnolib<3.0.0,>=2.1.0.2
45
+ ssnolib<3.0.0,>=2.2.0.0
46
46
  mongomock==4.1.2
47
47
  xmltodict<=0.13.0
48
48
  scipy>=1.10.1
@@ -75,7 +75,7 @@ pymongo<=4.10.1,>=4.2.0
75
75
  pytest>=8.3.3
76
76
  pytest-cov>=5.0.0
77
77
  pylint
78
- ssnolib<3.0.0,>=2.1.0.2
78
+ ssnolib<3.0.0,>=2.2.0.0
79
79
  mongomock==4.1.2
80
80
  scipy>=1.10.1
81
81
  scikit-image>=0.21.0
@@ -103,7 +103,7 @@ pypandoc>=1.11
103
103
  pytest>=8.3.3
104
104
  pytest-cov>=5.0.0
105
105
  pylint
106
- ssnolib<3.0.0,>=2.1.0.2
106
+ ssnolib<3.0.0,>=2.2.0.0
107
107
  mongomock==4.1.2
108
108
  xmltodict<=0.13.0
109
109
  scipy>=1.10.1
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = h5rdmtoolbox
3
- version = 2.5.2
3
+ version = 2.5.3
4
4
  author = Matthias Probst
5
5
  author_email = matth.probst@gmail.com
6
6
  description = Supporting a FAIR Research Data lifecycle using Python and HDF5.
@@ -62,7 +62,7 @@ test =
62
62
  pytest>=8.3.3
63
63
  pytest-cov>=5.0.0
64
64
  pylint
65
- ssnolib >= 2.1.0.2, < 3.0.0
65
+ ssnolib >= 2.2.0.0, < 3.0.0
66
66
  mongomock==4.1.2
67
67
  xmltodict<=0.13.0
68
68
  scipy>=1.10.1 # provides netcdf4
@@ -7,7 +7,9 @@ import ontolutils
7
7
  import rdflib
8
8
  import ssnolib
9
9
  from ontolutils import namespaces, urirefs, Thing
10
+ from ontolutils.ex import dcat
10
11
  from ontolutils.namespacelib import M4I
12
+ from ontolutils.namespacelib import SCHEMA
11
13
  from rdflib import DCAT
12
14
 
13
15
  import h5rdmtoolbox as h5tbx
@@ -477,7 +479,7 @@ WHERE {
477
479
  h5.create_dataset('test_dataset', shape=(3,))
478
480
  grp = h5.create_group('grp')
479
481
  grp.attrs['test', sn_iri] = 'test'
480
- grp.attrs['description', ontolutils.SCHEMA.commentCount] = 5.3
482
+ grp.attrs['description', SCHEMA.commentCount] = 5.3
481
483
  self.assertIsInstance(grp.attrs['description'], np.floating)
482
484
 
483
485
  sub_grp = grp.create_group('Fan')
@@ -826,6 +828,17 @@ WHERE {
826
828
  sorted("dcat:Dataset")
827
829
  )
828
830
 
831
+ def test_frdf_multiple_object(self):
832
+ with h5tbx.File() as h5:
833
+ h5.attrs["thing"] = "Thing"
834
+ h5.frdf["thing"].predicate = SCHEMA.about
835
+ h5.frdf["thing"].object = "https://example.org/Thing1"
836
+ h5.attrs["another_thing"] = "Thing 2"
837
+ h5.frdf["another_thing"].predicate = SCHEMA.about
838
+ h5.frdf["another_thing"].object = "https://example.org/Thing2"
839
+
840
+ print(h5.serialize("ttl", structural=False))
841
+
829
842
  def test_only_subject(self):
830
843
  with h5tbx.File() as h5:
831
844
  g = h5.create_group("contact")
@@ -849,3 +862,43 @@ WHERE {
849
862
  bindings = res.bindings
850
863
  self.assertEqual(len(bindings), 1)
851
864
  self.assertEqual(str(bindings[0][rdflib.Variable("relation")]), "https://orcid.org/0000-0001-8729-0482")
865
+
866
+ def test_setting_nested_objects(self):
867
+ filename = h5tbx.utils.generate_temporary_filename(suffix=".hdf")
868
+ with h5tbx.File(filename, "w") as h5:
869
+ h5.attrs["snt"] = "123"
870
+ h5.frdf["snt"].predicate = "https://matthiasprobst.github.io/ssno#usesStandardNameTable"
871
+ h5.frdf["snt"].object = "https://zenodo.org/records/17572275/files/opencefadb_standard_name_table.jsonld"
872
+ del h5.frdf["snt"].object
873
+ h5.frdf["snt"].object = ssnolib.StandardNameTable(
874
+ id="https://doi.org/10.5281/zenodo.17572275#StandardNameTable",
875
+ dataset=dcat.Dataset(
876
+ id="https://doi.org/10.5281/zenodo.17572275",
877
+ distribution=dcat.Distribution(
878
+ id="https://doi.org/10.5281/zenodo.17572275#Distribution",
879
+ download_URL="https://zenodo.org/records/17572275/files/opencefadb_standard_name_table.jsonld"
880
+ )
881
+ )
882
+ )
883
+ ttl = f"""@prefix dcat: <http://www.w3.org/ns/dcat#> .
884
+ @prefix ssno: <https://matthiasprobst.github.io/ssno#> .
885
+
886
+ <https://example.org#{filename.name}> ssno:usesStandardNameTable <https://doi.org/10.5281/zenodo.17572275#StandardNameTable> .
887
+
888
+ <https://doi.org/10.5281/zenodo.17572275> a dcat:Dataset ;
889
+ dcat:distribution <https://doi.org/10.5281/zenodo.17572275#Distribution> .
890
+
891
+ <https://doi.org/10.5281/zenodo.17572275#Distribution> a dcat:Distribution ;
892
+ dcat:downloadURL <https://zenodo.org/records/17572275/files/opencefadb_standard_name_table.jsonld> .
893
+
894
+ <https://doi.org/10.5281/zenodo.17572275#StandardNameTable> a ssno:StandardNameTable ;
895
+ ssno:dataset <https://doi.org/10.5281/zenodo.17572275> .
896
+
897
+ """
898
+ g1 = rdflib.Graph().parse(data=ttl, format="ttl")
899
+ actual_ttl = h5.serialize("ttl", structural=False, file_uri=f"https://example.org#")
900
+ g2 = rdflib.Graph().parse(data=actual_ttl,
901
+ format="ttl")
902
+ g1ttl = g1.serialize(format="ttl")
903
+ g2ttl = g2.serialize(format="ttl")
904
+ self.assertEqual(g1ttl, g2ttl)
@@ -309,6 +309,16 @@ local:SubjectNode a local:BNodeType1,
309
309
 
310
310
  h5.rdf.type = ['https://example.org/validURI', 'https://example.org/validURI2']
311
311
  self.assertEqual(h5.rdf.type, ['https://example.org/validURI', 'https://example.org/validURI2'])
312
+ self.assertEqual("""@prefix foaf: <http://xmlns.com/foaf/0.1/> .
313
+ @prefix schema: <https://schema.org/> .
314
+
315
+ <https://example.org/validURI> a <https://example.org/validURI>,
316
+ <https://example.org/validURI2> ;
317
+ foaf:title "test" .
318
+
319
+ [] schema:about <https://example.org/validURI> .
320
+
321
+ """, h5.serialize("ttl", structural=False))
312
322
 
313
323
  # note, that the following will not overwrite, but append the value:
314
324
  h5.rdf.type = 'https://example.org/validURI3'
@@ -56,14 +56,14 @@ class TestCore(unittest.TestCase):
56
56
  hdf:member [ a hdf:Group,
57
57
  schema:SoftwareSourceCode ;
58
58
  hdf:attribute [ a hdf:StringAttribute ;
59
- hdf:data "2.5.2" ;
59
+ hdf:data "2.5.3" ;
60
60
  hdf:name "__h5rdmtoolbox_version__" ],
61
61
  [ a hdf:StringAttribute ;
62
62
  hdf:data "https://github.com/matthiasprobst/h5RDMtoolbox" ;
63
63
  hdf:name "code_repository" ] ;
64
64
  hdf:name "/h5rdmtoolbox" ;
65
65
  schema:codeRepository <https://github.com/matthiasprobst/h5RDMtoolbox> ;
66
- schema:softwareVersion "2.5.2" ] ;
66
+ schema:softwareVersion "2.5.3" ] ;
67
67
  hdf:name "/" ] .
68
68
 
69
69
  """)
File without changes
File without changes
File without changes