dapla-toolbelt-metadata 0.9.0__tar.gz → 0.9.2__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 (238) hide show
  1. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/PKG-INFO +1 -1
  2. dapla_toolbelt_metadata-0.9.2/demo/variable_definitions/reserver_kortnavn.ipynb +137 -0
  3. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/pyproject.toml +1 -1
  4. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/__init__.py +1 -1
  5. dapla_toolbelt_metadata-0.9.2/src/dapla_metadata/datasets/_merge.py +333 -0
  6. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/core.py +23 -170
  7. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/utility/constants.py +5 -4
  8. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/utility/utils.py +4 -89
  9. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/__init__.py +2 -0
  10. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/constants.py +14 -0
  11. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/template_files.py +3 -9
  12. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/conftest.py +1 -0
  13. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v6_0_0/person_data_v1__DOC.json +2 -2
  14. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_datadoc_metadata.py +1 -336
  15. dapla_toolbelt_metadata-0.9.2/tests/datasets/test_dataset_consistency.py +229 -0
  16. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_model_backwards_compatibility.py +23 -0
  17. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_validators.py +2 -3
  18. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/conftest.py +3 -1
  19. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/uv.lock +1 -1
  20. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/vardef-maintenance/README.md +4 -0
  21. dapla_toolbelt_metadata-0.9.2/vardef-maintenance/vardef-maintenance.toml +13 -0
  22. dapla_toolbelt_metadata-0.9.0/vardef-maintenance/vardef-maintenance.toml +0 -14
  23. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.cookiecutter.json +0 -0
  24. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.cruft.json +0 -0
  25. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.editorconfig +0 -0
  26. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.gitattributes +0 -0
  27. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  28. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  29. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/dependabot.yml +0 -0
  30. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/labels.yml +0 -0
  31. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/release-drafter.yml +0 -0
  32. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/workflows/constraints.txt +0 -0
  33. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/workflows/docs.yml +0 -0
  34. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/workflows/labeler.yml +0 -0
  35. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/workflows/release.yml +0 -0
  36. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.github/workflows/tests.yml +0 -0
  37. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.gitignore +0 -0
  38. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.pre-commit-config.yaml +0 -0
  39. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/.vscode/settings.json +0 -0
  40. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/CODEOWNERS +0 -0
  41. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/CODE_OF_CONDUCT.md +0 -0
  42. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/CONTRIBUTING.md +0 -0
  43. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/LICENSE +0 -0
  44. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/Makefile +0 -0
  45. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/README.md +0 -0
  46. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/SECURITY.md +0 -0
  47. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/backstage.yaml +0 -0
  48. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/bin/__init__.py +0 -0
  49. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/bin/openapi_generate_post_process.sh +0 -0
  50. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/bin/upgrade_metadata_file.py +0 -0
  51. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/datasets/create_metadata_for_new_dataset.ipynb +0 -0
  52. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/datasets/create_metadata_for_new_period.ipynb +0 -0
  53. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/datasets/resources/sykefratot/klargjorte_data/person_testdata_p2021_v1__DOC.json +0 -0
  54. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/standards/navnestandard.ipynb +0 -0
  55. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/les_variabeldefinisjon.ipynb +0 -0
  56. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/les_variabeldefinisjoner.ipynb +0 -0
  57. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/migrer_variabeldefinisjoner.ipynb +0 -0
  58. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/ny_gyldighetsperiode_variabeldefinisjon.ipynb +0 -0
  59. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/ny_variabeldefinisjon.ipynb +0 -0
  60. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/publiser_variabeldefinisjon_eksternt.ipynb +0 -0
  61. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/publiser_variabeldefinisjon_internt.ipynb +0 -0
  62. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/rediger_publisert_variabeldefinisjon.ipynb +0 -0
  63. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/rediger_utkast_variabeldefinisjon.ipynb +0 -0
  64. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/sjekk_kortnavn_variabeldefinisjon.ipynb +0 -0
  65. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/sjekk_migrerte_variabeldefinisjoner.ipynb +0 -0
  66. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/demo/variable_definitions/slett_utkast_variabeldefinisjon.ipynb +0 -0
  67. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/Makefile +0 -0
  68. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/codeofconduct.md +0 -0
  69. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/conf.py +0 -0
  70. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/contributing.md +0 -0
  71. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/index.md +0 -0
  72. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/license.md +0 -0
  73. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/make.bat +0 -0
  74. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/reference.md +0 -0
  75. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/templates/package.rst_t +0 -0
  76. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/docs/vardef_client.md +0 -0
  77. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/noxfile.py +0 -0
  78. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/schemas/jsonschema/complete-response-schema.json +0 -0
  79. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/sonar-project.properties +0 -0
  80. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/__init__.py +0 -0
  81. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/_shared/__init__.py +0 -0
  82. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/_shared/config.py +0 -0
  83. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/_shared/enums.py +0 -0
  84. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/_shared/py.typed +0 -0
  85. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/dapla/__init__.py +0 -0
  86. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/dapla/user_info.py +0 -0
  87. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/code_list.py +0 -0
  88. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/compatibility/__init__.py +0 -0
  89. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/compatibility/_handlers.py +0 -0
  90. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/compatibility/_utils.py +0 -0
  91. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/compatibility/model_backwards_compatibility.py +0 -0
  92. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/dapla_dataset_path_info.py +0 -0
  93. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/dataset_parser.py +0 -0
  94. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/external_sources/__init__.py +0 -0
  95. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/external_sources/external_sources.py +0 -0
  96. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/model_validation.py +0 -0
  97. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/py.typed +0 -0
  98. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/statistic_subject_mapping.py +0 -0
  99. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/utility/__init__.py +0 -0
  100. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/datasets/utility/enums.py +0 -0
  101. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/standards/__init__.py +0 -0
  102. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/standards/name_validator.py +0 -0
  103. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/standards/standard_validators.py +0 -0
  104. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/standards/utils/__init__.py +0 -0
  105. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/standards/utils/constants.py +0 -0
  106. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/FILES +0 -0
  107. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/VERSION +0 -0
  108. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/.openapi-generator-ignore +0 -0
  109. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/README.md +0 -0
  110. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/__init__.py +0 -0
  111. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/__init__.py +0 -0
  112. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/__init__.py +0 -0
  113. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/data_migration_api.py +0 -0
  114. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/draft_variable_definitions_api.py +0 -0
  115. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/patches_api.py +0 -0
  116. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/validity_periods_api.py +0 -0
  117. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/variable_definitions_api.py +0 -0
  118. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_client.py +0 -0
  119. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_response.py +0 -0
  120. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/configuration.py +0 -0
  121. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/CompleteResponse.md +0 -0
  122. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Contact.md +0 -0
  123. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DataMigrationApi.md +0 -0
  124. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Draft.md +0 -0
  125. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DraftVariableDefinitionsApi.md +0 -0
  126. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/LanguageStringType.md +0 -0
  127. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Owner.md +0 -0
  128. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Patch.md +0 -0
  129. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PatchesApi.md +0 -0
  130. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PublicApi.md +0 -0
  131. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/SupportedLanguages.md +0 -0
  132. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/UpdateDraft.md +0 -0
  133. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriod.md +0 -0
  134. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriodsApi.md +0 -0
  135. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableDefinitionsApi.md +0 -0
  136. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableStatus.md +0 -0
  137. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/exceptions.py +0 -0
  138. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/__init__.py +0 -0
  139. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/complete_response.py +0 -0
  140. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/contact.py +0 -0
  141. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/draft.py +0 -0
  142. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/get_vardok_vardef_mapping_by_id200_response.py +0 -0
  143. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/language_string_type.py +0 -0
  144. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/owner.py +0 -0
  145. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/patch.py +0 -0
  146. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/problem.py +0 -0
  147. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/update_draft.py +0 -0
  148. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/validity_period.py +0 -0
  149. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_id_response.py +0 -0
  150. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_vardef_id_pair_response.py +0 -0
  151. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/variable_status.py +0 -0
  152. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/py.typed +0 -0
  153. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_generated/vardef_client/rest.py +0 -0
  154. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/__init__.py +0 -0
  155. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/_client.py +0 -0
  156. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/config.py +0 -0
  157. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/files.py +0 -0
  158. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/_utils/variable_definition_files.py +0 -0
  159. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/exceptions.py +0 -0
  160. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/vardef.py +0 -0
  161. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/vardok_id.py +0 -0
  162. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/vardok_vardef_id_pair.py +0 -0
  163. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/src/dapla_metadata/variable_definitions/variable_definition.py +0 -0
  164. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/__init__.py +0 -0
  165. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/conftest.py +0 -0
  166. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/dapla/__init__.py +0 -0
  167. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/dapla/test_user_info.py +0 -0
  168. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/__init__.py +0 -0
  169. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/constants.py +0 -0
  170. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/code_list/code_list.csv +0 -0
  171. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/code_list/code_list_en.csv +0 -0
  172. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/code_list/code_list_nb.csv +0 -0
  173. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/code_list/code_list_nn.csv +0 -0
  174. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/code_list/empty.csv +0 -0
  175. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/code_list/no_code.csv +0 -0
  176. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/fewer_variables_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  177. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/ifpn/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  178. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/person_data.csv +0 -0
  179. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/person_data_v1.parquet +0 -0
  180. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/person_data_v1.parquet.gzip +0 -0
  181. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  182. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/datasets/sasdata.sas7bdat +0 -0
  183. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/README.md +0 -0
  184. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v0_1_1/person_data_v1__DOC.json +0 -0
  185. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v1_0_0/person_data_v1__DOC.json +0 -0
  186. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v2_1_0/person_data_v1__DOC.json +0 -0
  187. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v2_2_0/person_data_v1__DOC.json +0 -0
  188. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v3_1_0/person_data_v1__DOC.json +0 -0
  189. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v3_2_0/person_data_v1__DOC.json +0 -0
  190. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v3_3_0/person_data_v1__DOC.json +0 -0
  191. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v4_0_0/person_data_v1__DOC.json +0 -0
  192. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/compatibility/v5_0_1/person_data_v1__DOC.json +0 -0
  193. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/fewer_variables_p2020-12-31_p2020-12-31_v1__DOC.json +0 -0
  194. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/invalid_id_field/person_data_v1__DOC.json +0 -0
  195. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/person_data_v1__DOC.json +0 -0
  196. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/person_testdata_p2020-12-31_p2020-12-31_v1__DOC.json +0 -0
  197. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/no_pseudo_v4_0_0_person_data_v1__DOC.json +0 -0
  198. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/person_data_v1__DOC.json +0 -0
  199. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/v4_0_0_person_data_v1__DOC.json +0 -0
  200. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/pseudo/pseudo/person_data_v1__DOC.json +0 -0
  201. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/pseudo/pseudo_missing_variables/person_data_v1__DOC.json +0 -0
  202. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/valid_id_field/person_data_v1__DOC.json +0 -0
  203. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/existing_metadata_file/valid_variable_id_field/person_data_v1__DOC.json +0 -0
  204. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  205. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1__DOC.json +0 -0
  206. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/statistical_subject_structure/empty.xml +0 -0
  207. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/statistical_subject_structure/extract_secondary_subject.xml +0 -0
  208. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/statistical_subject_structure/missing_language.xml +0 -0
  209. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/resources/statistical_subject_structure/simple.xml +0 -0
  210. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_code_list.py +0 -0
  211. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_dapla_dataset_path_info.py +0 -0
  212. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_dataset_parser.py +0 -0
  213. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_statistic_subject_mapping.py +0 -0
  214. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/datasets/test_utils.py +0 -0
  215. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/standards/__init__.py +0 -0
  216. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/standards/conftest.py +0 -0
  217. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/standards/test_check_naming_standard.py +0 -0
  218. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/utils/__init__.py +0 -0
  219. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/utils/constants.py +0 -0
  220. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/utils/microcks_testcontainer.py +0 -0
  221. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/__init__.py +0 -0
  222. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/constants.py +0 -0
  223. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/resources/openapi/variable-definitions-internal.yml +0 -0
  224. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/resources/variable_definition_editing_files/classification_reference.yaml +0 -0
  225. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/resources/variable_definition_editing_files/date_and_definition.yaml +0 -0
  226. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/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.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/test_config.py +0 -0
  228. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/test_template_files.py +0 -0
  229. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/test_vardef.py +0 -0
  230. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/test_variable_definition.py +0 -0
  231. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/test_variable_definition_files.py +0 -0
  232. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/vardef_client/__init__.py +0 -0
  233. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/vardef_client/api/__init__.py +0 -0
  234. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/vardef_client/api/test_happy_path.py +0 -0
  235. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/vardef_client/models/__init__.py +0 -0
  236. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/vardef_client/models/test_models_instantiation.py +0 -0
  237. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/tests/variable_definitions/vardef_client/test_exceptions.py +0 -0
  238. {dapla_toolbelt_metadata-0.9.0 → dapla_toolbelt_metadata-0.9.2}/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.0
