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.
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/PKG-INFO +3 -2
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/_version.py +9 -4
- bam_masterdata-0.3.1/bam_masterdata/checker/__init__.py +1 -0
- bam_masterdata-0.3.1/bam_masterdata/checker/checker.py +101 -0
- bam_masterdata-0.3.1/bam_masterdata/checker/masterdata_validator.py +578 -0
- bam_masterdata-0.3.1/bam_masterdata/checker/source_loader.py +134 -0
- bam_masterdata-0.3.1/bam_masterdata/checker/validation_rules/all_validation_rules.json +80 -0
- bam_masterdata-0.3.1/bam_masterdata/checker/validation_rules/excel_validation_rules.json +75 -0
- bam_masterdata-0.3.1/bam_masterdata/checker/validation_rules/validation_rules.json +119 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/cli.py +173 -56
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/entities_to_excel.py +16 -36
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/entities_to_rdf.py +5 -55
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/fill_masterdata.py +76 -95
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/collection_types.py +9 -4
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/dataset_types.py +27 -22
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/object_types.py +315 -90
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/excel/excel_to_entities.py +157 -139
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/logger.py +8 -7
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/metadata/definitions.py +46 -18
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/metadata/entities.py +89 -17
- bam_masterdata-0.3.1/bam_masterdata/metadata/entities_dict.py +175 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/utils/__init__.py +5 -0
- bam_masterdata-0.3.1/bam_masterdata/utils/paths.py +43 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/utils/utils.py +102 -15
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/validation_rules/excel_validation_rules.json +4 -2
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/PKG-INFO +3 -2
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/SOURCES.txt +33 -4
- bam_masterdata-0.3.1/docs/assets/drawio/checker-structure.drawio +335 -0
- bam_masterdata-0.3.1/tests/__init__.py +0 -0
- bam_masterdata-0.3.1/tests/checker/test_source_loader.py +256 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/cli/test_entities_to_excel.py +0 -14
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/cli/test_entities_to_rdf.py +1 -1
- bam_masterdata-0.3.1/tests/data/checker/datamodel_test/collection_types.py +190 -0
- bam_masterdata-0.3.1/tests/data/checker/datamodel_test/dataset_types.py +86 -0
- bam_masterdata-0.3.1/tests/data/checker/datamodel_test/object_types.py +60 -0
- bam_masterdata-0.3.1/tests/data/checker/example01_codedoesnoteexists.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example02_codeexists_proptype_datatypechanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example03_codeexists_proptype_contvoccodechanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example04_codeexists_proptype_objectcodechanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example05_codeexists_proptype_warningdefschanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example06_codeexists_proptype_vocobjcodemiss.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example07_codeexists_objtype_warningdefschanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example08_codeexists_objtype_assignprop_listcodeschanged_add.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example09_codeexists_objtype_assignprop_listcodeschanged_del.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example10_codeexists_objtype_assignprop_codedoesnotexists.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example11_codeexists_objtype_assignprop_listcodeschanged_datatypechanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example12_codeexists_objtype_assignprop_listcodeschanged_warningdefschanged.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example13_codeexists_objtype_assignprop_coincide2objects.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example_incoming_excel.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/example_incoming_python/collection_types.py +40 -0
- bam_masterdata-0.3.1/tests/data/checker/example_incoming_python/dataset_types.py +36 -0
- bam_masterdata-0.3.1/tests/data/checker/example_incoming_python/object_types.py +20 -0
- bam_masterdata-0.3.1/tests/data/checker/masterdata_example.xlsx +0 -0
- bam_masterdata-0.3.1/tests/data/checker/masterdata_excel_output.json +562 -0
- bam_masterdata-0.3.1/tests/data/checker/masterdata_python_output.json +562 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/excel/test_excel_to_entities.py +52 -28
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/metadata/test_definitions.py +78 -9
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/metadata/test_entities.py +3 -1
- bam_masterdata-0.3.1/tests/metadata/test_entities_dict.py +259 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/test_logger.py +0 -6
- bam_masterdata-0.3.1/tests/utils/test_paths.py +14 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/utils/test_utils.py +24 -0
- bam_masterdata-0.2.0/bam_masterdata/checker/__init__.py +0 -1
- bam_masterdata-0.2.0/bam_masterdata/checker/checker.py +0 -45
- bam_masterdata-0.2.0/bam_masterdata/checker/datamodel_loader.py +0 -9
- bam_masterdata-0.2.0/bam_masterdata/checker/masterdata_validator.py +0 -34
- bam_masterdata-0.2.0/bam_masterdata/checker/source_loader.py +0 -27
- bam_masterdata-0.2.0/bam_masterdata/cli/entities_to_json.py +0 -67
- bam_masterdata-0.2.0/bam_masterdata/datamodel/property_types.py +0 -6517
- bam_masterdata-0.2.0/tests/cli/test_entities_to_json.py +0 -42
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.coveragerc +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/actions.yml +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/coveralls.yml +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/mkdocs-deploy.yml +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.github/workflows/publish.yml +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.gitignore +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/.vscode/settings.json +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/LICENSE +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/README.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/__init__.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/cli/__init__.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/__init__.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/datamodel/vocabulary_types.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/excel/__init__.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/metadata/__init__.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/openbis/__init__.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/openbis/get_entities.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata/openbis/login.py +0 -0
- /bam_masterdata-0.2.0/tests/__init__.py → /bam_masterdata-0.3.1/bam_masterdata/validation_rules/validation_rules.json +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/dependency_links.txt +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/entry_points.txt +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/requires.txt +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/bam_masterdata.egg-info/top_level.txt +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_transparent.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_transparent_text.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_transparent_text.svg +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_white.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/bammasterdata_blue_white_text.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/datastore-logo-white.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/datastore-logo.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/drawio/masterdata-workflow.drawio +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/drawio/masterdata-workflow.drawio.png +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-Light.ttf +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-LightItalic.ttf +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-Medium.ttf +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/assets/fonts/BAMKlavika-MediumItalic.ttf +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/explanations/data-store.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/explanations/openbis.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/explanations/pybis.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/overview.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/collections.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/datasets.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/objects.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/objects_props.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/parent_child.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/projects.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/searches.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/setup.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/howtos/pybis/spaces.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/index.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/references/collection.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/references/controlled-vocabulary.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/references/dataset.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/stylesheets/extra.css +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/tutorials/create-masterdata.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/docs/tutorials/pybis.md +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/mkdocs.yml +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/pyproject.toml +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/scripts/install_python_dependencies.sh +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/scripts/pkg_size.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/setup.cfg +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/setup.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/conftest.py +0 -0
- {bam_masterdata-0.2.0 → bam_masterdata-0.3.1}/tests/data/utils/example_prop_types_1.py +0 -0
- {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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: bam-masterdata
|
|
3
|
-
Version: 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
|
|
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
|
|
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.
|
|
16
|
-
__version_tuple__ = version_tuple = (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())
|