dapla-toolbelt-metadata 0.9.7__tar.gz → 0.9.8__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.

Files changed (241) hide show
  1. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/PKG-INFO +1 -1
  2. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/noxfile.py +2 -0
  3. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/pyproject.toml +1 -1
  4. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/_shared/config.py +7 -4
  5. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/utility/constants.py +0 -4
  6. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/utility/urn.py +81 -8
  7. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_urn.py +127 -4
  8. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/uv.lock +1 -1
  9. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.cookiecutter.json +0 -0
  10. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.cruft.json +0 -0
  11. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.editorconfig +0 -0
  12. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.gitattributes +0 -0
  13. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  14. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  15. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/dependabot.yml +0 -0
  16. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/labels.yml +0 -0
  17. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/release-drafter.yml +0 -0
  18. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/workflows/constraints.txt +0 -0
  19. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/workflows/docs.yml +0 -0
  20. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/workflows/labeler.yml +0 -0
  21. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/workflows/release.yml +0 -0
  22. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.github/workflows/tests.yml +0 -0
  23. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.gitignore +0 -0
  24. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.pre-commit-config.yaml +0 -0
  25. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/.vscode/settings.json +0 -0
  26. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/CODEOWNERS +0 -0
  27. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/CODE_OF_CONDUCT.md +0 -0
  28. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/CONTRIBUTING.md +0 -0
  29. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/LICENSE +0 -0
  30. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/Makefile +0 -0
  31. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/README.md +0 -0
  32. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/SECURITY.md +0 -0
  33. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/backstage.yaml +0 -0
  34. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/bin/__init__.py +0 -0
  35. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/bin/openapi_generate_post_process.sh +0 -0
  36. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/bin/upgrade_metadata_file.py +0 -0
  37. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/datasets/create_metadata_for_new_dataset.ipynb +0 -0
  38. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/datasets/create_metadata_for_new_period.ipynb +0 -0
  39. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/datasets/resources/sykefratot/klargjorte_data/person_testdata_p2021_v1__DOC.json +0 -0
  40. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/standards/navnestandard.ipynb +0 -0
  41. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/les_variabeldefinisjon.ipynb +0 -0
  42. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/les_variabeldefinisjoner.ipynb +0 -0
  43. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/migrer_variabeldefinisjoner.ipynb +0 -0
  44. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/ny_gyldighetsperiode_variabeldefinisjon.ipynb +0 -0
  45. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/ny_variabeldefinisjon.ipynb +0 -0
  46. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/publiser_variabeldefinisjon_eksternt.ipynb +0 -0
  47. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/publiser_variabeldefinisjon_internt.ipynb +0 -0
  48. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/rediger_publisert_variabeldefinisjon.ipynb +0 -0
  49. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/rediger_utkast_variabeldefinisjon.ipynb +0 -0
  50. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/reserver_kortnavn.ipynb +0 -0
  51. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/sjekk_kortnavn_variabeldefinisjon.ipynb +0 -0
  52. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/sjekk_migrerte_variabeldefinisjoner.ipynb +0 -0
  53. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/demo/variable_definitions/slett_utkast_variabeldefinisjon.ipynb +0 -0
  54. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/Makefile +0 -0
  55. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/codeofconduct.md +0 -0
  56. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/conf.py +0 -0
  57. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/contributing.md +0 -0
  58. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/index.md +0 -0
  59. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/license.md +0 -0
  60. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/make.bat +0 -0
  61. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/reference.md +0 -0
  62. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/templates/package.rst_t +0 -0
  63. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/docs/vardef_client.md +0 -0
  64. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/schemas/jsonschema/complete-response-schema.json +0 -0
  65. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/sonar-project.properties +0 -0
  66. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/__init__.py +0 -0
  67. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/_shared/__init__.py +0 -0
  68. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/_shared/enums.py +0 -0
  69. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/_shared/py.typed +0 -0
  70. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/dapla/__init__.py +0 -0
  71. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/dapla/user_info.py +0 -0
  72. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/__init__.py +0 -0
  73. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/_merge.py +0 -0
  74. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/code_list.py +0 -0
  75. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/compatibility/__init__.py +0 -0
  76. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/compatibility/_handlers.py +0 -0
  77. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/compatibility/_utils.py +0 -0
  78. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/compatibility/model_backwards_compatibility.py +0 -0
  79. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/core.py +0 -0
  80. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/dapla_dataset_path_info.py +0 -0
  81. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/dataset_parser.py +0 -0
  82. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/external_sources/__init__.py +0 -0
  83. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/external_sources/external_sources.py +0 -0
  84. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/model_validation.py +0 -0
  85. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/py.typed +0 -0
  86. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/statistic_subject_mapping.py +0 -0
  87. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/utility/__init__.py +0 -0
  88. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/utility/enums.py +0 -0
  89. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/datasets/utility/utils.py +0 -0
  90. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/standards/__init__.py +0 -0
  91. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/standards/name_validator.py +0 -0
  92. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/standards/standard_validators.py +0 -0
  93. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/standards/utils/__init__.py +0 -0
  94. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/standards/utils/constants.py +0 -0
  95. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/__init__.py +0 -0
  96. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/FILES +0 -0
  97. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/VERSION +0 -0
  98. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator-ignore +0 -0
  99. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/README.md +0 -0
  100. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/__init__.py +0 -0
  101. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/__init__.py +0 -0
  102. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/__init__.py +0 -0
  103. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/data_migration_api.py +0 -0
  104. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/draft_variable_definitions_api.py +0 -0
  105. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/patches_api.py +0 -0
  106. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/validity_periods_api.py +0 -0
  107. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/variable_definitions_api.py +0 -0
  108. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_client.py +0 -0
  109. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_response.py +0 -0
  110. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/configuration.py +0 -0
  111. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/CompleteResponse.md +0 -0
  112. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Contact.md +0 -0
  113. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DataMigrationApi.md +0 -0
  114. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Draft.md +0 -0
  115. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DraftVariableDefinitionsApi.md +0 -0
  116. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/LanguageStringType.md +0 -0
  117. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Owner.md +0 -0
  118. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Patch.md +0 -0
  119. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PatchesApi.md +0 -0
  120. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PublicApi.md +0 -0
  121. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/SupportedLanguages.md +0 -0
  122. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/UpdateDraft.md +0 -0
  123. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriod.md +0 -0
  124. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriodsApi.md +0 -0
  125. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableDefinitionsApi.md +0 -0
  126. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableStatus.md +0 -0
  127. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/exceptions.py +0 -0
  128. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/__init__.py +0 -0
  129. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/complete_response.py +0 -0
  130. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/contact.py +0 -0
  131. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/draft.py +0 -0
  132. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/get_vardok_vardef_mapping_by_id200_response.py +0 -0
  133. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/language_string_type.py +0 -0
  134. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/owner.py +0 -0
  135. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/patch.py +0 -0
  136. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/problem.py +0 -0
  137. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/update_draft.py +0 -0
  138. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/validity_period.py +0 -0
  139. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_id_response.py +0 -0
  140. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_vardef_id_pair_response.py +0 -0
  141. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/variable_status.py +0 -0
  142. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/py.typed +0 -0
  143. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_generated/vardef_client/rest.py +0 -0
  144. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/__init__.py +0 -0
  145. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/_client.py +0 -0
  146. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/config.py +0 -0
  147. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/constants.py +0 -0
  148. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/files.py +0 -0
  149. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/template_files.py +0 -0
  150. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/_utils/variable_definition_files.py +0 -0
  151. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/exceptions.py +0 -0
  152. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/vardef.py +0 -0
  153. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/vardok_id.py +0 -0
  154. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/vardok_vardef_id_pair.py +0 -0
  155. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/src/dapla_metadata/variable_definitions/variable_definition.py +0 -0
  156. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/__init__.py +0 -0
  157. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/conftest.py +0 -0
  158. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/dapla/__init__.py +0 -0
  159. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/dapla/test_user_info.py +0 -0
  160. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/__init__.py +0 -0
  161. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/conftest.py +0 -0
  162. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/constants.py +0 -0
  163. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/code_list/code_list.csv +0 -0
  164. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/code_list/code_list_en.csv +0 -0
  165. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/code_list/code_list_nb.csv +0 -0
  166. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/code_list/code_list_nn.csv +0 -0
  167. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/code_list/empty.csv +0 -0
  168. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/code_list/no_code.csv +0 -0
  169. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/fewer_variables_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  170. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/ifpn/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  171. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/person_data.csv +0 -0
  172. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/person_data_v1.parquet +0 -0
  173. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/person_data_v1.parquet.gzip +0 -0
  174. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  175. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/datasets/sasdata.sas7bdat +0 -0
  176. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/README.md +0 -0
  177. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v0_1_1/person_data_v1__DOC.json +0 -0
  178. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v1_0_0/person_data_v1__DOC.json +0 -0
  179. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v2_1_0/person_data_v1__DOC.json +0 -0
  180. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v2_2_0/person_data_v1__DOC.json +0 -0
  181. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v3_1_0/person_data_v1__DOC.json +0 -0
  182. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v3_2_0/person_data_v1__DOC.json +0 -0
  183. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v3_3_0/person_data_v1__DOC.json +0 -0
  184. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v4_0_0/person_data_v1__DOC.json +0 -0
  185. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v5_0_1/person_data_v1__DOC.json +0 -0
  186. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/compatibility/v6_0_0/person_data_v1__DOC.json +0 -0
  187. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/fewer_variables_p2020-12-31_p2020-12-31_v1__DOC.json +0 -0
  188. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/invalid_id_field/person_data_v1__DOC.json +0 -0
  189. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/person_data_v1__DOC.json +0 -0
  190. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/person_testdata_p2020-12-31_p2020-12-31_v1__DOC.json +0 -0
  191. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/no_pseudo_v4_0_0_person_data_v1__DOC.json +0 -0
  192. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/person_data_v1__DOC.json +0 -0
  193. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/v4_0_0_person_data_v1__DOC.json +0 -0
  194. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/pseudo/pseudo/person_data_v1__DOC.json +0 -0
  195. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/pseudo/pseudo_missing_variables/person_data_v1__DOC.json +0 -0
  196. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/valid_id_field/person_data_v1__DOC.json +0 -0
  197. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/existing_metadata_file/valid_variable_id_field/person_data_v1__DOC.json +0 -0
  198. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  199. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1__DOC.json +0 -0
  200. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/statistical_subject_structure/empty.xml +0 -0
  201. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/statistical_subject_structure/extract_secondary_subject.xml +0 -0
  202. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/statistical_subject_structure/missing_language.xml +0 -0
  203. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/resources/statistical_subject_structure/simple.xml +0 -0
  204. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_code_list.py +0 -0
  205. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_dapla_dataset_path_info.py +0 -0
  206. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_datadoc_metadata.py +0 -0
  207. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_dataset_consistency.py +0 -0
  208. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_dataset_parser.py +0 -0
  209. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_model_backwards_compatibility.py +0 -0
  210. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_pseudonymization.py +0 -0
  211. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_statistic_subject_mapping.py +0 -0
  212. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_utils.py +0 -0
  213. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/datasets/test_validators.py +0 -0
  214. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/standards/__init__.py +0 -0
  215. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/standards/conftest.py +0 -0
  216. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/standards/test_check_naming_standard.py +0 -0
  217. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/utils/__init__.py +0 -0
  218. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/utils/constants.py +0 -0
  219. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/utils/microcks_testcontainer.py +0 -0
  220. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/__init__.py +0 -0
  221. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/conftest.py +0 -0
  222. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/constants.py +0 -0
  223. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/resources/openapi/variable-definitions-internal.yml +0 -0
  224. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/resources/variable_definition_editing_files/classification_reference.yaml +0 -0
  225. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/resources/variable_definition_editing_files/date_and_definition.yaml +0 -0
  226. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/resources/variable_definition_editing_files/variable_definition_landbak_wypvb3wd_2025-05-02T10-06-20.yaml +0 -0
  227. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/resources/variable_definition_editing_files/variable_definition_var_test_wypvb3wd_2025-09-18T14-19-28.yaml +0 -0
  228. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/test_config.py +0 -0
  229. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/test_template_files.py +0 -0
  230. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/test_vardef.py +0 -0
  231. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/test_variable_definition.py +0 -0
  232. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/test_variable_definition_files.py +0 -0
  233. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/vardef_client/__init__.py +0 -0
  234. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/vardef_client/api/__init__.py +0 -0
  235. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/vardef_client/api/test_happy_path.py +0 -0
  236. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/vardef_client/models/__init__.py +0 -0
  237. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/vardef_client/models/test_models_instantiation.py +0 -0
  238. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/tests/variable_definitions/vardef_client/test_exceptions.py +0 -0
  239. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/vardef-maintenance/README.md +0 -0
  240. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/vardef-maintenance/vardef-maintenance.toml +0 -0
  241. {dapla_toolbelt_metadata-0.9.7 → dapla_toolbelt_metadata-0.9.8}/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.7