3
+ Version: 0.9.2
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
@@ -0,0 +1,137 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# Reserver kortnavn\n",
8
+ "\n",
9
+ "Denne Notebook er for deg som:\n",
10
+ "\n",
11
+ "- Har behov å reservere kortnavn ved å opprette utkast. Det er særlig til bruk for basisregisterteamene som har mange variabler og vil unngå at kortnavn tas av andre.\n",
12
+ "\n",
13
+ "Forutsetninger:\n",
14
+ "\n",
15
+ "- Et Dapla-team som skal eie variabeldefinisjonene.\n",
16
+ "- En liste av kortnavn du ønsker å reservere.\n",
17
+ "\n",
18
+ "Forbehold:\n",
19
+ "\n",
20
+ "- Variabeldefinisjonene er opprettet med status UTKAST. Det gjør at andre ikke får lov til å opprette nye variabeldefinisjoner med samme kortnavn, men de er ikke klare til å tas i bruk eller publiseres.\n",
21
+ "- Standardverdier er satt inn i alle påbudte felt. Disse må gjennomgås og korrigeres før publisering."
22
+ ]
23
+ },
24
+ {
25
+ "cell_type": "markdown",
26
+ "metadata": {},
27
+ "source": [
28
+ "## Oppsett\n",
29
+ "\n",
30
+ "Koden under kjøres som forberedelse for påfølgende steg"
31
+ ]
32
+ },
33
+ {
34
+ "cell_type": "code",
35
+ "execution_count": null,
36
+ "metadata": {},
37
+ "outputs": [],
38
+ "source": [
39
+ "# Nødvendig import\n",
40
+ "import logging\n",
41
+ "import sys\n",
42
+ "\n",
43
+ "from dapla_metadata.variable_definitions import Vardef\n",
44
+ "from dapla_metadata.variable_definitions import models\n",
45
+ "\n",
46
+ "# Redusere størrelsen på Traceback for mer tydelige feilmeldinger\n",
47
+ "%xmode Minimal\n",
48
+ "\n",
49
+ "# Gjøre at logging vises\n",
50
+ "logging.basicConfig(\n",
51
+ " format=\"%(levelname)s: %(message)s\",\n",
52
+ " level=logging.INFO,\n",
53
+ " stream=sys.stdout,\n",
54
+ " force=True,\n",
55
+ ")"
56
+ ]
57
+ },
58
+ {
59
+ "cell_type": "markdown",
60
+ "metadata": {},
61
+ "source": [
62
+ "## Liste opp kortnavn som skal reserveres\n",
63
+ "\n",
64
+ "Skriv inn de kortnavnene"
65
+ ]
66
+ },
67
+ {
68
+ "cell_type": "code",
69
+ "execution_count": null,
70
+ "metadata": {},
71
+ "outputs": [],
72
+ "source": [
73
+ "mine_kortnavn = [\"a\"]\n",
74
+ "print(f\"✅ {len(mine_kortnavn)} reserveres\")"
75
+ ]
76
+ },
77
+ {
78
+ "cell_type": "markdown",
79
+ "metadata": {},
80
+ "source": [
81
+ "## Reservere kortnavn\n",
82
+ "\n",
83
+ "⭐️ I koden under opprettes nye variabeldefinisjoner med spesifiserte kortnavn"
84
+ ]
85
+ },
86
+ {
87
+ "cell_type": "code",
88
+ "execution_count": null,
89
+ "metadata": {},
90
+ "outputs": [],
91
+ "source": [
92
+ "from dapla_metadata.variable_definitions import DEFAULT_DATE\n",
93
+ "from dapla_metadata.variable_definitions import GENERATED_CONTACT\n",
94
+ "\n",
95
+ "opprettet = []\n",
96
+ "feil = []\n",
97
+ "for kortnavn in mine_kortnavn:\n",
98
+ " try:\n",
99
+ " mitt_kortnavn = Vardef.create_draft(\n",
100
+ " draft=models.Draft(\n",
101
+ " name=models.LanguageStringType(nb=\"Reservert\"),\n",
102
+ " short_name=kortnavn,\n",
103
+ " definition=models.LanguageStringType(\n",
104
+ " nb=\"Definisjonstekst\",\n",
105
+ " ),\n",
106
+ " unit_types=[\"99\"],\n",
107
+ " subject_fields=[\"al\"],\n",
108
+ " contains_special_categories_of_personal_data=False,\n",
109
+ " valid_from=DEFAULT_DATE,\n",
110
+ " contact=GENERATED_CONTACT,\n",
111
+ " )\n",
112
+ " )\n",
113
+ " opprettet.append(mitt_kortnavn)\n",
114
+ " except Exception as e:\n",
115
+ " print(f\"⚠️ Feil under opprettelse av '{kortnavn}': {e}\")\n",
116
+ " feil.append((kortnavn, str(e)))\n",
117
+ "\n",
118
+ "print(\"\\n📊 Resultatoppsummering:\")\n",
119
+ "print(f\" - Antall opprettet: {len(opprettet)}\")\n",
120
+ "print(f\" - Antall feilet: {len(feil)}\")"
121
+ ]
122
+ }
123
+ ],
124
+ "metadata": {
125
+ "language_info": {
126
+ "codemirror_mode": {
127
+ "name": "ipython"
128
+ },
129
+ "file_extension": ".py",
130
+ "mimetype": "text/x-python",
131
+ "name": "python",
132
+ "nbconvert_exporter": "python"
133
+ }
134
+ },
135
+ "nbformat": 4,
136
+ "nbformat_minor": 2
137
+ }
@@ -2,7 +2,7 @@
2
2
  name = "dapla-toolbelt-metadata"
