dapla-toolbelt-metadata 0.9.7__tar.gz → 0.9.9__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.
Potentially problematic release.
This version of dapla-toolbelt-metadata might be problematic. Click here for more details.
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/PKG-INFO +1 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/noxfile.py +2 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/pyproject.toml +1 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/_shared/config.py +7 -4
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/_merge.py +1 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/core.py +1 -2
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/utility/constants.py +0 -4
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/utility/urn.py +81 -8
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/vardok_id.py +5 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/vardok_vardef_id_pair.py +5 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/variable_definition.py +5 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_dataset_consistency.py +61 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_urn.py +127 -4
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/test_variable_definition.py +24 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/uv.lock +347 -273
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/vardef-maintenance/vardef-maintenance.toml +1 -1
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.cookiecutter.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.cruft.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.editorconfig +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.gitattributes +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/dependabot.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/labels.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/release-drafter.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/workflows/constraints.txt +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/workflows/docs.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/workflows/labeler.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/workflows/release.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.github/workflows/tests.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.gitignore +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.pre-commit-config.yaml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/.vscode/settings.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/CODEOWNERS +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/CODE_OF_CONDUCT.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/CONTRIBUTING.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/LICENSE +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/Makefile +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/README.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/SECURITY.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/backstage.yaml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/bin/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/bin/openapi_generate_post_process.sh +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/bin/upgrade_metadata_file.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/datasets/create_metadata_for_new_dataset.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/datasets/create_metadata_for_new_period.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/datasets/resources/sykefratot/klargjorte_data/person_testdata_p2021_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/standards/navnestandard.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/les_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/les_variabeldefinisjoner.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/migrer_variabeldefinisjoner.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/ny_gyldighetsperiode_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/ny_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/publiser_variabeldefinisjon_eksternt.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/publiser_variabeldefinisjon_internt.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/rediger_publisert_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/rediger_utkast_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/reserver_kortnavn.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/sjekk_kortnavn_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/sjekk_migrerte_variabeldefinisjoner.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/demo/variable_definitions/slett_utkast_variabeldefinisjon.ipynb +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/Makefile +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/codeofconduct.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/conf.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/contributing.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/index.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/license.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/make.bat +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/reference.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/templates/package.rst_t +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/docs/vardef_client.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/schemas/jsonschema/complete-response-schema.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/sonar-project.properties +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/_shared/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/_shared/enums.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/_shared/py.typed +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/dapla/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/dapla/user_info.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/code_list.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/compatibility/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/compatibility/_handlers.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/compatibility/_utils.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/compatibility/model_backwards_compatibility.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/dapla_dataset_path_info.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/dataset_parser.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/external_sources/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/external_sources/external_sources.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/model_validation.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/py.typed +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/statistic_subject_mapping.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/utility/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/utility/enums.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/utility/utils.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/standards/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/standards/name_validator.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/standards/standard_validators.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/standards/utils/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/standards/utils/constants.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/FILES +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/VERSION +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator-ignore +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/README.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/data_migration_api.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/draft_variable_definitions_api.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/patches_api.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/validity_periods_api.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/variable_definitions_api.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_client.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_response.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/configuration.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/CompleteResponse.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Contact.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DataMigrationApi.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Draft.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DraftVariableDefinitionsApi.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/LanguageStringType.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Owner.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Patch.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PatchesApi.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PublicApi.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/SupportedLanguages.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/UpdateDraft.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriod.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriodsApi.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableDefinitionsApi.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableStatus.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/exceptions.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/complete_response.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/contact.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/draft.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/get_vardok_vardef_mapping_by_id200_response.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/language_string_type.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/owner.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/patch.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/problem.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/update_draft.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/validity_period.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_id_response.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_vardef_id_pair_response.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/variable_status.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/py.typed +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_generated/vardef_client/rest.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/_client.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/config.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/constants.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/files.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/template_files.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/_utils/variable_definition_files.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/exceptions.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/variable_definitions/vardef.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/conftest.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/dapla/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/dapla/test_user_info.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/conftest.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/constants.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/code_list/code_list.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/code_list/code_list_en.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/code_list/code_list_nb.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/code_list/code_list_nn.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/code_list/empty.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/code_list/no_code.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/fewer_variables_p2021-12-31_p2021-12-31_v1.parquet +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/ifpn/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/person_data.csv +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/person_data_v1.parquet +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/person_data_v1.parquet.gzip +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/datasets/sasdata.sas7bdat +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/README.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v0_1_1/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v1_0_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v2_1_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v2_2_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v3_1_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v3_2_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v3_3_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v4_0_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v5_0_1/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/compatibility/v6_0_0/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/fewer_variables_p2020-12-31_p2020-12-31_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/invalid_id_field/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/person_testdata_p2020-12-31_p2020-12-31_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/no_pseudo_v4_0_0_person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/v4_0_0_person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/pseudo/pseudo/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/pseudo/pseudo_missing_variables/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/valid_id_field/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/existing_metadata_file/valid_variable_id_field/person_data_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1__DOC.json +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/statistical_subject_structure/empty.xml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/statistical_subject_structure/extract_secondary_subject.xml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/statistical_subject_structure/missing_language.xml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/resources/statistical_subject_structure/simple.xml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_code_list.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_dapla_dataset_path_info.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_datadoc_metadata.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_dataset_parser.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_model_backwards_compatibility.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_pseudonymization.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_statistic_subject_mapping.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_utils.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/datasets/test_validators.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/standards/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/standards/conftest.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/standards/test_check_naming_standard.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/utils/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/utils/constants.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/utils/microcks_testcontainer.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/conftest.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/constants.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/resources/openapi/variable-definitions-internal.yml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/resources/variable_definition_editing_files/classification_reference.yaml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/resources/variable_definition_editing_files/date_and_definition.yaml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/resources/variable_definition_editing_files/variable_definition_landbak_wypvb3wd_2025-05-02T10-06-20.yaml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/resources/variable_definition_editing_files/variable_definition_var_test_wypvb3wd_2025-09-18T14-19-28.yaml +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/test_config.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/test_template_files.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/test_vardef.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/test_variable_definition_files.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/vardef_client/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/vardef_client/api/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/vardef_client/api/test_happy_path.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/vardef_client/models/__init__.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/vardef_client/models/test_models_instantiation.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/tests/variable_definitions/vardef_client/test_exceptions.py +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/vardef-maintenance/README.md +0 -0
- {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/vardef-maintenance/vardef_client_init.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dapla-toolbelt-metadata
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.9
|
|
4
4
|
Summary: Dapla Toolbelt Metadata
|
|
5
5
|
Project-URL: homepage, https://github.com/statisticsnorway/dapla-toolbelt-metadata
|
|
6
6
|
Project-URL: repository, https://github.com/statisticsnorway/dapla-toolbelt-metadata
|
|
@@ -31,6 +31,7 @@ TESTS_SESSIONS_DEPENDENCIES = {
|
|
|
31
31
|
"requests-mock",
|
|
32
32
|
"faker",
|
|
33
33
|
"testcontainers[generic]",
|
|
34
|
+
"typeguard"
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
|
|
@@ -152,6 +153,7 @@ def mypy(session: nox.Session) -> None:
|
|
|
152
153
|
"types-beautifulsoup4",
|
|
153
154
|
"types-docker",
|
|
154
155
|
"faker",
|
|
156
|
+
"typeguard"
|
|
155
157
|
)
|
|
156
158
|
session.run("mypy", *args)
|
|
157
159
|
if not session.posargs:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name = "dapla-toolbelt-metadata"
|
|
3
3
|
description = "Dapla Toolbelt Metadata"
|
|
4
4
|
license = "MIT"
|
|
5
|
-
version = "0.9.
|
|
5
|
+
version = "0.9.9"
|
|
6
6
|
classifiers = ["Development Status :: 4 - Beta"]
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
authors = [{ name = "Statistics Norway", email = "metadata@ssb.no" }]
|
{dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/_shared/config.py
RENAMED
|
@@ -13,9 +13,6 @@ from dotenv import load_dotenv
|
|
|
13
13
|
from dapla_metadata._shared.enums import DaplaEnvironment
|
|
14
14
|
from dapla_metadata._shared.enums import DaplaRegion
|
|
15
15
|
from dapla_metadata._shared.enums import DaplaService
|
|
16
|
-
from dapla_metadata.datasets.utility.constants import (
|
|
17
|
-
DATADOC_STATISTICAL_SUBJECT_SOURCE_URL,
|
|
18
|
-
)
|
|
19
16
|
|
|
20
17
|
logger = logging.getLogger(__name__)
|
|
21
18
|
|
|
@@ -28,6 +25,12 @@ DAPLA_SERVICE = "DAPLA_SERVICE"
|
|
|
28
25
|
DAPLA_GROUP_CONTEXT = "DAPLA_GROUP_CONTEXT"
|
|
29
26
|
OIDC_TOKEN = "OIDC_TOKEN" # noqa: S105
|
|
30
27
|
|
|
28
|
+
|
|
29
|
+
DATADOC_STATISTICAL_SUBJECT_SOURCE_URL_DEFAULT = (
|
|
30
|
+
"https://www.ssb.no/xp/_/service/mimir/subjectStructurStatistics"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
31
34
|
env_loaded = False
|
|
32
35
|
|
|
33
36
|
|
|
@@ -73,7 +76,7 @@ def get_statistical_subject_source_url() -> str | None:
|
|
|
73
76
|
"""Get the URL to the statistical subject source."""
|
|
74
77
|
return (
|
|
75
78
|
get_config_item("DATADOC_STATISTICAL_SUBJECT_SOURCE_URL")
|
|
76
|
-
or
|
|
79
|
+
or DATADOC_STATISTICAL_SUBJECT_SOURCE_URL_DEFAULT
|
|
77
80
|
)
|
|
78
81
|
|
|
79
82
|
|
{dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.9}/src/dapla_metadata/datasets/core.py
RENAMED
|
@@ -6,7 +6,6 @@ import copy
|
|
|
6
6
|
import json
|
|
7
7
|
import logging
|
|
8
8
|
from concurrent.futures import ThreadPoolExecutor
|
|
9
|
-
from pathlib import Path
|
|
10
9
|
from typing import TYPE_CHECKING
|
|
11
10
|
from typing import cast
|
|
12
11
|
|
|
@@ -175,7 +174,7 @@ class Datadoc:
|
|
|
175
174
|
):
|
|
176
175
|
self.dataset_consistency_status = check_dataset_consistency(
|
|
177
176
|
self.dataset_path,
|
|
178
|
-
|
|
177
|
+
self.metadata_document,
|
|
179
178
|
)
|
|
180
179
|
self.dataset_consistency_status.extend(
|
|
181
180
|
check_variables_consistency(
|
|
@@ -94,10 +94,6 @@ DATASET_FIELDS_FROM_EXISTING_METADATA = [
|
|
|
94
94
|
|
|
95
95
|
METADATA_DOCUMENT_FILE_SUFFIX = "__DOC.json"
|
|
96
96
|
|
|
97
|
-
DATADOC_STATISTICAL_SUBJECT_SOURCE_URL = (
|
|
98
|
-
"https://www.ssb.no/xp/_/service/mimir/subjectStructurStatistics"
|
|
99
|
-
)
|
|
100
|
-
|
|
101
97
|
PAPIS_STABLE_IDENTIFIER_TYPE = "FREG_SNR"
|
|
102
98
|
PAPIS_ENCRYPTION_KEY_REFERENCE = "papis-common-key-1"
|
|
103
99
|
DAEAD_ENCRYPTION_KEY_REFERENCE = "ssb-common-key-1"
|
|
@@ -6,9 +6,12 @@ from collections.abc import Iterable
|
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from enum import auto
|
|
9
|
+
from typing import Literal
|
|
9
10
|
|
|
10
11
|
from pydantic import AnyUrl
|
|
11
12
|
|
|
13
|
+
from dapla_metadata._shared.config import get_dapla_environment
|
|
14
|
+
from dapla_metadata._shared.enums import DaplaEnvironment
|
|
12
15
|
from dapla_metadata.datasets.utility.utils import VariableListType
|
|
13
16
|
|
|
14
17
|
logger = logging.getLogger(__name__)
|
|
@@ -44,6 +47,9 @@ class ReferenceUrlTypes(Enum):
|
|
|
44
47
|
FRONTEND = auto()
|
|
45
48
|
|
|
46
49
|
|
|
50
|
+
UrlVisibility = Literal["public", "internal"]
|
|
51
|
+
|
|
52
|
+
|
|
47
53
|
@dataclass
|
|
48
54
|
class UrnConverter:
|
|
49
55
|
"""Converts URLs to URNs and vice versa.
|
|
@@ -70,11 +76,81 @@ class UrnConverter:
|
|
|
70
76
|
def _build_pattern(self, url_base: str) -> re.Pattern[str]:
|
|
71
77
|
return re.compile(f"^{url_base}/{self.id_pattern}")
|
|
72
78
|
|
|
73
|
-
def
|
|
79
|
+
def get_urn(self, identifier: str) -> str:
|
|
74
80
|
"""Build a URN for the given identifier."""
|
|
75
81
|
return f"{self.urn_base}:{identifier}"
|
|
76
82
|
|
|
77
|
-
def
|
|
83
|
+
def get_url(
|
|
84
|
+
self,
|
|
85
|
+
identifier: str,
|
|
86
|
+
url_type: ReferenceUrlTypes,
|
|
87
|
+
visibility: Literal["public", "internal"] = "public",
|
|
88
|
+
) -> str | None:
|
|
89
|
+
"""Build concrete URL to reference a resource.
|
|
90
|
+
|
|
91
|
+
There are typically multiple URLs used to refer to one resource, this method attempts to support known variations.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
identifier (str): The identifier of the resource the URL refers to.
|
|
95
|
+
url_type (ReferenceUrlTypes): The representation type of the URL
|
|
96
|
+
visibility (UrlVisibility, optional): Whether the URL should be that which is publicly available or not. Defaults to "public".
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
str | None: The concrete URL. None if we cannot satisfy the supplied requirements.
|
|
100
|
+
"""
|
|
101
|
+
candidates = [base[-1] for base in self.url_bases if base[0] == url_type]
|
|
102
|
+
|
|
103
|
+
def matches_visibility(url: str, visibility: UrlVisibility):
|
|
104
|
+
return (".intern." in url) is (visibility == "internal")
|
|
105
|
+
|
|
106
|
+
def matches_environment(url: str):
|
|
107
|
+
current_environment = get_dapla_environment()
|
|
108
|
+
if current_environment == DaplaEnvironment.TEST:
|
|
109
|
+
return ".test." in url
|
|
110
|
+
return ".test." not in url
|
|
111
|
+
|
|
112
|
+
if url := next(
|
|
113
|
+
(
|
|
114
|
+
url
|
|
115
|
+
for url in candidates
|
|
116
|
+
if matches_visibility(url, visibility) and matches_environment(url)
|
|
117
|
+
),
|
|
118
|
+
None,
|
|
119
|
+
):
|
|
120
|
+
return url + "/" + identifier
|
|
121
|
+
return None
|
|
122
|
+
|
|
123
|
+
def get_id(self, urn_or_url: str | AnyUrl) -> str | None:
|
|
124
|
+
"""Get an identifier from a URN or URL.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
urn_or_url (str | AnyUrl): The URN or URL refering to a particular resource
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
str | None: The identifier for the resource, or None if it cannot be extracted.
|
|
131
|
+
"""
|
|
132
|
+
if str(urn_or_url).startswith(self.urn_base):
|
|
133
|
+
return str(urn_or_url).removeprefix(self.urn_base + ":")
|
|
134
|
+
return self._extract_id_from_url(urn_or_url)
|
|
135
|
+
|
|
136
|
+
def is_id(self, value: str) -> bool:
|
|
137
|
+
"""Check if the value is an identifier for this URN type.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
value (str): The value to check.
|
|
141
|
+
"""
|
|
142
|
+
if not isinstance(value, str):
|
|
143
|
+
# Mypy thinks it's impossible to reach this branch, but there are no guarantees in Python.
|
|
144
|
+
return False # type: ignore [unreachable]
|
|
145
|
+
pattern = re.compile(f"^{self.id_pattern}$")
|
|
146
|
+
return bool(pattern.match(value))
|
|
147
|
+
|
|
148
|
+
def _extract_id_from_url(self, url: str | AnyUrl) -> str | None:
|
|
149
|
+
patterns = (self._build_pattern(url[-1]) for url in self.url_bases)
|
|
150
|
+
matches = (self._extract_id(str(url), p) for p in patterns)
|
|
151
|
+
return next((m for m in matches if m), None)
|
|
152
|
+
|
|
153
|
+
def convert_url_to_urn(self, url: str | AnyUrl) -> AnyUrl | None:
|
|
78
154
|
"""Convert a URL to a generalized URN for that same resource.
|
|
79
155
|
|
|
80
156
|
Args:
|
|
@@ -86,11 +162,8 @@ class UrnConverter:
|
|
|
86
162
|
if str(url).startswith(self.urn_base):
|
|
87
163
|
# In this case the value is already in the expected format and nothing needs to be done.
|
|
88
164
|
return AnyUrl(url)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
identifier = next((m for m in matches if m), None)
|
|
92
|
-
if identifier:
|
|
93
|
-
return AnyUrl(self.build_urn(identifier))
|
|
165
|
+
if identifier := self._extract_id_from_url(url):
|
|
166
|
+
return AnyUrl(self.get_urn(identifier))
|
|
94
167
|
|
|
95
168
|
return None
|
|
96
169
|
|
|
@@ -149,7 +222,7 @@ def convert_uris_to_urns(
|
|
|
149
222
|
for v in variables:
|
|
150
223
|
field = getattr(v, field_name, None)
|
|
151
224
|
if field:
|
|
152
|
-
if urn := next((c.
|
|
225
|
+
if urn := next((c.convert_url_to_urn(field) for c in converters), None):
|
|
153
226
|
setattr(v, field_name, urn)
|
|
154
227
|
else:
|
|
155
228
|
logger.error(
|
|
@@ -33,7 +33,11 @@ class VardokId(VardokIdResponse):
|
|
|
33
33
|
model: VardokIdResponse,
|
|
34
34
|
) -> "VardokId":
|
|
35
35
|
"""Create a VariableDefinition instance from a CompleteResponse."""
|
|
36
|
-
|
|
36
|
+
self = VardokId.from_dict(model.model_dump())
|
|
37
|
+
if not self:
|
|
38
|
+
msg = f"Could not construct a VardokId instance from {model}"
|
|
39
|
+
raise ValueError(msg)
|
|
40
|
+
return self
|
|
37
41
|
|
|
38
42
|
def __str__(self) -> str:
|
|
39
43
|
"""Format as indented YAML."""
|
|
@@ -32,7 +32,11 @@ class VardokVardefIdPair(VardokVardefIdPairResponse):
|
|
|
32
32
|
model: VardokVardefIdPairResponse,
|
|
33
33
|
) -> "VardokVardefIdPair":
|
|
34
34
|
"""Create a VardokVardefIdPair instance from a VardokVardefIdPairResponse."""
|
|
35
|
-
|
|
35
|
+
self = VardokVardefIdPair.from_dict(model.model_dump())
|
|
36
|
+
if not self:
|
|
37
|
+
msg = f"Could not construct a VardokVardefIdPair instance from {model}"
|
|
38
|
+
raise ValueError(msg)
|
|
39
|
+
return self
|
|
36
40
|
|
|
37
41
|
def __str__(self) -> str:
|
|
38
42
|
"""Format as indented YAML."""
|
|
@@ -82,7 +82,11 @@ class VariableDefinition(CompleteResponse):
|
|
|
82
82
|
model: CompleteResponse,
|
|
83
83
|
) -> "VariableDefinition":
|
|
84
84
|
"""Create a VariableDefinition instance from a CompleteResponse."""
|
|
85
|
-
|
|
85
|
+
self = VariableDefinition.from_dict(model.model_dump())
|
|
86
|
+
if not self:
|
|
87
|
+
msg = f"Could not construct a VariableDefinition instance from {model}"
|
|
88
|
+
raise ValueError(msg)
|
|
89
|
+
return self
|
|
86
90
|
|
|
87
91
|
@vardef_exception_handler
|
|
88
92
|
def list_validity_periods(self) -> list["VariableDefinition"]:
|
|
@@ -2,6 +2,8 @@ import contextlib
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
+
from cloudpathlib.local import LocalGSClient
|
|
6
|
+
from cloudpathlib.local import LocalGSPath
|
|
5
7
|
from datadoc_model.all_optional.model import DatadocMetadata
|
|
6
8
|
from datadoc_model.all_optional.model import DataType
|
|
7
9
|
from datadoc_model.all_optional.model import Variable
|
|
@@ -21,6 +23,7 @@ from dapla_metadata.datasets._merge import InconsistentDatasetsWarning
|
|
|
21
23
|
from dapla_metadata.datasets._merge import check_dataset_consistency
|
|
22
24
|
from dapla_metadata.datasets._merge import check_ready_to_merge
|
|
23
25
|
from dapla_metadata.datasets._merge import check_variables_consistency
|
|
26
|
+
from dapla_metadata.datasets.core import Datadoc
|
|
24
27
|
from tests.datasets.constants import TEST_BUCKET_NAMING_STANDARD_COMPATIBLE_PATH
|
|
25
28
|
from tests.datasets.constants import VARIABLE_DATA_TYPES
|
|
26
29
|
from tests.datasets.constants import VARIABLE_SHORT_NAMES
|
|
@@ -227,3 +230,61 @@ def test_check_variables_consistency(
|
|
|
227
230
|
assert r.success, f"'{r.message}' failed but should have passed"
|
|
228
231
|
else:
|
|
229
232
|
assert all(r.success for r in results)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def test_bucket_check_ok_when_both_params_are_gs_paths(mocker):
|
|
236
|
+
"""Test the functionality of `check_dataset_consistency`.
|
|
237
|
+
|
|
238
|
+
Verify the desired behavior when BOTH parameters are gs-paths (no Path() conversion occurs). In
|
|
239
|
+
this case no `Bucket name` warning should be issued.
|
|
240
|
+
"""
|
|
241
|
+
_patch_gs_utils(mocker)
|
|
242
|
+
resource_json = (
|
|
243
|
+
Path(__file__).parent
|
|
244
|
+
/ "resources"
|
|
245
|
+
/ "existing_metadata_file"
|
|
246
|
+
/ "person_testdata_p2020-12-31_p2020-12-31_v1__DOC.json"
|
|
247
|
+
)
|
|
248
|
+
resource_parquet = (
|
|
249
|
+
Path(__file__).parent
|
|
250
|
+
/ "resources"
|
|
251
|
+
/ "datasets"
|
|
252
|
+
/ "person_testdata_p2021-12-31_p2021-12-31_v1.parquet"
|
|
253
|
+
)
|
|
254
|
+
assert resource_parquet.exists(), f"Parquet resource missing: {resource_parquet}"
|
|
255
|
+
assert resource_json.exists(), f"JSON resource missing: {resource_json}"
|
|
256
|
+
directory = "ssb-dapla-felles-data-produkt-test/datadoc/brukertest/10/sykefratot/klargjorte_data/"
|
|
257
|
+
dataset_gs = LocalGSPath(
|
|
258
|
+
f"gs://{directory}person_testdata_p2021-12-31_p2021-12-31_v1.parquet"
|
|
259
|
+
)
|
|
260
|
+
metadata_doc_gs = LocalGSPath(
|
|
261
|
+
f"gs://{directory}person_testdata_p2021-12-31_p2021-12-31_v1__DOC.json"
|
|
262
|
+
)
|
|
263
|
+
metadata_doc_gs.parent.mkdir(parents=True, exist_ok=True)
|
|
264
|
+
metadata_doc_gs.write_text(resource_json.read_text(), encoding="utf-8")
|
|
265
|
+
assert metadata_doc_gs.exists(), "Metadata document was not written to LocalGS"
|
|
266
|
+
dataset_gs.parent.mkdir(parents=True, exist_ok=True)
|
|
267
|
+
dataset_gs.write_bytes(resource_parquet.read_bytes())
|
|
268
|
+
assert dataset_gs.exists(), "Parquet file was not written to LocalGS"
|
|
269
|
+
dd = Datadoc(
|
|
270
|
+
dataset_path=str(dataset_gs),
|
|
271
|
+
metadata_document_path=str(metadata_doc_gs),
|
|
272
|
+
errors_as_warnings=True,
|
|
273
|
+
)
|
|
274
|
+
_assert_bucket_ok(dd.dataset_consistency_status, BUCKET_NAME_MESSAGE)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def _assert_bucket_ok(results: list, expected_msg: str):
|
|
278
|
+
bucket_checks = [r for r in results if expected_msg in r.message]
|
|
279
|
+
assert bucket_checks, f"Expected at least one check for {expected_msg}."
|
|
280
|
+
assert all(r.success for r in bucket_checks), (
|
|
281
|
+
f"Expected {expected_msg} to have success == True when both are gs-paths."
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def _patch_gs_utils(mocker):
|
|
286
|
+
mocker.patch(
|
|
287
|
+
"dapla_metadata.datasets.utility.utils.google.auth.default", autospec=True
|
|
288
|
+
)
|
|
289
|
+
mocker.patch("dapla_metadata.datasets.utility.utils.GSClient", LocalGSClient)
|
|
290
|
+
mocker.patch("dapla_metadata.datasets.utility.utils.GSPath", LocalGSPath)
|
|
@@ -3,17 +3,20 @@ import logging
|
|
|
3
3
|
import datadoc_model.all_optional.model as all_optional_model
|
|
4
4
|
import pytest
|
|
5
5
|
from pydantic import AnyUrl
|
|
6
|
+
from typeguard import suppress_type_checks
|
|
6
7
|
|
|
7
8
|
from dapla_metadata.datasets.core import Datadoc
|
|
8
9
|
from dapla_metadata.datasets.utility.urn import URN_ERROR_MESSAGE_BASE
|
|
10
|
+
from dapla_metadata.datasets.utility.urn import ReferenceUrlTypes
|
|
9
11
|
from dapla_metadata.datasets.utility.urn import SsbNaisDomains
|
|
12
|
+
from dapla_metadata.datasets.utility.urn import UrlVisibility
|
|
10
13
|
from dapla_metadata.datasets.utility.urn import klass_urn_converter
|
|
11
14
|
from dapla_metadata.datasets.utility.urn import vardef_urn_converter
|
|
12
15
|
|
|
13
16
|
EXAMPLE_KLASS_ID = "91"
|
|
14
|
-
EXAMPLE_KLASS_URN = AnyUrl(klass_urn_converter.
|
|
17
|
+
EXAMPLE_KLASS_URN = AnyUrl(klass_urn_converter.get_urn(EXAMPLE_KLASS_ID))
|
|
15
18
|
EXAMPLE_VARDEF_ID = "hd8sks89"
|
|
16
|
-
EXAMPLE_VARDEF_URN = AnyUrl(vardef_urn_converter.
|
|
19
|
+
EXAMPLE_VARDEF_URN = AnyUrl(vardef_urn_converter.get_urn(EXAMPLE_VARDEF_ID))
|
|
17
20
|
|
|
18
21
|
VARIABLE_DEFINITION_URN_TEST_CASES = [
|
|
19
22
|
*[
|
|
@@ -52,7 +55,7 @@ def test_convert_to_vardef_urn(
|
|
|
52
55
|
expected_result: AnyUrl | None,
|
|
53
56
|
expect_warning: bool, # noqa: ARG001
|
|
54
57
|
):
|
|
55
|
-
assert vardef_urn_converter.
|
|
58
|
+
assert vardef_urn_converter.convert_url_to_urn(case) == expected_result
|
|
56
59
|
|
|
57
60
|
|
|
58
61
|
@pytest.mark.parametrize(
|
|
@@ -88,6 +91,66 @@ def test_convert_to_vardef_urn_end_to_end(
|
|
|
88
91
|
assert (URN_ERROR_MESSAGE_BASE in caplog.text) is expect_warning
|
|
89
92
|
|
|
90
93
|
|
|
94
|
+
@pytest.mark.parametrize("identifier", [EXAMPLE_VARDEF_ID])
|
|
95
|
+
@pytest.mark.parametrize("visibility", ["internal", "public"])
|
|
96
|
+
@pytest.mark.parametrize(
|
|
97
|
+
"url_type", [ReferenceUrlTypes.API, ReferenceUrlTypes.FRONTEND]
|
|
98
|
+
)
|
|
99
|
+
def test_vardef_get_url(
|
|
100
|
+
url_type: ReferenceUrlTypes, visibility: UrlVisibility, identifier: str
|
|
101
|
+
):
|
|
102
|
+
url = vardef_urn_converter.get_url(identifier, url_type, visibility)
|
|
103
|
+
assert url is not None
|
|
104
|
+
assert url.endswith("/" + identifier)
|
|
105
|
+
if url_type == ReferenceUrlTypes.API:
|
|
106
|
+
assert url.startswith("https://metadata.")
|
|
107
|
+
else:
|
|
108
|
+
assert url.startswith("https://catalog.")
|
|
109
|
+
if visibility == "internal":
|
|
110
|
+
assert ".intern." in url
|
|
111
|
+
else:
|
|
112
|
+
assert ".intern." not in url
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@pytest.mark.parametrize(
|
|
116
|
+
("urn_or_url", "identifier"),
|
|
117
|
+
[
|
|
118
|
+
("https://www.vg.no", None),
|
|
119
|
+
(EXAMPLE_VARDEF_URN, EXAMPLE_VARDEF_ID),
|
|
120
|
+
(
|
|
121
|
+
f"https://catalog.ssb.no/variable-definitions/{EXAMPLE_VARDEF_ID}",
|
|
122
|
+
EXAMPLE_VARDEF_ID,
|
|
123
|
+
),
|
|
124
|
+
(
|
|
125
|
+
AnyUrl(
|
|
126
|
+
f"https://metadata.intern.test.ssb.no/variable-definitions/{EXAMPLE_VARDEF_ID}"
|
|
127
|
+
),
|
|
128
|
+
EXAMPLE_VARDEF_ID,
|
|
129
|
+
),
|
|
130
|
+
],
|
|
131
|
+
)
|
|
132
|
+
def test_vardef_get_id(urn_or_url: str | AnyUrl, identifier: str | None):
|
|
133
|
+
assert vardef_urn_converter.get_id(urn_or_url) == identifier
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
@pytest.mark.parametrize(
|
|
137
|
+
("identifier", "expected"),
|
|
138
|
+
[
|
|
139
|
+
(EXAMPLE_VARDEF_ID, True),
|
|
140
|
+
("invalid-id", False),
|
|
141
|
+
("123", False),
|
|
142
|
+
("12345678", True),
|
|
143
|
+
("123456789", False),
|
|
144
|
+
("abcdEFGH", False),
|
|
145
|
+
("", False),
|
|
146
|
+
(None, False),
|
|
147
|
+
],
|
|
148
|
+
)
|
|
149
|
+
@suppress_type_checks
|
|
150
|
+
def test_vardef_is_id(identifier: str, expected: bool):
|
|
151
|
+
assert vardef_urn_converter.is_id(identifier) is expected
|
|
152
|
+
|
|
153
|
+
|
|
91
154
|
CLASSIFICATION_URN_TEST_CASES = [
|
|
92
155
|
(
|
|
93
156
|
f"https://www.ssb.no/klass/klassifikasjoner/{EXAMPLE_KLASS_ID}",
|
|
@@ -126,7 +189,7 @@ def test_convert_to_klass_urn(
|
|
|
126
189
|
expected_result: str,
|
|
127
190
|
expect_warning: bool, # noqa: ARG001
|
|
128
191
|
):
|
|
129
|
-
assert klass_urn_converter.
|
|
192
|
+
assert klass_urn_converter.convert_url_to_urn(case) == expected_result
|
|
130
193
|
|
|
131
194
|
|
|
132
195
|
@pytest.mark.parametrize(
|
|
@@ -160,3 +223,63 @@ def test_convert_to_klass_urn_end_to_end(
|
|
|
160
223
|
else:
|
|
161
224
|
assert meta.variables[0].classification_uri == expected_result
|
|
162
225
|
assert (URN_ERROR_MESSAGE_BASE in caplog.text) is expect_warning
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
@pytest.mark.parametrize("identifier", [EXAMPLE_KLASS_ID])
|
|
229
|
+
@pytest.mark.parametrize("visibility", ["internal", "public"])
|
|
230
|
+
@pytest.mark.parametrize(
|
|
231
|
+
"url_type", [ReferenceUrlTypes.API, ReferenceUrlTypes.FRONTEND]
|
|
232
|
+
)
|
|
233
|
+
def test_klass_get_url(
|
|
234
|
+
url_type: ReferenceUrlTypes, visibility: UrlVisibility, identifier: str
|
|
235
|
+
):
|
|
236
|
+
url = klass_urn_converter.get_url(identifier, url_type, visibility)
|
|
237
|
+
if visibility == "internal":
|
|
238
|
+
# Klass doesn't have an internal representation
|
|
239
|
+
assert url is None
|
|
240
|
+
else:
|
|
241
|
+
assert url is not None
|
|
242
|
+
assert url.endswith("/" + identifier)
|
|
243
|
+
if url_type == ReferenceUrlTypes.API:
|
|
244
|
+
assert url.startswith("https://data.")
|
|
245
|
+
else:
|
|
246
|
+
assert url.startswith("https://www.ssb.")
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
@pytest.mark.parametrize(
|
|
250
|
+
("urn_or_url", "identifier"),
|
|
251
|
+
[
|
|
252
|
+
("https://www.vg.no", None),
|
|
253
|
+
(EXAMPLE_KLASS_URN, EXAMPLE_KLASS_ID),
|
|
254
|
+
(
|
|
255
|
+
f"https://www.ssb.no/klass/klassifikasjoner/{EXAMPLE_KLASS_ID}",
|
|
256
|
+
EXAMPLE_KLASS_ID,
|
|
257
|
+
),
|
|
258
|
+
(
|
|
259
|
+
AnyUrl(
|
|
260
|
+
f"https://data.ssb.no/api/klass/v1/classifications/{EXAMPLE_KLASS_ID}"
|
|
261
|
+
),
|
|
262
|
+
EXAMPLE_KLASS_ID,
|
|
263
|
+
),
|
|
264
|
+
],
|
|
265
|
+
)
|
|
266
|
+
def test_klass_get_id(urn_or_url: str | AnyUrl, identifier: str | None):
|
|
267
|
+
assert klass_urn_converter.get_id(urn_or_url) == identifier
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
@pytest.mark.parametrize(
|
|
271
|
+
("identifier", "expected"),
|
|
272
|
+
[
|
|
273
|
+
(EXAMPLE_KLASS_ID, True),
|
|
274
|
+
("invalid-id", False),
|
|
275
|
+
("123", True),
|
|
276
|
+
("1", True),
|
|
277
|
+
("123456789", False),
|
|
278
|
+
("abcdEFGH", False),
|
|
279
|
+
("", False),
|
|
280
|
+
(None, False),
|
|
281
|
+
],
|
|
282
|
+
)
|
|
283
|
+
@suppress_type_checks
|
|
284
|
+
def test_klass_is_id(identifier: str, expected: bool):
|
|
285
|
+
assert klass_urn_converter.is_id(identifier) is expected
|
|
@@ -253,6 +253,30 @@ def test_create_patch_change_short_name(variable_definition: VariableDefinition)
|
|
|
253
253
|
mock_create_patch.assert_not_called()
|
|
254
254
|
|
|
255
255
|
|
|
256
|
+
def test_from_model(
|
|
257
|
+
variable_definition: VariableDefinition,
|
|
258
|
+
):
|
|
259
|
+
"""This covers a bug that was reported in.
|
|
260
|
+
|
|
261
|
+
It was caused by an incorrect implementation in the from_model
|
|
262
|
+
method. The only thing we're testing is that no exceptions are
|
|
263
|
+
raised in this flow.
|
|
264
|
+
"""
|
|
265
|
+
mock_api_response = MagicMock(name="VariableDefinition")
|
|
266
|
+
mock_api_response.classification_reference = "702"
|
|
267
|
+
with patch.object(
|
|
268
|
+
VariableDefinition,
|
|
269
|
+
"create_patch",
|
|
270
|
+
return_value=mock_api_response,
|
|
271
|
+
) as mock_create_patch:
|
|
272
|
+
my_patch = VariableDefinition.from_model(variable_definition)
|
|
273
|
+
my_patch.create_patch_from_file(
|
|
274
|
+
file_path=VARIABLE_DEFINITION_EDITING_FILES_DIR
|
|
275
|
+
/ "variable_definition_landbak_wypvb3wd_2025-05-02T10-06-20.yaml",
|
|
276
|
+
)
|
|
277
|
+
mock_create_patch.assert_called_once()
|
|
278
|
+
|
|
279
|
+
|
|
256
280
|
def test_create_patch_from_file_path_not_set(variable_definition: VariableDefinition):
|
|
257
281
|
my_patch = variable_definition
|
|
258
282
|
my_patch.set_file_path(file_path=None)
|