3
+ Version: 0.9.8
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.7"
5
+ version = "0.9.8"
6
6
  classifiers = ["Development Status :: 4 - Beta"]
7
7
  readme = "README.md"
8
8
  authors = [{ name = "Statistics Norway", email = "metadata@ssb.no" }]
@@ -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 DATADOC_STATISTICAL_SUBJECT_SOURCE_URL
79
+ or DATADOC_STATISTICAL_SUBJECT_SOURCE_URL_DEFAULT
77
80
  )
78
81
 
79
82
 
@@ -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 build_urn(self, identifier: str) -> str:
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 convert_to_urn(self, url: str | AnyUrl) -> AnyUrl | None:
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
- patterns = (self._build_pattern(url[-1]) for url in self.url_bases)
90
- matches = (self._extract_id(str(url), p) for p in patterns)
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.convert_to_urn(field) for c in converters), None):
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(
@@ -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.build_urn(EXAMPLE_KLASS_ID))
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.build_urn(EXAMPLE_VARDEF_ID))
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.convert_to_urn(case) == expected_result
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.convert_to_urn(case) == expected_result
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
@@ -525,7 +525,7 @@ wheels = [
525
525
 
526
526
  [[package]]
527
527
  name = "dapla-toolbelt-metadata"
528
- version = "0.9.7"
528
+ version = "0.9.8"
529
529
  source = { editable = "." }
530
530
  dependencies = [
531
531
  { name = "arrow" },