bam-masterdata 0.2.0__tar.gz → 0.3.1__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 (135) hide show
  1. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/PKG-INFO +3 -2
  2. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/_version.py +9 -4
  3. bam_masterdata-0.3.1/bam_masterdata/checker/__init__.py +1 -0
  4. bam_masterdata-0.3.1/bam_masterdata/checker/checker.py +101 -0
  5. bam_masterdata-0.3.1/bam_masterdata/checker/masterdata_validator.py +578 -0
  6. bam_masterdata-0.3.1/bam_masterdata/checker/source_loader.py +134 -0
  7. bam_masterdata-0.3.1/bam_masterdata/checker/validation_rules/all_validation_rules.json +80 -0
  8. bam_masterdata-0.3.1/bam_masterdata/checker/validation_rules/excel_validation_rules.json +75 -0
  9. bam_masterdata-0.3.1/bam_masterdata/checker/validation_rules/validation_rules.json +119 -0
  10. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/cli.py +173 -56
  11. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/entities_to_excel.py +16 -36
  12. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/entities_to_rdf.py +5 -55
  13. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/fill_masterdata.py +76 -95
  14. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/collection_types.py +9 -4
  15. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/dataset_types.py +27 -22
  16. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/object_types.py +315 -90
  17. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/excel/excel_to_entities.py +157 -139
  18. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/logger.py +8 -7
  19. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/metadata/definitions.py +46 -18
  20. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/metadata/entities.py +89 -17
  21. bam_masterdata-0.3.1/bam_masterdata/metadata/entities_dict.py +175 -0
  22. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/utils/__init__.py +5 -0
  23. bam_masterdata-0.3.1/bam_masterdata/utils/paths.py +43 -0
  24. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/utils/utils.py +102 -15
  25. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/validation_rules/excel_validation_rules.json +4 -2
  26. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/PKG-INFO +3 -2
  27. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/SOURCES.txt +33 -4
  28. bam_masterdata-0.3.1/docs/assets/drawio/checker-structure.drawio +335 -0
  29. bam_masterdata-0.3.1/tests/__init__.py +0 -0
  30. bam_masterdata-0.3.1/tests/checker/test_source_loader.py +256 -0
  31. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/cli/test_entities_to_excel.py +0 -14
  32. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/cli/test_entities_to_rdf.py +1 -1
  33. bam_masterdata-0.3.1/tests/data/checker/datamodel_test/collection_types.py +190 -0
  34. bam_masterdata-0.3.1/tests/data/checker/datamodel_test/dataset_types.py +86 -0
  35. bam_masterdata-0.3.1/tests/data/checker/datamodel_test/object_types.py +60 -0
  36. bam_masterdata-0.3.1/tests/data/checker/example01_codedoesnoteexists.xlsx +0 -0
  37. bam_masterdata-0.3.1/tests/data/checker/example02_codeexists_proptype_datatypechanged.xlsx +0 -0
  38. bam_masterdata-0.3.1/tests/data/checker/example03_codeexists_proptype_contvoccodechanged.xlsx +0 -0
  39. bam_masterdata-0.3.1/tests/data/checker/example04_codeexists_proptype_objectcodechanged.xlsx +0 -0
  40. bam_masterdata-0.3.1/tests/data/checker/example05_codeexists_proptype_warningdefschanged.xlsx +0 -0
  41. bam_masterdata-0.3.1/tests/data/checker/example06_codeexists_proptype_vocobjcodemiss.xlsx +0 -0
  42. bam_masterdata-0.3.1/tests/data/checker/example07_codeexists_objtype_warningdefschanged.xlsx +0 -0
  43. bam_masterdata-0.3.1/tests/data/checker/example08_codeexists_objtype_assignprop_listcodeschanged_add.xlsx +0 -0
  44. bam_masterdata-0.3.1/tests/data/checker/example09_codeexists_objtype_assignprop_listcodeschanged_del.xlsx +0 -0
  45. bam_masterdata-0.3.1/tests/data/checker/example10_codeexists_objtype_assignprop_codedoesnotexists.xlsx +0 -0
  46. bam_masterdata-0.3.1/tests/data/checker/example11_codeexists_objtype_assignprop_listcodeschanged_datatypechanged.xlsx +0 -0
  47. bam_masterdata-0.3.1/tests/data/checker/example12_codeexists_objtype_assignprop_listcodeschanged_warningdefschanged.xlsx +0 -0
  48. bam_masterdata-0.3.1/tests/data/checker/example13_codeexists_objtype_assignprop_coincide2objects.xlsx +0 -0
  49. bam_masterdata-0.3.1/tests/data/checker/example_incoming_excel.xlsx +0 -0
  50. bam_masterdata-0.3.1/tests/data/checker/example_incoming_python/collection_types.py +40 -0
  51. bam_masterdata-0.3.1/tests/data/checker/example_incoming_python/dataset_types.py +36 -0
  52. bam_masterdata-0.3.1/tests/data/checker/example_incoming_python/object_types.py +20 -0
  53. bam_masterdata-0.3.1/tests/data/checker/masterdata_example.xlsx +0 -0
  54. bam_masterdata-0.3.1/tests/data/checker/masterdata_excel_output.json +562 -0
  55. bam_masterdata-0.3.1/tests/data/checker/masterdata_python_output.json +562 -0
  56. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/excel/test_excel_to_entities.py +52 -28
  57. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/metadata/test_definitions.py +78 -9
  58. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/metadata/test_entities.py +3 -1
  59. bam_masterdata-0.3.1/tests/metadata/test_entities_dict.py +259 -0
  60. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/test_logger.py +0 -6
  61. bam_masterdata-0.3.1/tests/utils/test_paths.py +14 -0
  62. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/utils/test_utils.py +24 -0
  63. bam_masterdata-0.2.0/bam_masterdata/checker/__init__.py +0 -1
  64. bam_masterdata-0.2.0/bam_masterdata/checker/checker.py +0 -45
  65. bam_masterdata-0.2.0/bam_masterdata/checker/datamodel_loader.py +0 -9
  66. bam_masterdata-0.2.0/bam_masterdata/checker/masterdata_validator.py +0 -34
  67. bam_masterdata-0.2.0/bam_masterdata/checker/source_loader.py +0 -27
  68. bam_masterdata-0.2.0/bam_masterdata/cli/entities_to_json.py +0 -67
  69. bam_masterdata-0.2.0/bam_masterdata/datamodel/property_types.py +0 -6517
  70. bam_masterdata-0.2.0/tests/cli/test_entities_to_json.py +0 -42
  71. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.coveragerc +0 -0
  72. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/actions.yml +0 -0
  73. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/coveralls.yml +0 -0
  74. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/mkdocs-deploy.yml +0 -0
  75. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/publish.yml +0 -0
  76. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.gitignore +0 -0
  77. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.vscode/settings.json +0 -0
  78. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/LICENSE +0 -0
  79. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/README.md +0 -0
  80. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/__init__.py +0 -0
  81. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/__init__.py +0 -0
  82. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/__init__.py +0 -0
  83. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/vocabulary_types.py +0 -0
  84. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/excel/__init__.py +0 -0
  85. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/metadata/__init__.py +0 -0
  86. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/openbis/__init__.py +0 -0
  87. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/openbis/get_entities.py +0 -0
  88. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/openbis/login.py +0 -0
  89. /bam_masterdata-0.2.0/tests/__init__.py → /bam_masterdata-0.3.1/bam_masterdata/validation_rules/validation_rules.json +0 -0
  90. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/dependency_links.txt +0 -0
  91. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/entry_points.txt +0 -0
  92. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/requires.txt +0 -0
  93. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/top_level.txt +0 -0
  94. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_transparent.png +0 -0
  95. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_transparent_text.png +0 -0
  96. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_transparent_text.svg +0 -0
  97. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_white.png +0 -0
  98. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_white_text.png +0 -0
  99. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/datastore-logo-white.png +0 -0
  100. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/datastore-logo.png +0 -0
  101. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/drawio/masterdata-workflow.drawio +0 -0
  102. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/drawio/masterdata-workflow.drawio.png +0 -0
  103. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-Light.ttf +0 -0
  104. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-LightItalic.ttf +0 -0
  105. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-Medium.ttf +0 -0
  106. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-MediumItalic.ttf +0 -0
  107. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/explanations/data-store.md +0 -0
  108. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/explanations/openbis.md +0 -0
  109. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/explanations/pybis.md +0 -0
  110. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/overview.md +0 -0
  111. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/collections.md +0 -0
  112. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/datasets.md +0 -0
  113. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/objects.md +0 -0
  114. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/objects_props.md +0 -0
  115. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/parent_child.md +0 -0
  116. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/projects.md +0 -0
  117. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/searches.md +0 -0
  118. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/setup.md +0 -0
  119. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/spaces.md +0 -0
  120. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/index.md +0 -0
  121. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/references/collection.md +0 -0
  122. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/references/controlled-vocabulary.md +0 -0
  123. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/references/dataset.md +0 -0
  124. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/stylesheets/extra.css +0 -0
  125. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/tutorials/create-masterdata.md +0 -0
  126. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/tutorials/pybis.md +0 -0
  127. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/mkdocs.yml +0 -0
  128. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/pyproject.toml +0 -0
  129. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/scripts/install_python_dependencies.sh +0 -0
  130. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/scripts/pkg_size.py +0 -0
  131. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/setup.cfg +0 -0
  132. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/setup.py +0 -0
  133. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/conftest.py +0 -0
  134. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/data/utils/example_prop_types_1.py +0 -0
  135. {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/data/utils/example_prop_types_2.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: bam-masterdata
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: The BAM Data Store utility tools and masterdata models wrapped in a Python package with a front-end web interface.
5
5
  Author-email: BAM Data Store <datastore@bam.de>
6
6
  Maintainer-email: "Jose M. Pizarro" <jose.pizarro-blanco@bam.de>
@@ -57,6 +57,7 @@ Provides-Extra: docu
57
57
  Requires-Dist: mkdocs-material; extra == "docu"
58
58
  Requires-Dist: mkdocs-click; extra == "docu"
59
59
  Requires-Dist: mkdocstrings-python; extra == "docu"
60
+ Dynamic: license-file
60
61
 
61
62
  <h1 align="center">
62
63
  <picture>
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '0.2.0'
16
- __version_tuple__ = version_tuple = (0, 2, 0)
20
+ __version__ = version = '0.3.1'
21
+ __version_tuple__ = version_tuple = (0, 3, 1)
@@ -0,0 +1 @@
1
+ from .checker import MasterdataChecker, no_validation_errors
@@ -0,0 +1,101 @@
1
+ from bam_masterdata.checker.masterdata_validator import MasterdataValidator
2
+ from bam_masterdata.checker.source_loader import SourceLoader
3
+ from bam_masterdata.logger import logger
4
+ from bam_masterdata.metadata.entities_dict import EntitiesDict
5
+ from bam_masterdata.utils import load_validation_rules
6
+
7
+
8
+ class MasterdataChecker:
9
+ VALID_MODES = {"self", "incoming", "validate", "compare", "all", "individual"}
10
+
11
+ def __init__(self):
12
+ """
13
+ Initialize the comparator with validation rules and set the datamodel directory.
14
+ """
15
+ self.current_model: dict = None
16
+ self.new_entities: dict = None
17
+ self.logger = logger
18
+ self.validation_rules: dict = {}
19
+
20
+ def load_current_model(self, datamodel_dir: str = "./bam_masterdata/datamodel/"):
21
+ """
22
+ Load and transform the current data model (Pydantic classes) into JSON.
23
+
24
+ Uses the default datamodel directory unless overridden.
25
+ """
26
+ self.logger.info(f"Loading current data model from: {datamodel_dir}")
27
+ entities_dict = EntitiesDict(python_path=datamodel_dir, logger=self.logger)
28
+ self.current_model = entities_dict.single_json()
29
+
30
+ def load_new_entities(self, source: str):
31
+ """
32
+ Load new entities from various sources (Python classes, Excel, etc.).
33
+ """
34
+ self.logger.info(f"Loading new entities from: {source}")
35
+ loader = SourceLoader(source)
36
+ self.new_entities = loader.load()
37
+
38
+ def check(self, mode: str = "all") -> dict:
39
+ """
40
+ Run validations.
41
+
42
+ Modes:
43
+ - "self" -> Validate only the current data model.
44
+ - "incoming" -> Validate only the new entity structure.
45
+ - "validate" -> Validate both the current model and new entities.
46
+ - "compare" -> Compare new entities against the current model.
47
+ - "all" -> Run both validation types.
48
+ - "individual" -> Run individual repositories validations.
49
+
50
+ Before running, ensure that required models are loaded based on the mode.
51
+
52
+ Returns:
53
+ dict: Validation results.
54
+ """
55
+ # Validate mode selection
56
+ if mode not in self.VALID_MODES:
57
+ raise ValueError(f"Invalid mode: {mode}. Choose from {self.VALID_MODES}.")
58
+
59
+ # Load required models based on the selected mode
60
+ if (
61
+ mode in ["self", "validate", "compare", "all"]
62
+ and self.current_model is None
63
+ ):
64
+ self.logger.info("Current model is missing. Loading now...")
65
+ self.load_current_model()
66
+
67
+ if (
68
+ mode in ["incoming", "validate", "compare", "all"]
69
+ and self.new_entities is None
70
+ ):
71
+ raise ValueError(
72
+ "New entities must be loaded before validation in 'incoming', 'validate', 'compare', or 'all' modes."
73
+ )
74
+
75
+ # Load the validation rules
76
+ if (
77
+ mode in ["self", "incoming", "validate", "all"]
78
+ and self.validation_rules == {}
79
+ ):
80
+ self.validation_rules = load_validation_rules(self.logger)
81
+
82
+ validator = MasterdataValidator(
83
+ self.new_entities, self.current_model, self.validation_rules
84
+ )
85
+ return validator.validate(mode)
86
+
87
+
88
+ def no_validation_errors(validation_results: dict) -> bool:
89
+ """
90
+ Check if there are no validation errors in the results.
91
+
92
+ Args:
93
+ validation_results (dict): The dictionary containing the specific validation results.
94
+
95
+ Returns:
96
+ bool: True if there are no validation errors, False otherwise.
97
+ """
98
+
99
+ if not isinstance(validation_results, dict):
100
+ return False
101
+ return all(no_validation_errors(v) for v in validation_results.values())