dapla-toolbelt-metadata 0.9.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. dapla_toolbelt_metadata-0.9.11/.cookiecutter.json +22 -0
  2. dapla_toolbelt_metadata-0.9.11/.cruft.json +30 -0
  3. dapla_toolbelt_metadata-0.9.11/.editorconfig +15 -0
  4. dapla_toolbelt_metadata-0.9.11/.gitattributes +3 -0
  5. dapla_toolbelt_metadata-0.9.11/.github/ISSUE_TEMPLATE/bug_report.yml +73 -0
  6. dapla_toolbelt_metadata-0.9.11/.github/ISSUE_TEMPLATE/feature_request.yml +17 -0
  7. dapla_toolbelt_metadata-0.9.11/.github/dependabot.yml +33 -0
  8. dapla_toolbelt_metadata-0.9.11/.github/labels.yml +66 -0
  9. dapla_toolbelt_metadata-0.9.11/.github/release-drafter.yml +30 -0
  10. dapla_toolbelt_metadata-0.9.11/.github/workflows/constraints.txt +2 -0
  11. dapla_toolbelt_metadata-0.9.11/.github/workflows/docs.yml +66 -0
  12. dapla_toolbelt_metadata-0.9.11/.github/workflows/labeler.yml +25 -0
  13. dapla_toolbelt_metadata-0.9.11/.github/workflows/release.yml +73 -0
  14. dapla_toolbelt_metadata-0.9.11/.github/workflows/tests.yml +144 -0
  15. dapla_toolbelt_metadata-0.9.11/.gitignore +308 -0
  16. dapla_toolbelt_metadata-0.9.11/.pre-commit-config.yaml +30 -0
  17. dapla_toolbelt_metadata-0.9.11/.vscode/settings.json +30 -0
  18. dapla_toolbelt_metadata-0.9.11/CODEOWNERS +3 -0
  19. dapla_toolbelt_metadata-0.9.11/CODE_OF_CONDUCT.md +132 -0
  20. dapla_toolbelt_metadata-0.9.11/CONTRIBUTING.md +146 -0
  21. dapla_toolbelt_metadata-0.9.11/LICENSE +21 -0
  22. dapla_toolbelt_metadata-0.9.11/Makefile +20 -0
  23. dapla_toolbelt_metadata-0.9.11/PKG-INFO +112 -0
  24. dapla_toolbelt_metadata-0.9.11/README.md +79 -0
  25. dapla_toolbelt_metadata-0.9.11/SECURITY.md +13 -0
  26. dapla_toolbelt_metadata-0.9.11/backstage.yaml +69 -0
  27. dapla_toolbelt_metadata-0.9.11/bin/__init__.py +1 -0
  28. dapla_toolbelt_metadata-0.9.11/bin/openapi_generate_post_process.sh +24 -0
  29. dapla_toolbelt_metadata-0.9.11/bin/upgrade_metadata_file.py +22 -0
  30. dapla_toolbelt_metadata-0.9.11/demo/datasets/create_metadata_for_new_dataset.ipynb +103 -0
  31. dapla_toolbelt_metadata-0.9.11/demo/datasets/create_metadata_for_new_period.ipynb +40 -0
  32. dapla_toolbelt_metadata-0.9.11/demo/datasets/resources/sykefratot/klargjorte_data/person_testdata_p2021_v1__DOC.json +399 -0
  33. dapla_toolbelt_metadata-0.9.11/demo/standards/navnestandard.ipynb +89 -0
  34. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/les_variabeldefinisjon.ipynb +179 -0
  35. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/les_variabeldefinisjoner.ipynb +437 -0
  36. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/migrer_variabeldefinisjoner.ipynb +175 -0
  37. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/ny_gyldighetsperiode_variabeldefinisjon.ipynb +151 -0
  38. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/ny_variabeldefinisjon.ipynb +141 -0
  39. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/publiser_variabeldefinisjon_eksternt.ipynb +128 -0
  40. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/publiser_variabeldefinisjon_internt.ipynb +129 -0
  41. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/rediger_publisert_variabeldefinisjon.ipynb +161 -0
  42. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/rediger_utkast_variabeldefinisjon.ipynb +147 -0
  43. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/sjekk_kortnavn_variabeldefinisjon.ipynb +111 -0
  44. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/sjekk_migrerte_variabeldefinisjoner.ipynb +178 -0
  45. dapla_toolbelt_metadata-0.9.11/demo/variable_definitions/slett_utkast_variabeldefinisjon.ipynb +100 -0
  46. dapla_toolbelt_metadata-0.9.11/docs/Makefile +20 -0
  47. dapla_toolbelt_metadata-0.9.11/docs/codeofconduct.md +3 -0
  48. dapla_toolbelt_metadata-0.9.11/docs/conf.py +69 -0
  49. dapla_toolbelt_metadata-0.9.11/docs/contributing.md +7 -0
  50. dapla_toolbelt_metadata-0.9.11/docs/index.md +24 -0
  51. dapla_toolbelt_metadata-0.9.11/docs/license.md +7 -0
  52. dapla_toolbelt_metadata-0.9.11/docs/make.bat +35 -0
  53. dapla_toolbelt_metadata-0.9.11/docs/reference.md +457 -0
  54. dapla_toolbelt_metadata-0.9.11/docs/templates/package.rst_t +48 -0
  55. dapla_toolbelt_metadata-0.9.11/docs/vardef_client.md +3 -0
  56. dapla_toolbelt_metadata-0.9.11/noxfile.py +257 -0
  57. dapla_toolbelt_metadata-0.9.11/pyproject.toml +187 -0
  58. dapla_toolbelt_metadata-0.9.11/schemas/jsonschema/complete-response-schema.json +243 -0
  59. dapla_toolbelt_metadata-0.9.11/sonar-project.properties +13 -0
  60. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/__init__.py +15 -0
  61. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/_shared/__init__.py +1 -0
  62. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/_shared/config.py +109 -0
  63. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/_shared/enums.py +27 -0
  64. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/_shared/py.typed +0 -0
  65. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/dapla/__init__.py +4 -0
  66. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/dapla/user_info.py +138 -0
  67. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/__init__.py +9 -0
  68. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/_merge.py +333 -0
  69. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/code_list.py +243 -0
  70. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/compatibility/__init__.py +10 -0
  71. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/compatibility/_handlers.py +363 -0
  72. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/compatibility/_utils.py +259 -0
  73. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/compatibility/model_backwards_compatibility.py +135 -0
  74. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/core.py +481 -0
  75. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/dapla_dataset_path_info.py +811 -0
  76. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/dataset_parser.py +254 -0
  77. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/external_sources/__init__.py +1 -0
  78. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/external_sources/external_sources.py +87 -0
  79. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/model_validation.py +203 -0
  80. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/py.typed +0 -0
  81. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/statistic_subject_mapping.py +187 -0
  82. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/utility/__init__.py +1 -0
  83. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/utility/constants.py +103 -0
  84. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/utility/enums.py +23 -0
  85. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/utility/urn.py +234 -0
  86. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/datasets/utility/utils.py +564 -0
  87. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/standards/__init__.py +4 -0
  88. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/standards/name_validator.py +250 -0
  89. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/standards/standard_validators.py +98 -0
  90. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/standards/utils/__init__.py +1 -0
  91. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/standards/utils/constants.py +49 -0
  92. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/__init__.py +11 -0
  93. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/FILES +20 -0
  94. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/.openapi-generator/VERSION +1 -0
  95. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/.openapi-generator-ignore +6 -0
  96. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/README.md +148 -0
  97. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/__init__.py +0 -0
  98. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/__init__.py +47 -0
  99. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/__init__.py +8 -0
  100. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/data_migration_api.py +766 -0
  101. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/draft_variable_definitions_api.py +888 -0
  102. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/patches_api.py +888 -0
  103. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/validity_periods_api.py +583 -0
  104. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api/variable_definitions_api.py +613 -0
  105. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_client.py +779 -0
  106. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/api_response.py +27 -0
  107. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/configuration.py +474 -0
  108. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/CompleteResponse.md +51 -0
  109. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Contact.md +30 -0
  110. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DataMigrationApi.md +90 -0
  111. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Draft.md +42 -0
  112. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/DraftVariableDefinitionsApi.md +259 -0
  113. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/LanguageStringType.md +31 -0
  114. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Owner.md +31 -0
  115. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/Patch.md +43 -0
  116. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PatchesApi.md +249 -0
  117. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/PublicApi.md +218 -0
  118. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/SupportedLanguages.md +15 -0
  119. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/UpdateDraft.md +44 -0
  120. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriod.md +42 -0
  121. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriodsApi.md +236 -0
  122. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableDefinitionsApi.md +304 -0
  123. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableStatus.md +17 -0
  124. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/exceptions.py +193 -0
  125. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/__init__.py +31 -0
  126. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/complete_response.py +260 -0
  127. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/contact.py +94 -0
  128. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/draft.py +228 -0
  129. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/get_vardok_vardef_mapping_by_id200_response.py +158 -0
  130. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/language_string_type.py +101 -0
  131. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/owner.py +87 -0
  132. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/patch.py +244 -0
  133. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/problem.py +118 -0
  134. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/update_draft.py +274 -0
  135. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/validity_period.py +225 -0
  136. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_id_response.py +81 -0
  137. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_vardef_id_pair_response.py +84 -0
  138. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/models/variable_status.py +33 -0
  139. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/py.typed +0 -0
  140. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_generated/vardef_client/rest.py +249 -0
  141. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/__init__.py +1 -0
  142. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/_client.py +32 -0
  143. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/config.py +54 -0
  144. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/constants.py +80 -0
  145. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/files.py +309 -0
  146. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/template_files.py +99 -0
  147. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/_utils/variable_definition_files.py +143 -0
  148. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/exceptions.py +255 -0
  149. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/vardef.py +372 -0
  150. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/vardok_id.py +48 -0
  151. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/vardok_vardef_id_pair.py +47 -0
  152. dapla_toolbelt_metadata-0.9.11/src/dapla_metadata/variable_definitions/variable_definition.py +422 -0
  153. dapla_toolbelt_metadata-0.9.11/tests/__init__.py +1 -0
  154. dapla_toolbelt_metadata-0.9.11/tests/conftest.py +54 -0
  155. dapla_toolbelt_metadata-0.9.11/tests/dapla/__init__.py +1 -0
  156. dapla_toolbelt_metadata-0.9.11/tests/dapla/test_user_info.py +107 -0
  157. dapla_toolbelt_metadata-0.9.11/tests/datasets/__init__.py +1 -0
  158. dapla_toolbelt_metadata-0.9.11/tests/datasets/conftest.py +279 -0
  159. dapla_toolbelt_metadata-0.9.11/tests/datasets/constants.py +78 -0
  160. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/code_list/code_list.csv +27 -0
  161. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/code_list/code_list_en.csv +4 -0
  162. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/code_list/code_list_nb.csv +4 -0
  163. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/code_list/code_list_nn.csv +4 -0
  164. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/code_list/empty.csv +1 -0
  165. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/code_list/no_code.csv +4 -0
  166. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/fewer_variables_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  167. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/ifpn/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  168. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/person_data.csv +5 -0
  169. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/person_data_v1.parquet +0 -0
  170. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/person_data_v1.parquet.gzip +0 -0
  171. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  172. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/datasets/sasdata.sas7bdat +0 -0
  173. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/README.md +9 -0
  174. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v0_1_1/person_data_v1__DOC.json +196 -0
  175. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v1_0_0/person_data_v1__DOC.json +252 -0
  176. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v2_1_0/person_data_v1__DOC.json +253 -0
  177. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v2_2_0/person_data_v1__DOC.json +253 -0
  178. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v3_1_0/person_data_v1__DOC.json +393 -0
  179. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v3_2_0/person_data_v1__DOC.json +380 -0
  180. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v3_3_0/person_data_v1__DOC.json +380 -0
  181. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v4_0_0/person_data_v1__DOC.json +380 -0
  182. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v5_0_1/person_data_v1__DOC.json +387 -0
  183. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/compatibility/v6_0_0/person_data_v1__DOC.json +395 -0
  184. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/fewer_variables_p2020-12-31_p2020-12-31_v1__DOC.json +148 -0
  185. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/invalid_id_field/person_data_v1__DOC.json +248 -0
  186. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/person_data_v1__DOC.json +395 -0
  187. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/person_testdata_p2020-12-31_p2020-12-31_v1__DOC.json +406 -0
  188. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/no_pseudo_v4_0_0_person_data_v1__DOC.json +379 -0
  189. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/person_data_v1__DOC.json +230 -0
  190. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/pseudo/dataset_and_pseudo/v4_0_0_person_data_v1__DOC.json +399 -0
  191. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/pseudo/pseudo/person_data_v1__DOC.json +22 -0
  192. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/pseudo/pseudo_missing_variables/person_data_v1__DOC.json +9 -0
  193. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/valid_id_field/person_data_v1__DOC.json +248 -0
  194. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/existing_metadata_file/valid_variable_id_field/person_data_v1__DOC.json +201 -0
  195. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1.parquet +0 -0
  196. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/klargjorte_data/person_testdata_p2021-12-31_p2021-12-31_v1__DOC.json +344 -0
  197. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/statistical_subject_structure/empty.xml +5 -0
  198. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/statistical_subject_structure/extract_secondary_subject.xml +77 -0
  199. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/statistical_subject_structure/missing_language.xml +61 -0
  200. dapla_toolbelt_metadata-0.9.11/tests/datasets/resources/statistical_subject_structure/simple.xml +23 -0
  201. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_code_list.py +67 -0
  202. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_dapla_dataset_path_info.py +365 -0
  203. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_datadoc_metadata.py +583 -0
  204. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_dataset_consistency.py +290 -0
  205. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_dataset_parser.py +129 -0
  206. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_model_backwards_compatibility.py +266 -0
  207. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_pseudonymization.py +534 -0
  208. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_statistic_subject_mapping.py +168 -0
  209. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_urn.py +285 -0
  210. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_utils.py +73 -0
  211. dapla_toolbelt_metadata-0.9.11/tests/datasets/test_validators.py +281 -0
  212. dapla_toolbelt_metadata-0.9.11/tests/standards/__init__.py +1 -0
  213. dapla_toolbelt_metadata-0.9.11/tests/standards/conftest.py +55 -0
  214. dapla_toolbelt_metadata-0.9.11/tests/standards/test_check_naming_standard.py +397 -0
  215. dapla_toolbelt_metadata-0.9.11/tests/utils/__init__.py +1 -0
  216. dapla_toolbelt_metadata-0.9.11/tests/utils/constants.py +83 -0
  217. dapla_toolbelt_metadata-0.9.11/tests/utils/microcks_testcontainer.py +94 -0
  218. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/__init__.py +1 -0
  219. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/conftest.py +408 -0
  220. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/constants.py +7 -0
  221. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/resources/openapi/variable-definitions-internal.yml +2551 -0
  222. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/resources/variable_definition_editing_files/classification_reference.yaml +1 -0
  223. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/resources/variable_definition_editing_files/date_and_definition.yaml +5 -0
  224. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/resources/variable_definition_editing_files/variable_definition_landbak_wypvb3wd_2025-05-02T10-06-20.yaml +63 -0
  225. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/resources/variable_definition_editing_files/variable_definition_var_test_wypvb3wd_2025-09-18T14-19-28.yaml +62 -0
  226. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/test_config.py +90 -0
  227. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/test_template_files.py +179 -0
  228. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/test_vardef.py +343 -0
  229. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/test_variable_definition.py +598 -0
  230. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/test_variable_definition_files.py +217 -0
  231. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/vardef_client/__init__.py +1 -0
  232. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/vardef_client/api/__init__.py +1 -0
  233. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/vardef_client/api/test_happy_path.py +100 -0
  234. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/vardef_client/models/__init__.py +1 -0
  235. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/vardef_client/models/test_models_instantiation.py +137 -0
  236. dapla_toolbelt_metadata-0.9.11/tests/variable_definitions/vardef_client/test_exceptions.py +99 -0
  237. dapla_toolbelt_metadata-0.9.11/uv.lock +3648 -0
  238. dapla_toolbelt_metadata-0.9.11/vardef-maintenance/README.md +23 -0
  239. dapla_toolbelt_metadata-0.9.11/vardef-maintenance/vardef-maintenance.toml +13 -0
  240. dapla_toolbelt_metadata-0.9.11/vardef-maintenance/vardef_client_init.sh +51 -0
