diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a8c7d5b4..50ef10db 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,15 +19,10 @@ repos: - id: check-toml - id: check-ast - - repo: https://github.com/ambv/black - rev: "25.1.0" - hooks: - - id: black - types: [python] - - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.9.9 hooks: - id: ruff - types: [python] + types_or: [ python, pyi ] args: [--fix] + - id: ruff-format diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f780509..bed68f1a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,8 +3,8 @@ "editor.codeActionsOnSave": { "source.fixAll": "explicit" }, - "editor.defaultFormatter": "ms-python.black-formatter", - "editor.formatOnSave": true + "editor.formatOnSave": true, + "editor.defaultFormatter": "charliermarsh.ruff" }, "python.testing.pytestArgs": [ "tests", diff --git a/README.md b/README.md index cd4f27f1..1ca6d2fe 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=statisticsnorway_dapla-toolbelt-metadata&metric=alert_status&token=ee0a4d273db2bf811222fca5dffccd4592e3d536)][sonarquality] [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)][pre-commit] -[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)][black] [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)][poetry] @@ -22,7 +21,6 @@ [sonarcov]: https://sonarcloud.io/summary/overall?id=statisticsnorway_dapla-toolbelt-metadata [sonarquality]: https://sonarcloud.io/summary/overall?id=statisticsnorway_dapla-toolbelt-metadata [pre-commit]: https://github.com/pre-commit/pre-commit -[black]: https://github.com/psf/black [poetry]: https://python-poetry.org/ Tools and clients for working with the Dapla Metadata system. diff --git a/demo/datasets/create_metadata_for_new_dataset.ipynb b/demo/datasets/create_metadata_for_new_dataset.ipynb index f2b51eed..38b5e05c 100644 --- a/demo/datasets/create_metadata_for_new_dataset.ipynb +++ b/demo/datasets/create_metadata_for_new_dataset.ipynb @@ -7,6 +7,7 @@ "outputs": [], "source": [ "from pprint import pprint\n", + "\n", "from dapla_metadata import datadoc_model as model\n", "from dapla_metadata.datasets import Datadoc\n", "\n", @@ -30,21 +31,26 @@ " root=[\n", " model.LanguageStringTypeItem(languageCode=\"nb\", languageText=\"Test persondata\"),\n", " model.LanguageStringTypeItem(languageCode=\"nn\", languageText=\"Test persondata\"),\n", - " model.LanguageStringTypeItem(languageCode=\"en\", languageText=\"Test personal data\"),\n", - " ]\n", + " model.LanguageStringTypeItem(\n", + " languageCode=\"en\", languageText=\"Test personal data\"\n", + " ),\n", + " ],\n", ")\n", "meta.dataset.description = model.LanguageStringType(\n", " root=[\n", " model.LanguageStringTypeItem(\n", - " languageCode=\"nb\", languageText=\"Data er kun for test formål\"\n", + " languageCode=\"nb\",\n", + " languageText=\"Data er kun for test formål\",\n", " ),\n", " model.LanguageStringTypeItem(\n", - " languageCode=\"nn\", languageText=\"Data er kun for test formål\"\n", + " languageCode=\"nn\",\n", + " languageText=\"Data er kun for test formål\",\n", " ),\n", " model.LanguageStringTypeItem(\n", - " languageCode=\"en\", languageText=\"For testing purposes only\"\n", + " languageCode=\"en\",\n", + " languageText=\"For testing purposes only\",\n", " ),\n", - " ]\n", + " ],\n", ")\n", "meta.dataset.data_source = (\n", " \"23\" # Refers to code in https://www.ssb.no/klass/klassifikasjoner/712\n", @@ -56,14 +62,17 @@ " model.LanguageStringTypeItem(languageCode=\"nb\", languageText=\"Inntekt\"),\n", " model.LanguageStringTypeItem(languageCode=\"nn\", languageText=\"Inntekt\"),\n", " model.LanguageStringTypeItem(\n", - " languageCode=\"en\", languageText=\"Income\"\n", + " languageCode=\"en\",\n", + " languageText=\"Income\",\n", " ),\n", - " ]\n", - ")\n", - "meta.variables_lookup[\"inntekt\"].multiplication_factor = (\n", - " 1000 # Variable expressed in thousands of kroner\n", + " ],\n", ")\n", - "meta.variables_lookup[\"inntekt\"].is_personal_data = model.IsPersonalData.NOT_PERSONAL_DATA" + "meta.variables_lookup[\n", + " \"inntekt\"\n", + "].multiplication_factor = 1000 # Variable expressed in thousands of kroner\n", + "meta.variables_lookup[\n", + " \"inntekt\"\n", + "].is_personal_data = model.IsPersonalData.NOT_PERSONAL_DATA" ] }, { diff --git a/demo/variable_definitions/vardef_demo.ipynb b/demo/variable_definitions/vardef_demo.ipynb index 582fb67f..cefac330 100644 --- a/demo/variable_definitions/vardef_demo.ipynb +++ b/demo/variable_definitions/vardef_demo.ipynb @@ -81,13 +81,13 @@ "outputs": [], "source": [ "draft = models.Draft(\n", - " name = {\n", + " name={\n", " \"nb\": \"test navn\",\n", " \"nn\": \"test namn\",\n", " \"en\": \"test name\",\n", " },\n", - " short_name= \"test_shortname\",\n", - " definition= {\n", + " short_name=\"test_shortname\",\n", + " definition={\n", " \"nb\": \"Skriv en definisjonstekst på norsk bokmål.\",\n", " \"nn\": \"Skriv ein definisjonstekst på nynorsk.\",\n", " \"en\": \"Write a definition text in english.\",\n", @@ -101,7 +101,7 @@ " ],\n", " contains_special_categories_of_personal_data=False,\n", " measurement_type=None,\n", - " valid_from=date(2024,12,18),\n", + " valid_from=date(2024, 12, 18),\n", " external_reference_uri=None,\n", " comment=None,\n", " related_variable_definition_uris=None,\n", @@ -144,13 +144,13 @@ "outputs": [], "source": [ "invalid_draft = models.Draft(\n", - " name = {\n", + " name={\n", " \"nb\": \"test navn\",\n", " \"nn\": \"test namn\",\n", " \"en\": \"test name\",\n", " },\n", - " short_name= \"test_excpetion\",\n", - " definition= {\n", + " short_name=\"test_excpetion\",\n", + " definition={\n", " \"nb\": \"Skriv en definisjonstekst på norsk bokmål.\",\n", " \"nn\": \"Skriv ein definosjonstekst på nynorsk.\",\n", " \"en\": \"Write a definition text in english.\",\n", @@ -164,7 +164,7 @@ " ],\n", " contains_special_categories_of_personal_data=False,\n", " measurement_type=None,\n", - " valid_from=date(2024,12,18),\n", + " valid_from=date(2024, 12, 18),\n", " external_reference_uri=None,\n", " comment=None,\n", " related_variable_definition_uris=None,\n", @@ -212,8 +212,7 @@ "print(Vardef.get_variable_definition(my_draft.id).created_at)\n", "\n", "# Feltene blir ikke automatisk oppdatert etter endringer. Hvis du ønsker å fortsette å få tilgang til feltene direkte fra variabelen, kan du oppdatere på denne måten etter hver endring:\n", - "my_draft = Vardef.get_variable_definition(my_draft.id)\n", - "\n" + "my_draft = Vardef.get_variable_definition(my_draft.id)" ] }, { @@ -268,7 +267,7 @@ "invalid_short_name = models.UpdateDraft(\n", " short_name=\"_)(45)\",\n", ")\n", - "my_draft.update_draft(invalid_short_name)\n" + "my_draft.update_draft(invalid_short_name)" ] }, { @@ -311,8 +310,13 @@ "source": [ "my_vardok_missing_short_name = Vardef.migrate_from_vardok(\"123\")\n", "my_owner_team = \"dapla-felles\"\n", - "my_team_variables_generert_kortnavn = [{variable.short_name, variable.id} for variable in Vardef.list_variable_definitions() if variable.owner[\"team\"] == my_owner_team and variable.short_name.startswith(\"generert\")]\n", - "print(my_team_variables_generert_kortnavn)\n" + "my_team_variables_generert_kortnavn = [\n", + " {variable.short_name, variable.id}\n", + " for variable in Vardef.list_variable_definitions()\n", + " if variable.owner[\"team\"] == my_owner_team\n", + " and variable.short_name.startswith(\"generert\")\n", + "]\n", + "print(my_team_variables_generert_kortnavn)" ] }, { @@ -334,7 +338,12 @@ "source": [ "my_vardok_missing_valid_from = Vardef.migrate_from_vardok(\"100\")\n", "my_owner_team = \"dapla-felles\"\n", - "my_team_variables_generert_valid_from = [{variable.valid_from, variable.id} for variable in Vardef.list_variable_definitions() if variable.owner[\"team\"] == my_owner_team and variable.valid_from == date(1900,1,1)]\n", + "my_team_variables_generert_valid_from = [\n", + " {variable.valid_from, variable.id}\n", + " for variable in Vardef.list_variable_definitions()\n", + " if variable.owner[\"team\"] == my_owner_team\n", + " and variable.valid_from == date(1900, 1, 1)\n", + "]\n", "print(my_team_variables_generert_valid_from)" ] }, @@ -450,12 +459,12 @@ "\n", "new_owner = Patch(\n", " owner=Owner(\n", - " team=\"dapla-felles\",\n", - " groups=[\n", - " \"dapla-felles-developers\",\n", - " \"play-enhjoern-a-developers\",\n", - " ],\n", - "),\n", + " team=\"dapla-felles\",\n", + " groups=[\n", + " \"dapla-felles-developers\",\n", + " \"play-enhjoern-a-developers\",\n", + " ],\n", + " ),\n", ")\n", "\n", "my_draft.create_patch(new_owner)\n", @@ -485,13 +494,13 @@ "source": [ "# Opprette en nytt utkast for å demonstrere overføring av eierskap\n", "owner_draft = models.Draft(\n", - " name = {\n", + " name={\n", " \"nb\": \"test navn\",\n", " \"nn\": \"test namn\",\n", " \"en\": \"test name\",\n", " },\n", - " short_name= \"test_owner_2\",\n", - " definition= {\n", + " short_name=\"test_owner_2\",\n", + " definition={\n", " \"nb\": \"Skriv en definisjonstekst på norsk bokmål.\",\n", " \"nn\": \"Skriv ein definisjonstekst på nynorsk.\",\n", " \"en\": \"Write a definition text in english.\",\n", @@ -505,7 +514,7 @@ " ],\n", " contains_special_categories_of_personal_data=False,\n", " measurement_type=None,\n", - " valid_from=date(2024,12,18),\n", + " valid_from=date(2024, 12, 18),\n", " external_reference_uri=None,\n", " comment=None,\n", " related_variable_definition_uris=None,\n", @@ -521,15 +530,17 @@ "\n", "transfer_owner_draft = Vardef.create_draft(owner_draft)\n", "\n", - "transfer_owner_draft.update_draft(models.UpdateDraft(variable_status=models.VariableStatus.PUBLISHED_INTERNAL))\n", + "transfer_owner_draft.update_draft(\n", + " models.UpdateDraft(variable_status=models.VariableStatus.PUBLISHED_INTERNAL)\n", + ")\n", "\n", "replace_owner = Patch(\n", " owner=Owner(\n", - " team=\"play-enhjoern-a\",\n", - " groups=[\n", - " \"play-enhjoern-a-developers\",\n", - " ],\n", - "),\n", + " team=\"play-enhjoern-a\",\n", + " groups=[\n", + " \"play-enhjoern-a-developers\",\n", + " ],\n", + " ),\n", ")\n", "\n", "# Oppdatere 'Owner'\n", @@ -571,8 +582,7 @@ "\n", "print(f\"Patcher for id {my_draft.id}:\\n\")\n", "for patch in patches:\n", - " print(f\"Patch id: {patch.patch_id}\\nOpprettet: {patch.created_at}\\n\")\n", - "\n" + " print(f\"Patch id: {patch.patch_id}\\nOpprettet: {patch.created_at}\\n\")" ] }, { @@ -611,17 +621,15 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "valid_validity_period = models.ValidityPeriod(\n", " definition={\n", " \"nb\": \"ny definisjon2\",\n", " \"nn\": \"ny definisjon2\",\n", " \"en\": \"new definition2\",\n", " },\n", - " valid_from=date(2040,4,5),\n", + " valid_from=date(2040, 4, 5),\n", ")\n", - "my_draft.create_validity_period(valid_validity_period)\n", - "\n" + "my_draft.create_validity_period(valid_validity_period)" ] }, { @@ -641,7 +649,7 @@ " name={\n", " \"nb\": \"nytt navn\",\n", " },\n", - " valid_from=date(2025,4,5),\n", + " valid_from=date(2025, 4, 5),\n", ")\n", "\n", "my_draft.create_validity_period(invalid_validity_period)" @@ -664,8 +672,9 @@ "\n", "print(f\"Gyldighetsperioder for id {my_draft.id}:\\n\")\n", "for period in validity_periods:\n", - " print(f\"Patch id: {period.patch_id}\\nGyldig fra: {period.valid_from} til {period.valid_until}\\nDefinisjon: {period.definition}\\n\")\n", - "\n" + " print(\n", + " f\"Patch id: {period.patch_id}\\nGyldig fra: {period.valid_from} til {period.valid_until}\\nDefinisjon: {period.definition}\\n\"\n", + " )" ] }, { @@ -684,12 +693,12 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "variable_definitions = Vardef.list_variable_definitions()\n", "\n", "for variable in variable_definitions:\n", - " print(f\"Id: {variable.id}\\nNavn: {variable.name}\\nKortnavn: {variable.short_name}\\nDefinisjon: {variable.definition}\\nEier: {variable.owner}\\n\")\n", - "\n" + " print(\n", + " f\"Id: {variable.id}\\nNavn: {variable.name}\\nKortnavn: {variable.short_name}\\nDefinisjon: {variable.definition}\\nEier: {variable.owner}\\n\"\n", + " )" ] }, { @@ -707,13 +716,14 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "desired_validity = date(2030,2,24)\n", + "desired_validity = date(2030, 2, 24)\n", "filtered_variable_definitions = Vardef.list_variable_definitions(desired_validity)\n", "\n", "print(f\"Valid at {desired_validity}:\\n\")\n", "for variable in filtered_variable_definitions:\n", - " print(f\"Id: {variable.id}\\nName: {variable.name}\\nShort name: {variable.short_name}\\nDefinition: {variable.definition}\\nOwner: {variable.owner}\\nValid: {variable.valid_from} to {variable.valid_until}\\n\")" + " print(\n", + " f\"Id: {variable.id}\\nName: {variable.name}\\nShort name: {variable.short_name}\\nDefinition: {variable.definition}\\nOwner: {variable.owner}\\nValid: {variable.valid_from} to {variable.valid_until}\\n\"\n", + " )" ] }, { @@ -739,20 +749,34 @@ "source": [ "owner_team = \"dapla-felles\"\n", "print(f\"\\nFiltrer etter eierteam {owner_team}: \")\n", - "my_team_variables = [variable for variable in variable_definitions if variable.owner[\"team\"] == owner_team]\n", + "my_team_variables = [\n", + " variable\n", + " for variable in variable_definitions\n", + " if variable.owner[\"team\"] == owner_team\n", + "]\n", "\n", "# Eksempel formattert print som kun printer verdier på norsk bokmål. Hvis det mangler verdi på valgt språk blir feltet tomt.\n", "for variable in my_team_variables:\n", - " print(f\"Id: {variable.id}\\nName: {variable.name['nb']}\\nShort name: {variable.short_name}\\nDefinition: {variable.definition['nb']}\\nOwner: {variable.owner['team']}\\n\")\n", + " print(\n", + " f\"Id: {variable.id}\\nName: {variable.name['nb']}\\nShort name: {variable.short_name}\\nDefinition: {variable.definition['nb']}\\nOwner: {variable.owner['team']}\\n\"\n", + " )\n", "\n", "\n", "print(\"\\nFiltrer etter status `DRAFT`: \")\n", - "draft_variables = [variable for variable in variable_definitions if variable.variable_status == models.VariableStatus.DRAFT]\n", + "draft_variables = [\n", + " variable\n", + " for variable in variable_definitions\n", + " if variable.variable_status == models.VariableStatus.DRAFT\n", + "]\n", "print(draft_variables)\n", "\n", "print(\"\\nFiltrer etter status `PUBLISHED INTERNAL`: \")\n", - "published_intern_variables = [variable for variable in variable_definitions if variable.variable_status == models.VariableStatus.PUBLISHED_INTERNAL]\n", - "print(published_intern_variables)\n" + "published_intern_variables = [\n", + " variable\n", + " for variable in variable_definitions\n", + " if variable.variable_status == models.VariableStatus.PUBLISHED_INTERNAL\n", + "]\n", + "print(published_intern_variables)" ] }, { @@ -792,8 +816,11 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "variable_by_short_name = next(variable for variable in variable_definitions if variable.short_name == \"test_shortname\")\n", + "variable_by_short_name = next(\n", + " variable\n", + " for variable in variable_definitions\n", + " if variable.short_name == \"test_shortname\"\n", + ")\n", "\n", "print(variable_by_short_name.id)" ] @@ -842,8 +869,7 @@ " },\n", " \"email\": \"s320@ssb.no\",\n", " },\n", - "}\n", - "\n" + "}" ] }, { diff --git a/noxfile.py b/noxfile.py index 2d8e2a63..455a54c2 100644 --- a/noxfile.py +++ b/noxfile.py @@ -138,8 +138,6 @@ def precommit(session: Session) -> None: session.install( "pre-commit", "pre-commit-hooks", - "ruff", - "black", ) session.run("pre-commit", *args) if args and args[0] == "install": diff --git a/poetry.lock b/poetry.lock index 7ac06c74..d4609dbf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -329,51 +329,6 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] -[[package]] -name = "black" -version = "25.1.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, - {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, - {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, - {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, - {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, - {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, - {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, - {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, - {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, - {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, - {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, - {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, - {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, - {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, - {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, - {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, - {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, - {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, - {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, - {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, - {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, - {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.10)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "blessed" version = "1.20.0" @@ -3235,18 +3190,6 @@ files = [ qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["docopt", "pytest"] -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - [[package]] name = "pexpect" version = "4.9.0" @@ -6159,4 +6102,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<4.0" -content-hash = "bff7bede3e70151811f3215051b68b1f72cee475384b15987a4a6bb689dfea06" +content-hash = "3bb2437149712ce563ecc267733b580447dd926b759a7b3ff407d60f3e3f5e92" diff --git a/pyproject.toml b/pyproject.toml index c0dbca48..6e2c1853 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,6 @@ typing-extensions = ">=4.12.2" ruamel-yaml = "^0.18.10" [tool.poetry.group.dev.dependencies] -black = ">=24.8.0" pygments = ">=2.18.0" coverage = { extras = ["toml"], version = ">=6.2" } faker = ">=26.1.0" @@ -88,11 +87,6 @@ show_missing = true fail_under = 80 omit = ["*/dapla_metadata/variable_definitions/generated/*"] -[tool.black] -# We don't want to format generated files because it creates large diffs -# when generated code is updated. -extend-exclude = "/generated/" - [tool.mypy] plugins = ["pydantic.mypy"] strict = false @@ -150,6 +144,7 @@ extend-exclude = [ ".ipynb_checkpoints", "noxfile.py", "docs/conf.py", + "generated/", ] # Ruff rules may be customized as desired: https://docs.astral.sh/ruff/rules/ diff --git a/src/dapla_metadata/datasets/utility/utils.py b/src/dapla_metadata/datasets/utility/utils.py index 8db4cd3f..35cce628 100644 --- a/src/dapla_metadata/datasets/utility/utils.py +++ b/src/dapla_metadata/datasets/utility/utils.py @@ -79,7 +79,7 @@ def derive_assessment_from_state(state: DataSetState) -> Assessment: Returns: The derived assessment of the dataset. """ - match (state): + match state: case ( DataSetState.INPUT_DATA | DataSetState.PROCESSED_DATA diff --git a/src/dapla_metadata/variable_definitions/utils/variable_definition_files.py b/src/dapla_metadata/variable_definitions/utils/variable_definition_files.py index 7d47382a..e1dfa1c3 100644 --- a/src/dapla_metadata/variable_definitions/utils/variable_definition_files.py +++ b/src/dapla_metadata/variable_definitions/utils/variable_definition_files.py @@ -3,6 +3,7 @@ import logging from datetime import datetime from pathlib import Path +from typing import TYPE_CHECKING from typing import cast import pytz @@ -43,6 +44,9 @@ apply_norwegian_descriptions_to_model, ) +if TYPE_CHECKING: + from pydantic import JsonValue + logger = logging.getLogger(__name__) @@ -207,7 +211,10 @@ def _populate_commented_map( """Add data to a CommentedMap.""" commented_map[field_name] = value field = model_instance.model_fields[field_name] - description: JsonDict = cast(JsonDict, field.json_schema_extra[NORWEGIAN_DESCRIPTIONS]) # type: ignore[index] + description: JsonValue = cast( + JsonDict, + field.json_schema_extra, + )[NORWEGIAN_DESCRIPTIONS] if description is not None: new_description = ( (REQUIRED_FIELD if field.is_required() else OPTIONAL_FIELD) diff --git a/src/dapla_metadata/variable_definitions/vardef.py b/src/dapla_metadata/variable_definitions/vardef.py index 97fc21ce..2921e419 100644 --- a/src/dapla_metadata/variable_definitions/vardef.py +++ b/src/dapla_metadata/variable_definitions/vardef.py @@ -136,8 +136,7 @@ def create_draft_from_file( try: file_path = Path( # type incongruence (i.e. None) is handled by catching the exception - file_path - or _find_latest_template_file(), # type: ignore [arg-type] + file_path or _find_latest_template_file(), # type: ignore [arg-type] ) except TypeError as e: msg = "Could not deduce a path to the file. Please supply a path to the yaml file you wish to submit with the `file_path` parameter." diff --git a/tests/variable_definitions/test_descriptions.py b/tests/variable_definitions/test_descriptions.py index c98be311..6c0cad47 100644 --- a/tests/variable_definitions/test_descriptions.py +++ b/tests/variable_definitions/test_descriptions.py @@ -1,5 +1,6 @@ """Test class for applying norwegian descriptions to model.""" +from typing import TYPE_CHECKING from typing import cast from pydantic.config import JsonDict @@ -10,6 +11,9 @@ from dapla_metadata.variable_definitions.variable_definition import CompletePatchOutput from dapla_metadata.variable_definitions.variable_definition import VariableDefinition +if TYPE_CHECKING: + from pydantic import JsonValue + def test_descriptions_complete_patch_output( get_norwegian_descriptions_from_file: dict, @@ -17,7 +21,10 @@ def test_descriptions_complete_patch_output( descriptions = get_norwegian_descriptions_from_file apply_norwegian_descriptions_to_model(CompletePatchOutput) field_metadata = CompletePatchOutput.model_fields["name"] - field_value: JsonDict = cast(JsonDict, field_metadata.json_schema_extra["norwegian_description"]) # type: ignore[index] + field_value: JsonValue = cast( + JsonDict, + field_metadata.json_schema_extra, + )["norwegian_description"] assert descriptions.get("name") == field_value @@ -27,5 +34,8 @@ def test_descriptions_variable_definition( descriptions = get_norwegian_descriptions_from_file apply_norwegian_descriptions_to_model(VariableDefinition) field_metadata = VariableDefinition.model_fields["definition"] - field_value: JsonDict = cast(JsonDict, field_metadata.json_schema_extra["norwegian_description"]) # type: ignore[index] + field_value: JsonValue = cast( + JsonDict, + field_metadata.json_schema_extra, + )["norwegian_description"] assert descriptions.get("definition") == field_value diff --git a/tests/variable_definitions/test_vardef.py b/tests/variable_definitions/test_vardef.py index 8ca0c354..17b53675 100644 --- a/tests/variable_definitions/test_vardef.py +++ b/tests/variable_definitions/test_vardef.py @@ -75,13 +75,16 @@ def test_get_variable_definition_by_nonexistent_short_name( VardefClient.set_config(client_configuration) short_name = "nonexistent" mock_response = [] - with patch.object( - VariableDefinitionsApi, - "list_variable_definitions", - return_value=mock_response, - ), pytest.raises( - VariableNotFoundError, - match=f"Variable with short name {short_name} not found", + with ( + patch.object( + VariableDefinitionsApi, + "list_variable_definitions", + return_value=mock_response, + ), + pytest.raises( + VariableNotFoundError, + match=f"Variable with short name {short_name} not found", + ), ): Vardef.get_variable_definition_by_shortname(short_name=short_name) @@ -92,13 +95,16 @@ def test_get_variable_definition_multiple_variables_returned( VardefClient.set_config(client_configuration) short_name = "multiple" mock_response = ["variable", "variable"] - with patch.object( - VariableDefinitionsApi, - "list_variable_definitions", - return_value=mock_response, - ), pytest.raises( - VariableNotFoundError, - match=f"Lookup by short name {short_name} found multiple variables which should not be possible", + with ( + patch.object( + VariableDefinitionsApi, + "list_variable_definitions", + return_value=mock_response, + ), + pytest.raises( + VariableNotFoundError, + match=f"Lookup by short name {short_name} found multiple variables which should not be possible", + ), ): Vardef.get_variable_definition_by_shortname(short_name=short_name)