3
3
  description = "Dapla Toolbelt Metadata"
4
4
  license = "MIT"
5
- version = "0.9.0"
5
+ version = "0.9.2"
6
6
  classifiers = ["Development Status :: 4 - Beta"]
7
7
  readme = "README.md"
8
8
  authors = [{ name = "Statistics Norway", email = "metadata@ssb.no" }]
@@ -1,6 +1,6 @@
1
1
  """Document dataset."""
2
2
 
3
- from datadoc_model import model
3
+ from datadoc_model.all_optional import model
4
4
 
5
5
  from .core import Datadoc
6
6
  from .dapla_dataset_path_info import DaplaDatasetPathInfo
@@ -0,0 +1,333 @@
1
+ """Code relating to merging metadata from an existing metadata document and metadata extracted from a new dataset.
2
+
3
+ This is primarily convenience functionality for users whereby they can programmatically generate metadata without
4
+ having to manually enter it. This is primarily useful when data is sharded by time (i.e. each dataset applies for
5
+ a particular period like a month or a year). Assuming there aren't structural changes, the metadata may be reused
6
+ for all periods.
7
+
8
+ It is important to be able to detect changes in the structure of the data and warn users about this so that they can
9
+ make changes as appropriate.
10
+ """
11
+
12
+ import copy
13
+ import logging
14
+ import warnings
15
+ from collections.abc import Iterable
16
+ from dataclasses import dataclass
17
+ from dataclasses import field
18
+ from pathlib import Path
19
+ from typing import cast
20
+
21
+ import datadoc_model
22
+ import datadoc_model.all_optional.model as all_optional_model
23
+ import datadoc_model.required.model as required_model
24
+ from cloudpathlib import CloudPath
25
+
26
+ from dapla_metadata.datasets.dapla_dataset_path_info import DaplaDatasetPathInfo
27
+ from dapla_metadata.datasets.utility.constants import (
28
+ DATASET_FIELDS_FROM_EXISTING_METADATA,
29
+ )
30
+ from dapla_metadata.datasets.utility.constants import INCONSISTENCIES_MESSAGE
31
+ from dapla_metadata.datasets.utility.utils import OptionalDatadocMetadataType
32
+ from dapla_metadata.datasets.utility.utils import VariableListType
33
+
34
+ logger = logging.getLogger(__name__)
35
+
36
+ BUCKET_NAME_MESSAGE = "Bucket name"
37
+ DATA_PRODUCT_NAME_MESSAGE = "Data product name"
38
+ DATASET_STATE_MESSAGE = "Dataset state"
39
+ DATASET_SHORT_NAME_MESSAGE = "Dataset short name"
40
+ VARIABLES_ADDITIONAL_MESSAGE = (
41
+ "Dataset has additional variables than defined in metadata"
42
+ )
43
+ VARIABLE_RENAME_MESSAGE = "Variables have been renamed in the dataset"
44
+ VARIABLE_ORDER_MESSAGE = "The order of variables in the dataset has changed"
45
+ VARIABLE_DATATYPES_MESSAGE = "Variable datatypes differ"
46
+ VARIABLES_FEWER_MESSAGE = "Dataset has fewer variables than defined in metadata"
47
+
48
+
49
+ class InconsistentDatasetsWarning(UserWarning):
50
+ """Existing and new datasets differ significantly from one another."""
51
+
52
+
53
+ class InconsistentDatasetsError(ValueError):
54
+ """Existing and new datasets differ significantly from one another."""
55
+
56
+
57
+ @dataclass
58
+ class DatasetConsistencyStatus:
59
+ """Store the status for different aspects of dataset consistency.
60
+
61
+ Attributes:
62
+ message: Communicates to the user what aspect is inconsistent.
63
+ success: False if inconsistency is detected.
64
+ variables: Optionally communicate which variables are affected.
65
+ """
66
+
67
+ message: str
68
+ success: bool
69
+ variables: Iterable[str] = field(default_factory=list)
70
+
71
+ def __str__(self) -> str:
72
+ """Format the user message."""
73
+ message = self.message
74
+ if self.variables:
75
+ message += f"\n\tVariables: {self.variables}"
76
+ return message
77
+
78
+
79
+ def check_dataset_consistency(
80
+ new_dataset_path: Path | CloudPath,
81
+ existing_dataset_path: Path,
82
+ ) -> list[DatasetConsistencyStatus]:
83
+ """Run consistency tests.
84
+
85
+ Args:
86
+ new_dataset_path: Path to the dataset to be documented.
87
+ existing_dataset_path: Path stored in the existing metadata.
88
+
89
+ Returns:
90
+ List of consistency check results.
91
+ """
92
+ new_dataset_path_info = DaplaDatasetPathInfo(new_dataset_path)
93
+ existing_dataset_path_info = DaplaDatasetPathInfo(existing_dataset_path)
94
+ return [
95
+ DatasetConsistencyStatus(
96
+ message=BUCKET_NAME_MESSAGE,
97
+ success=(
98
+ new_dataset_path_info.bucket_name
99
+ == existing_dataset_path_info.bucket_name
100
+ ),
101
+ ),
102
+ DatasetConsistencyStatus(
103
+ message=DATA_PRODUCT_NAME_MESSAGE,
104
+ success=(
105
+ new_dataset_path_info.statistic_short_name
106
+ == existing_dataset_path_info.statistic_short_name
107
+ ),
108
+ ),
109
+ DatasetConsistencyStatus(
110
+ message=DATASET_STATE_MESSAGE,
111
+ success=(
112
+ new_dataset_path_info.dataset_state
113
+ == existing_dataset_path_info.dataset_state
114
+ ),
115
+ ),
116
+ DatasetConsistencyStatus(
117
+ message=DATASET_SHORT_NAME_MESSAGE,
118
+ success=(
119
+ new_dataset_path_info.dataset_short_name
120
+ == existing_dataset_path_info.dataset_short_name
121
+ ),
122
+ ),
123
+ ]
124
+
125
+
126
+ def check_variables_consistency(
127
+ extracted_variables: VariableListType,
128
+ existing_variables: VariableListType,
129
+ ) -> list[DatasetConsistencyStatus]:
130
+ """Check for consistency in variables structure.
131
+
132
+ Compares the existing metadata and that extracted from the new dataset and provides
133
+ highly detailed feedback on what is different between them.
134
+
135
+ We don't return all the results because that could create conflicting messages and false positives.
136
+
137
+ Args:
138
+ extracted_variables (VariableListType): Variables extracted from the new dataset.
139
+ existing_variables (VariableListType): Variables already documented in existing metadata
140
+
141
+ Returns:
142
+ list[DatasetConsistencyStatus]: The list of checks and whether they were successful.
143
+ """
144
+ extracted_names_set = {v.short_name or "" for v in extracted_variables}
145
+ existing_names_set = {v.short_name or "" for v in existing_variables}
146
+ same_length = len(extracted_variables) == len(existing_variables)
147
+ more_extracted_variables = extracted_names_set.difference(existing_names_set)
148
+ fewer_extracted_variables = existing_names_set.difference(extracted_names_set)
149
+ results = []
150
+ if same_length:
151
+ if more_extracted_variables:
152
+ results.append(
153
+ DatasetConsistencyStatus(
154
+ message=VARIABLE_RENAME_MESSAGE,
155
+ variables=more_extracted_variables,
156
+ success=not bool(more_extracted_variables),
157
+ )
158
+ )
159
+ else:
160
+ results.append(
161
+ DatasetConsistencyStatus(
162
+ message=VARIABLE_ORDER_MESSAGE,
163
+ success=[v.short_name or "" for v in extracted_variables]
164
+ == [v.short_name or "" for v in existing_variables],
165
+ )
166
+ )
167
+ results.append(
168
+ DatasetConsistencyStatus(
169
+ message=VARIABLE_DATATYPES_MESSAGE,
170
+ success=[v.data_type for v in extracted_variables]
171
+ == [v.data_type for v in existing_variables],
172
+ )
173
+ )
174
+ else:
175
+ results.extend(
176
+ [
177
+ DatasetConsistencyStatus(
178
+ message=VARIABLES_ADDITIONAL_MESSAGE,
179
+ variables=more_extracted_variables,
180
+ success=not bool(more_extracted_variables),
181
+ ),
182
+ DatasetConsistencyStatus(
183
+ message=VARIABLES_FEWER_MESSAGE,
184
+ variables=fewer_extracted_variables,
185
+ success=not bool(fewer_extracted_variables),
186
+ ),
187
+ ]
188
+ )
189
+ return results
190
+
191
+
192
+ def check_ready_to_merge(
193
+ results: list[DatasetConsistencyStatus], *, errors_as_warnings: bool
194
+ ) -> None:
195
+ """Check if the datasets are consistent enough to make a successful merge of metadata.
196
+
197
+ Args:
198
+ results: List if dict with property name and boolean success flag
199
+ errors_as_warnings: True if failing checks should be raised as warnings, not errors.
200
+
201
+ Raises:
202
+ InconsistentDatasetsError: If inconsistencies are found and `errors_as_warnings == False`
203
+ """
204
+ if failures := [result for result in results if not result.success]:
205
+ messages_list = "\n - ".join(str(f) for f in failures)
206
+ msg = f"{INCONSISTENCIES_MESSAGE}\n - {messages_list}"
207
+ if errors_as_warnings:
208
+ warnings.warn(
209
+ message=msg,
210
+ category=InconsistentDatasetsWarning,
211
+ stacklevel=2,
212
+ )
213
+ else:
214
+ raise InconsistentDatasetsError(
215
+ msg,
216
+ )
217
+
218
+
219
+ def override_dataset_fields(
220
+ merged_metadata: all_optional_model.DatadocMetadata,
221
+ existing_metadata: all_optional_model.DatadocMetadata
222
+ | required_model.DatadocMetadata,
223
+ ) -> None:
224
+ """Overrides specific fields in the dataset of `merged_metadata` with values from the dataset of `existing_metadata`.
225
+
226
+ This function iterates over a predefined list of fields, `DATASET_FIELDS_FROM_EXISTING_METADATA`,
227
+ and sets the corresponding fields in the `merged_metadata.dataset` object to the values
228
+ from the `existing_metadata.dataset` object.
229
+
230
+ Args:
231
+ merged_metadata: An instance of `DatadocMetadata` containing the dataset to be updated.
232
+ existing_metadata: An instance of `DatadocMetadata` containing the dataset whose values are used to update `merged_metadata.dataset`.
233
+
234
+ Returns:
235
+ `None`.
236
+ """
237
+ if merged_metadata.dataset and existing_metadata.dataset:
238
+ # Override the fields as defined
239
+ for field in DATASET_FIELDS_FROM_EXISTING_METADATA:
240
+ setattr(
241
+ merged_metadata.dataset,
242
+ field,
243
+ getattr(existing_metadata.dataset, field),
244
+ )
245
+
246
+
247
+ def merge_variables(
248
+ existing_metadata: OptionalDatadocMetadataType,
249
+ extracted_metadata: all_optional_model.DatadocMetadata,
250
+ merged_metadata: all_optional_model.DatadocMetadata,
251
+ ) -> all_optional_model.DatadocMetadata:
252
+ """Merges variables from the extracted metadata into the existing metadata and updates the merged metadata.
253
+
254
+ This function compares the variables from `extracted_metadata` with those in `existing_metadata`.
255
+ For each variable in `extracted_metadata`, it checks if a variable with the same `short_name` exists
256
+ in `existing_metadata`. If a match is found, it updates the existing variable with information from
257
+ `extracted_metadata`. If no match is found, the variable from `extracted_metadata` is directly added to `merged_metadata`.
258
+
259
+ Args:
260
+ existing_metadata: The metadata object containing the current state of variables.
261
+ extracted_metadata: The metadata object containing new or updated variables to merge.
262
+ merged_metadata: The metadata object that will contain the result of the merge.
263
+
264
+ Returns:
265
+ all_optional_model.DatadocMetadata: The `merged_metadata` object containing variables from both `existing_metadata`
266
+ and `extracted_metadata`.
267
+ """
268
+ if (
269
+ existing_metadata is not None
270
+ and existing_metadata.variables is not None
271
+ and extracted_metadata is not None
272
+ and extracted_metadata.variables is not None
273
+ and merged_metadata.variables is not None
274
+ ):
275
+ for extracted in extracted_metadata.variables:
276
+ existing = next(
277
+ (
278
+ existing
279
+ for existing in existing_metadata.variables
280
+ if existing.short_name == extracted.short_name
281
+ ),
282
+ None,
283
+ )
284
+ if existing:
285
+ existing.id = (
286
+ None # Set to None so that it will be set assigned a fresh ID later
287
+ )
288
+ existing.contains_data_from = (
289
+ extracted.contains_data_from or existing.contains_data_from
290
+ )
291
+ existing.contains_data_until = (
292
+ extracted.contains_data_until or existing.contains_data_until
293
+ )
294
+ merged_metadata.variables.append(
295
+ cast("datadoc_model.all_optional.model.Variable", existing)
296
+ )
297
+ else:
298
+ # If there is no existing metadata for this variable, we just use what we have extracted
299
+ merged_metadata.variables.append(extracted)
300
+ return merged_metadata
301
+
302
+
303
+ def merge_metadata(
304
+ extracted_metadata: all_optional_model.DatadocMetadata | None,
305
+ existing_metadata: OptionalDatadocMetadataType,
306
+ ) -> all_optional_model.DatadocMetadata:
307
+ if not existing_metadata:
308
+ logger.warning(
309
+ "No existing metadata found, no merge to perform. Continuing with extracted metadata.",
310
+ )
311
+ return extracted_metadata or all_optional_model.DatadocMetadata()
312
+
313
+ if not extracted_metadata:
314
+ return cast("all_optional_model.DatadocMetadata", existing_metadata)
315
+
316
+ # Use the extracted metadata as a base
317
+ merged_metadata = all_optional_model.DatadocMetadata(
318
+ dataset=copy.deepcopy(extracted_metadata.dataset),
319
+ variables=[],
320
+ )
321
+
322
+ override_dataset_fields(
323
+ merged_metadata=merged_metadata,
324
+ existing_metadata=existing_metadata,
325
+ )
326
+
327
+ # Merge variables.
328
+ # For each extracted variable, copy existing metadata into the merged metadata
329
+ return merge_variables(
330
+ existing_metadata=existing_metadata,
331
+ extracted_metadata=extracted_metadata,
332
+ merged_metadata=merged_metadata,
333
+ )