@@ -0,0 +1,22 @@
1
+ {
2
+ "_copy_without_render": [
3
+ "*.rst_t"
4
+ ],
5
+ "_jinja2_env_vars": {
6
+ "lstrip_blocks": true,
7
+ "trim_blocks": true
8
+ },
9
+ "_template": "https://github.com/statisticsnorway/ssb-pypitemplate.git",
10
+ "author": "Team Metadata",
11
+ "code_quality_level": "High",
12
+ "copyright_owner": "Statistics Norway",
13
+ "copyright_year": "2024",
14
+ "development_status": "Development Status :: 4 - Beta",
15
+ "email": "metadata@ssb.no",
16
+ "friendly_name": "Dapla Toolbelt Metadata",
17
+ "github_organization": "statisticsnorway",
18
+ "license": "MIT",
19
+ "package_name": "dapla_toolbelt_metadata",
20
+ "project_name": "dapla-toolbelt-metadata",
21
+ "version": "0.0.0"
22
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "template": "https://github.com/statisticsnorway/ssb-pypitemplate.git",
3
+ "commit": "0d33fca0d1c29c79aef9c7053e36d9e7cdd2bd20",
4
+ "checkout": null,
5
+ "context": {
6
+ "cookiecutter": {
7
+ "project_name": "dapla-toolbelt-metadata",
8
+ "package_name": "dapla_toolbelt_metadata",
9
+ "friendly_name": "Dapla Toolbelt Metadata",
10
+ "copyright_owner": "Statistics Norway",
11
+ "copyright_year": "2024",
12
+ "author": "Team Metadata",
13
+ "email": "metadata@ssb.no",
14
+ "github_organization": "statisticsnorway",
15
+ "version": "0.0.0",
16
+ "license": "MIT",
17
+ "development_status": "Development Status :: 4 - Beta",
18
+ "code_quality_level": "High",
19
+ "_copy_without_render": [
20
+ "*.rst_t"
21
+ ],
22
+ "_jinja2_env_vars": {
23
+ "lstrip_blocks": true,
24
+ "trim_blocks": true
25
+ },
26
+ "_template": "https://github.com/statisticsnorway/ssb-pypitemplate.git"
27
+ }
28
+ },
29
+ "directory": null
30
+ }
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+
9
+ [*.{py,toml}]
10
+ indent_style = space
11
+ indent_size = 4
12
+
13
+ [*.yml,yaml,json]
14
+ indent_style = space
15
+ indent_size = 2
@@ -0,0 +1,3 @@
1
+ * text=auto eol=lf
2
+ *.ipynb filter=nbstripout
3
+ *.ipynb diff=ipynb
@@ -0,0 +1,73 @@
1
+ name: "\U0001F41E Bug Report"
2
+ description: Report a bug
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Please fill out the sections below to help everyone identify and fix the bug
9
+ - type: textarea
10
+ id: description
11
+ attributes:
12
+ label: Describe the bug
13
+ placeholder: A clear and concise description of what the bug is.
14
+ validations:
15
+ required: true
16
+ - type: textarea
17
+ id: reproduce
18
+ attributes:
19
+ label: To Reproduce
20
+ description: Steps to reproduce the behavior.
21
+ placeholder: |
22
+ 1. Step 1...
23
+ 2. Step 2...
24
+ 3. Step 3...
25
+ 4. Step 4...
26
+ validations:
27
+ required: false
28
+ - type: textarea
29
+ id: expected
30
+ attributes:
31
+ label: Expected behaviour
32
+ placeholder: A clear and concise description of what you expected to happen.
33
+ validations:
34
+ required: false
35
+ - type: dropdown
36
+ id: platform
37
+ attributes:
38
+ label: Platforms and Environments
39
+ multiple: true
40
+ description: >
41
+ On which platforms does the bug occur?
42
+ The first four items are platforms in Statistics Norway.
43
+ You can select multiple platforms.
44
+ options:
45
+ - DaplaLab with vscode
46
+ - DaplaLab with Jupyter
47
+ - Jupyter on-prem
48
+ - Old Dapla with Jupyter
49
+ - Windows
50
+ - Linux
51
+ - macOS
52
+ validations:
53
+ required: true
54
+ - type: input
55
+ id: version
56
+ attributes:
57
+ label: Version
58
+ description: What version of our software are you running?
59
+ placeholder: 1.0.0
60
+ validations:
61
+ required: false
62
+ - type: textarea
63
+ id: logs
64
+ attributes:
65
+ label: Error messages or logs
66
+ description: Please copy and paste any relevant log output or error messages.
67
+ render: shell
68
+ validations:
69
+ required: false
70
+ - type: markdown
71
+ attributes:
72
+ value: |
73
+ Thanks for reporting this issue! We will get back to you as soon as possible.
@@ -0,0 +1,17 @@
1
+ name: "\U0001F381 Feature Request"
2
+ description: Suggest a new feature or enhancment.
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: textarea
6
+ id: description
7
+ attributes:
8
+ label: Description
9
+ description: >
10
+ Describe the feature or enhancement and explain why it should be implemented.
11
+ Include a code example if applicable.
12
+ validations:
13
+ required: true
14
+ - type: markdown
15
+ attributes:
16
+ value: |
17
+ Thanks for reporting this issue! We will get back to you as soon as possible.
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ # Needed for uv support
3
+ enable-beta-ecosystems: true
4
+ updates:
5
+ - package-ecosystem: "github-actions"
6
+ directory: "/"
7
+ schedule:
8
+ interval: "monthly"
9
+ open-pull-requests-limit: 99
10
+ groups:
11
+ github-action-dependencies:
12
+ patterns:
13
+ - "*"
14
+ - package-ecosystem: "pip"
15
+ directory: "/.github/workflows"
16
+ schedule:
17
+ interval: "monthly"
18
+ open-pull-requests-limit: 99
19
+ groups:
20
+ workflows-dependencies:
21
+ patterns:
22
+ - "*"
23
+ - package-ecosystem: "uv"
24
+ directory: "/"
25
+ schedule:
26
+ interval: "monthly"
27
+ allow:
28
+ - dependency-type: "all"
29
+ open-pull-requests-limit: 99
30
+ groups:
31
+ python-dependencies:
32
+ patterns:
33
+ - "*"
@@ -0,0 +1,66 @@
1
+ ---
2
+ # Labels names are important as they are used by Release Drafter to decide
3
+ # regarding where to record them in changelog or if to skip them.
4
+ #
5
+ # The repository labels will be automatically configured using this file and
6
+ # the GitHub Action https://github.com/marketplace/actions/github-labeler.
7
+ - name: breaking
8
+ description: Breaking Changes
9
+ color: bfd4f2
10
+ - name: bug
11
+ description: Something isn't working
12
+ color: d73a4a
13
+ - name: ci
14
+ description: Continuous Integration
15
+ color: 4a97d6
16
+ - name: dependencies
17
+ description: Pull requests that update a dependency file
18
+ color: 0366d6
19
+ - name: documentation
20
+ description: Improvements or additions to documentation
21
+ color: 0075ca
22
+ - name: duplicate
23
+ description: This issue or pull request already exists
24
+ color: cfd3d7
25
+ - name: enhancement
26
+ description: New feature or request
27
+ color: a2eeef
28
+ - name: github_actions
29
+ description: Pull requests that update Github_actions code
30
+ color: "000000"
31
+ - name: good first issue
32
+ description: Good for newcomers
33
+ color: 7057ff
34
+ - name: help wanted
35
+ description: Extra attention is needed
36
+ color: 008672
37
+ - name: invalid
38
+ description: This doesn't seem right
39
+ color: e4e669
40
+ - name: performance
41
+ description: Performance
42
+ color: "016175"
43
+ - name: python
44
+ description: Pull requests that update Python code
45
+ color: 2b67c6
46
+ - name: question
47
+ description: Further information is requested
48
+ color: d876e3
49
+ - name: refactoring
50
+ description: Refactoring
51
+ color: ef67c4
52
+ - name: removal
53
+ description: Removals and Deprecations
54
+ color: 9ae7ea
55
+ - name: style
56
+ description: Style
57
+ color: c120e5
58
+ - name: testing
59
+ description: Testing
60
+ color: b1fc6f
61
+ - name: wontfix
62
+ description: This will not be worked on
63
+ color: ffffff
64
+ - name: "skip-changelog"
65
+ description: Changes that should be omitted from the release notes
66
+ color: ededed
@@ -0,0 +1,30 @@
1
+ categories:
2
+ - title: ":boom: Breaking Changes"
3
+ label: "breaking"
4
+ - title: ":rocket: Features"
5
+ label: "enhancement"
6
+ - title: ":fire: Removals and Deprecations"
7
+ label: "removal"
8
+ - title: ":beetle: Fixes"
9
+ label: "bug"
10
+ - title: ":racehorse: Performance"
11
+ label: "performance"
12
+ - title: ":rotating_light: Testing"
13
+ label: "testing"
14
+ - title: ":construction_worker: Continuous Integration"
15
+ label: "ci"
16
+ - title: ":books: Documentation"
17
+ label: "documentation"
18
+ - title: ":hammer: Refactoring"
19
+ label: "refactoring"
20
+ - title: ":lipstick: Style"
21
+ label: "style"
22
+ - title: ":package: Dependencies"
23
+ labels:
24
+ - "dependencies"
25
+ exclude-labels:
26
+ - "skip-changelog"
27
+ template: |
28
+ ## Changes
29
+
30
+ $CHANGES
@@ -0,0 +1,2 @@
1
+ pip==25.2
2
+ nox==2025.5.1
@@ -0,0 +1,66 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - master
8
+
9
+ # Allows you to run this workflow manually from the Actions tab
10
+ workflow_dispatch:
11
+
12
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
13
+ permissions:
14
+ contents: read
15
+ pages: write
16
+ id-token: write
17
+
18
+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
19
+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
20
+ concurrency:
21
+ group: "pages"
22
+ cancel-in-progress: false
23
+
24
+ jobs:
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - name: Check out the repository
29
+ uses: actions/checkout@v5
30
+
31
+ - name: Set up Python
32
+ uses: actions/setup-python@v6.0.0
33
+ with:
34
+ python-version-file: pyproject.toml
35
+
36
+ - name: Install uv
37
+ uses: astral-sh/setup-uv@v6
38
+ with:
39
+ enable-cache: true
40
+
41
+ - name: Install dependencies
42
+ run: |
43
+ uv sync --locked --all-extras --dev
44
+
45
+ - name: Build doc with Sphinx
46
+ run: |
47
+ uv run sphinx-build docs docs/_build
48
+
49
+ - name: Upload artifact
50
+ uses: actions/upload-pages-artifact@v4
51
+ with:
52
+ path: "docs/_build"
53
+
54
+ deploy:
55
+ environment:
56
+ name: github-pages
57
+ url: ${{ steps.deployment.outputs.page_url }}
58
+ runs-on: ubuntu-latest
59
+ needs: build
60
+ steps:
61
+ - name: Setup Pages
62
+ uses: actions/configure-pages@v5
63
+
64
+ - name: Deploy to GitHub Pages
65
+ id: deployment
66
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,25 @@
1
+ name: Labeler
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - master
8
+ paths:
9
+ - ".github/labels.yml"
10
+ - ".github/workflows/labeler.yml"
11
+
12
+ jobs:
13
+ labeler:
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ issues: write
17
+ contents: read
18
+ steps:
19
+ - name: Check out the repository
20
+ uses: actions/checkout@v5
21
+
22
+ - name: Run Labeler
23
+ uses: crazy-max/ghaction-github-labeler@v5.3.0
24
+ with:
25
+ skip-delete: true
@@ -0,0 +1,73 @@
1
+ name: Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches:
7
+ - main
8
+ - master
9
+
10
+ jobs:
11
+ release:
12
+ name: Release
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ id-token: write
16
+ contents: write
17
+ pull-requests: read
18
+ steps:
19
+ - name: Check out the repository
20
+ uses: actions/checkout@v5
21
+ with:
22
+ fetch-depth: 2
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v6.0.0
26
+ with:
27
+ python-version-file: pyproject.toml
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v6
31
+ with:
32
+ enable-cache: true
33
+
34
+ - name: Check if there is a parent commit
35
+ id: check-parent-commit
36
+ run: |
37
+ echo "sha=$(git rev-parse --verify --quiet HEAD^)" >> $GITHUB_OUTPUT
38
+
39
+ - name: Detect and tag new version
40
+ id: check-version
41
+ if: steps.check-parent-commit.outputs.sha
42
+ uses: salsify/action-detect-and-tag-new-version@v2.0.3
43
+ with:
44
+ version-command: |
45
+ bash -o pipefail -c "uvx --from=toml-cli toml get --toml-path=pyproject.toml project.version"
46
+
47
+ - name: Bump version for developmental release
48
+ if: (!steps.check-version.outputs.tag)
49
+ run: |
50
+ version=$(uvx --from=toml-cli toml get --toml-path=pyproject.toml project.version) &&
51
+ uvx --from=toml-cli toml set --toml-path=pyproject.toml project.version $version.dev.$(date +%s)
52
+
53
+ - name: Build package
54
+ run: |
55
+ uv build
56
+
57
+ - name: Publish package on PyPI
58
+ if: steps.check-version.outputs.tag
59
+ uses: pypa/gh-action-pypi-publish@v1.13.0
60
+
61
+ - name: Publish package on TestPyPI
62
+ if: (!steps.check-version.outputs.tag)
63
+ uses: pypa/gh-action-pypi-publish@v1.13.0
64
+ with:
65
+ repository-url: https://test.pypi.org/legacy/
66
+
67
+ - name: Publish the release notes
68
+ uses: release-drafter/release-drafter@v6.1.0
69
+ with:
70
+ publish: ${{ steps.check-version.outputs.tag != '' }}
71
+ tag: ${{ steps.check-version.outputs.tag }}
72
+ env:
73
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,144 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - "**"
7
+ paths:
8
+ - "src/**"
9
+ - "tests/**"
10
+ - "docs/**"
11
+ - "pyproject.toml"
12
+ - "uv.lock"
13
+ - ".pre-commit-config.yaml"
14
+ - "noxfile.py"
15
+ - ".github/workflows/tests.yml"
16
+ - ‎".github/workflows/constraints.txt"
17
+
18
+ jobs:
19
+ tests:
20
+ name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }}
21
+ runs-on: ${{ matrix.os }}
22
+ permissions:
23
+ contents: read
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ include:
28
+ - { python: "3.12", os: "ubuntu-latest", session: "pre-commit" }
29
+ - { python: "3.13", os: "ubuntu-latest", session: "mypy" }
30
+ - { python: "3.12", os: "ubuntu-latest", session: "mypy" }
31
+ - { python: "3.10", os: "ubuntu-latest", session: "tests" }
32
+ - { python: "3.11", os: "ubuntu-latest", session: "tests" }
33
+ - { python: "3.12", os: "ubuntu-latest", session: "tests" }
34
+ - { python: "3.13", os: "ubuntu-latest", session: "tests" }
35
+ - { python: "3.12", os: "ubuntu-latest", session: "typeguard" }
36
+ - { python: "3.12", os: "ubuntu-latest", session: "xdoctest" }
37
+ - { python: "3.12", os: "ubuntu-latest", session: "docs-build" }
38
+
39
+ env:
40
+ NOXSESSION: ${{ matrix.session }}
41
+ FORCE_COLOR: "1"
42
+ PRE_COMMIT_COLOR: "always"
43
+
44
+ steps:
45
+ - name: Check out the repository
46
+ uses: actions/checkout@v5
47
+
48
+ - name: Set up Python ${{ matrix.python }}
49
+ uses: actions/setup-python@v6.0.0
50
+ with:
51
+ python-version: ${{ matrix.python }}
52
+
53
+ - name: Install uv
54
+ uses: astral-sh/setup-uv@v6
55
+ with:
56
+ enable-cache: true
57
+
58
+ - name: Compute pre-commit cache key
59
+ if: matrix.session == 'pre-commit'
60
+ id: pre-commit-cache
61
+ shell: python
62
+ run: |
63
+ import hashlib
64
+ import subprocess
65
+ import sys
66
+
67
+ python = "py{}.{}".format(*sys.version_info[:2])
68
+ payload = sys.version.encode() + sys.executable.encode()
69
+ digest = hashlib.sha256(payload).hexdigest()
70
+ result = "${{ runner.os }}-{}-{}-pre-commit".format(python, digest[:8])
71
+ cmd = f'echo "result={result}" >> $GITHUB_OUTPUT'
72
+ subprocess.run(cmd, shell=True)
73
+
74
+ - name: Restore pre-commit cache
75
+ uses: actions/cache@v4
76
+ if: matrix.session == 'pre-commit'
77
+ with:
78
+ path: ~/.cache/pre-commit
79
+ key: ${{ steps.pre-commit-cache.outputs.result }}-${{ hashFiles('.pre-commit-config.yaml') }}
80
+ restore-keys: |
81
+ ${{ steps.pre-commit-cache.outputs.result }}-
82
+
83
+ - name: Run Nox
84
+ run: |
85
+ uvx --constraints "${{ github.workspace }}/.github/workflows/constraints.txt" nox --python=${{ matrix.python }}
86
+
87
+ - name: Upload coverage data
88
+ if: always() && matrix.session == 'tests'
89
+ uses: "actions/upload-artifact@v4"
90
+ with:
91
+ name: coverage-data-${{ matrix.os }}-${{ matrix.python }}
92
+ path: ".coverage.*"
93
+ include-hidden-files: true
94
+
95
+ - name: Upload documentation
96
+ if: matrix.session == 'docs-build'
97
+ uses: actions/upload-artifact@v4
98
+ with:
99
+ name: docs
100
+ path: docs/_build
101
+
102
+ coverage:
103
+ runs-on: ubuntu-latest
104
+ needs: tests
105
+ permissions:
106
+ contents: read
107
+ steps:
108
+ - name: Check out the repository
109
+ uses: actions/checkout@v5
110
+ with:
111
+ fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
112
+
113
+ - name: Install uv
114
+ uses: astral-sh/setup-uv@v6
115
+ with:
116
+ enable-cache: true
117
+
118
+ - name: Download coverage data
119
+ uses: actions/download-artifact@v5
120
+ with:
121
+ pattern: coverage-data-*
122
+ merge-multiple: true
123
+
124
+ - name: Combine coverage data and display human readable report
125
+ run: |
126
+ uvx --constraints "${{ github.workspace }}/.github/workflows/constraints.txt" nox --session=coverage
127
+
128
+ - name: Create coverage report
129
+ run: |
130
+ uvx --constraints "${{ github.workspace }}/.github/workflows/constraints.txt" nox --session=coverage -- xml
131
+
132
+ # Need to fix coverage source paths for SonarCloud scanning in GitHub actions.
133
+ # Replace root path with /github/workspace (mounted in docker container).
134
+ - name: Override coverage source paths for SonarCloud
135
+ run: |
136
+ sed -i "s/<source><\/source>/<source>\/home\/runner\/work\/dapla-toolbelt-metadata\/dapla-toolbelt-metadata<\/source>/g" coverage.xml
137
+ sed -i "s/<source>tests/<source>\/home\/runner\/work\/dapla-toolbelt-metadata\/dapla-toolbelt-metadata\/tests/g" coverage.xml
138
+
139
+ - name: SonarQube Cloud Scan
140
+ env:
141
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
142
+ # No need to run SonarCloud analysis if dependabot update or token not defined
143
+ if: env.SONAR_TOKEN != '' && (github.actor != 'dependabot[bot]')
144
+ uses: SonarSource/sonarqube-scan-action@v6.0.0