From efa1432283d89d3ca0654fffe29643a19e3a7622 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Mon, 20 Jan 2025 09:27:42 +0100 Subject: [PATCH] Merge branch 'master' into feature/267-enforce-uniqueness-of-partij --- .github/workflows/oaf-check.yml | 3 +- bin/compile_dependencies.sh | 37 +- requirements/base.txt | 22 +- requirements/ci.in | 2 - requirements/ci.txt | 157 ++++- requirements/dev.in | 3 + requirements/dev.txt | 625 +++++++++++++----- requirements/docs.in | 9 + requirements/test-tools.in | 12 +- .../klantinteracties/admin/actoren.py | 7 +- .../klantinteracties/admin/digitaal_adres.py | 5 +- .../klantinteracties/admin/internetaken.py | 5 +- .../klantinteracties/admin/klantcontacten.py | 11 +- .../api/tests/test_partijen.py | 53 +- .../klantinteracties/models/validators.py | 21 +- .../klantinteracties/tests/test_validators.py | 123 +++- 16 files changed, 798 insertions(+), 297 deletions(-) delete mode 100644 requirements/ci.in create mode 100644 requirements/docs.in diff --git a/.github/workflows/oaf-check.yml b/.github/workflows/oaf-check.yml index c14e5f9b..cdf6b02f 100644 --- a/.github/workflows/oaf-check.yml +++ b/.github/workflows/oaf-check.yml @@ -6,7 +6,6 @@ on: - master tags: - '*' - pull_request: workflow_dispatch: schedule: - cron: '0 7 * * 1' @@ -14,7 +13,7 @@ on: jobs: open-api-workflow-check-oas: - uses: maykinmedia/open-api-workflows/.github/workflows/oaf-check.yml@v2 + uses: maykinmedia/open-api-workflows/.github/workflows/oaf-check.yml@v4 with: python-version: '3.11' diff --git a/bin/compile_dependencies.sh b/bin/compile_dependencies.sh index e7409786..6e3dda11 100755 --- a/bin/compile_dependencies.sh +++ b/bin/compile_dependencies.sh @@ -1,5 +1,4 @@ -#!/bin/bash - +#!/bin/sh # # Compile the dependencies for production, CI and development. # @@ -7,39 +6,33 @@ # # ./bin/compile_dependencies.sh # -# Any extra flags/arguments passed to this wrapper script are passed down to pip-compile. +# Any extra flags/arguments passed to this wrapper script are passed down to uv pip compile. # E.g. to update a package: # # ./bin/compile_dependencies.sh --upgrade-package django - set -ex -toplevel=$(git rev-parse --show-toplevel) +command -v uv || (echo "uv not found on PATH. Install it https://astral.sh/uv" >&2 && exit 1) -cd $toplevel +root_dir=$(git rev-parse --show-toplevel) -export CUSTOM_COMPILE_COMMAND="./bin/compile_dependencies.sh" +export UV_CUSTOM_COMPILE_COMMAND="./bin/compile_dependencies.sh" # Base (& prod) deps -pip-compile \ - --no-emit-index-url \ +uv pip compile \ + --output-file "$root_dir/requirements/base.txt" \ "$@" \ - requirements/base.in + "$root_dir/requirements/base.in" # Dependencies for testing -pip-compile \ - --no-emit-index-url \ - --output-file requirements/ci.txt \ +uv pip compile \ + --output-file "$root_dir/requirements/ci.txt" \ "$@" \ - requirements/base.txt \ - requirements/test-tools.in \ - requirements/ci.in + "$root_dir/requirements/test-tools.in" \ + "$root_dir/requirements/docs.in" # Dev depedencies - exact same set as CI + some extra tooling -pip-compile \ - --no-emit-index-url \ - --output-file requirements/dev.txt \ +uv pip compile \ + --output-file "$root_dir/requirements/dev.txt" \ "$@" \ - requirements/base.txt \ - requirements/test-tools.in \ - requirements/dev.in + "$root_dir/requirements/dev.in" diff --git a/requirements/base.txt b/requirements/base.txt index 555df889..a4ed7b8a 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,9 +1,5 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# +# This file was autogenerated by uv via the following command: # ./bin/compile_dependencies.sh -# amqp==5.2.0 # via kombu annotated-types==0.7.0 @@ -74,7 +70,7 @@ cryptography==43.0.0 # mozilla-django-oidc # pyopenssl # webauthn -django==4.2.15 +django==4.2.17 # via # commonground-api-common # django-admin-index @@ -166,7 +162,7 @@ django-solo==2.3.0 # mozilla-django-oidc-db # notifications-api-common # zgw-consumers -django-two-factor-auth[phonenumberslite,webauthn]==1.16.0 +django-two-factor-auth==1.16.0 # via maykin-2fa djangorestframework==3.15.2 # via @@ -187,7 +183,7 @@ djangorestframework-inclusions==1.2.0 # via open-api-framework drf-nested-routers==0.94.1 # via commonground-api-common -drf-spectacular[sidecar]==0.27.2 +drf-spectacular==0.27.2 # via # commonground-api-common # open-api-framework @@ -217,7 +213,7 @@ isodate==0.6.1 # via commonground-api-common itypes==1.2.0 # via coreapi -jinja2==3.1.4 +jinja2==3.1.5 # via coreschema josepy==1.14.0 # via mozilla-django-oidc @@ -233,13 +229,13 @@ maykin-2fa==1.0.1 # via open-api-framework mozilla-django-oidc==4.0.1 # via mozilla-django-oidc-db -mozilla-django-oidc-db[setup-configuration]==0.21.1 +mozilla-django-oidc-db==0.21.1 # via # -r requirements/base.in # open-api-framework notifications-api-common==0.3.1 # via commonground-api-common -open-api-framework==0.9.1 +open-api-framework==0.9.2 # via -r requirements/base.in orderedmultidict==1.0.1 # via furl @@ -261,7 +257,7 @@ pydantic==2.10.2 # pydantic-settings pydantic-core==2.27.1 # via pydantic -pydantic-settings[yaml]==2.6.1 +pydantic-settings==2.6.1 # via django-setup-configuration pyjwt==2.9.0 # via @@ -325,7 +321,7 @@ six==1.16.0 # python-dateutil sqlparse==0.5.1 # via django -tornado==6.4.1 +tornado==6.4.2 # via flower typing-extensions==4.12.2 # via diff --git a/requirements/ci.in b/requirements/ci.in deleted file mode 100644 index 76375907..00000000 --- a/requirements/ci.in +++ /dev/null @@ -1,2 +0,0 @@ -codecov -pytest diff --git a/requirements/ci.txt b/requirements/ci.txt index c9de754a..1f533b77 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,39 +1,41 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# +# This file was autogenerated by uv via the following command: # ./bin/compile_dependencies.sh -# alabaster==0.7.16 # via sphinx amqp==5.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # kombu annotated-types==0.7.0 # via + # -c requirements/base.txt # -r requirements/base.txt # pydantic ape-pie==0.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # notifications-api-common # zgw-consumers asgiref==3.8.1 # via + # -c requirements/base.txt # -r requirements/base.txt # django # django-axes # django-cors-headers asn1crypto==1.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # webauthn astroid==3.2.4 # via pylint attrs==23.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # glom # jsonschema @@ -44,45 +46,54 @@ beautifulsoup4==4.12.3 # via webtest billiard==4.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # celery black==24.4.2 # via -r requirements/test-tools.in bleach==6.1.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework boltons==24.0.0 # via + # -c requirements/base.txt # -r requirements/base.txt # face # glom cbor2==5.6.4 # via + # -c requirements/base.txt # -r requirements/base.txt # webauthn celery==5.4.0 # via + # -c requirements/base.txt # -r requirements/base.txt # flower # notifications-api-common # open-api-framework certifi==2024.7.4 # via + # -c requirements/base.txt # -r requirements/base.txt # elastic-apm # requests # sentry-sdk cffi==1.16.0 # via + # -c requirements/base.txt # -r requirements/base.txt # cryptography charset-normalizer==3.3.2 # via + # -c requirements/base.txt # -r requirements/base.txt # requests click==8.1.7 # via + # -c requirements/base.txt # -r requirements/base.txt # black # celery @@ -91,36 +102,43 @@ click==8.1.7 # click-repl click-didyoumean==0.3.1 # via + # -c requirements/base.txt # -r requirements/base.txt # celery click-plugins==1.1.1 # via + # -c requirements/base.txt # -r requirements/base.txt # celery click-repl==0.3.0 # via + # -c requirements/base.txt # -r requirements/base.txt # celery codecov==2.1.13 - # via -r requirements/ci.in + # via -r requirements/test-tools.in commonground-api-common==2.4.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework commonmark==0.9.1 # via recommonmark coreapi==2.3.3 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common coreschema==0.0.4 # via + # -c requirements/base.txt # -r requirements/base.txt # coreapi coverage==4.5.4 # via codecov cryptography==43.0.0 # via + # -c requirements/base.txt # -r requirements/base.txt # django-simple-certmanager # josepy @@ -131,8 +149,9 @@ cssselect==1.2.0 # via pyquery dill==0.3.8 # via pylint -django==4.2.15 +django==4.2.17 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # django-admin-index @@ -170,107 +189,130 @@ django==4.2.15 # zgw-consumers django-admin-index==3.1.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-appconf==1.0.6 # via + # -c requirements/base.txt # -r requirements/base.txt # django-log-outgoing-requests django-axes==6.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-cors-headers==4.4.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-csp==3.8 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-filter==24.2 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # open-api-framework django-formtools==2.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # django-two-factor-auth django-jsonform==2.22.0 # via + # -c requirements/base.txt # -r requirements/base.txt # mozilla-django-oidc-db # open-api-framework django-log-outgoing-requests==0.6.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-markup==1.8.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-ordered-model==3.7.4 # via + # -c requirements/base.txt # -r requirements/base.txt # django-admin-index django-otp==1.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # django-two-factor-auth django-phonenumber-field==7.3.0 # via + # -c requirements/base.txt # -r requirements/base.txt # django-two-factor-auth django-privates==2.0.0.post1 # via + # -c requirements/base.txt # -r requirements/base.txt # django-simple-certmanager django-redis==5.4.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-relativedelta==2.0.0 # via + # -c requirements/base.txt # -r requirements/base.txt # zgw-consumers django-rest-framework-condition==0.1.1 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common django-sendfile2==0.7.1 # via + # -c requirements/base.txt # -r requirements/base.txt # django-privates django-sessionprofile==3.0.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework django-setup-configuration==0.4.0 # via + # -c requirements/base.txt # -r requirements/base.txt - # mozilla-django-oidc-db # open-api-framework django-simple-certmanager==2.3.0 # via + # -c requirements/base.txt # -r requirements/base.txt # zgw-consumers django-solo==2.3.0 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # django-log-outgoing-requests # mozilla-django-oidc-db # notifications-api-common # zgw-consumers -django-two-factor-auth[phonenumberslite,webauthn]==1.16.0 +django-two-factor-auth==1.16.0 # via + # -c requirements/base.txt # -r requirements/base.txt # maykin-2fa django-webtest==1.9.11 # via -r requirements/test-tools.in djangorestframework==3.15.2 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # djangorestframework-gis @@ -281,15 +323,18 @@ djangorestframework==3.15.2 # open-api-framework djangorestframework-camel-case==1.4.2 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # notifications-api-common djangorestframework-gis==1.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework djangorestframework-inclusions==1.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework docutils==0.20.1 @@ -300,27 +345,33 @@ docutils==0.20.1 # sphinx-tabs drf-nested-routers==0.94.1 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common -drf-spectacular[sidecar]==0.27.2 +drf-spectacular==0.27.2 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # open-api-framework drf-spectacular-sidecar==2024.7.1 # via + # -c requirements/base.txt # -r requirements/base.txt # drf-spectacular ecs-logging==2.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # elastic-apm elastic-apm==6.23.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework face==20.1.1 # via + # -c requirements/base.txt # -r requirements/base.txt # glom factory-boy==3.3.0 @@ -331,24 +382,29 @@ flake8==7.1.0 # via -r requirements/test-tools.in flower==2.0.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework freezegun==1.5.1 # via -r requirements/test-tools.in furl==2.1.3 # via + # -c requirements/base.txt # -r requirements/base.txt # ape-pie glom==23.5.0 # via + # -c requirements/base.txt # -r requirements/base.txt # mozilla-django-oidc-db humanize==4.10.0 # via + # -c requirements/base.txt # -r requirements/base.txt # flower idna==3.7 # via + # -c requirements/base.txt # -r requirements/base.txt # requests # yarl @@ -356,16 +412,19 @@ imagesize==1.4.1 # via sphinx inflection==0.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # drf-spectacular iniconfig==2.0.0 # via pytest iso-639==0.4.5 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common isodate==0.6.1 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common isort==5.13.2 @@ -374,27 +433,33 @@ isort==5.13.2 # pylint itypes==1.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # coreapi -jinja2==3.1.4 +jinja2==3.1.5 # via + # -c requirements/base.txt # -r requirements/base.txt # coreschema # sphinx josepy==1.14.0 # via + # -c requirements/base.txt # -r requirements/base.txt # mozilla-django-oidc jsonschema==4.23.0 # via + # -c requirements/base.txt # -r requirements/base.txt # drf-spectacular jsonschema-specifications==2023.12.1 # via + # -c requirements/base.txt # -r requirements/base.txt # jsonschema kombu==5.3.7 # via + # -c requirements/base.txt # -r requirements/base.txt # celery lxml==5.2.2 @@ -403,10 +468,12 @@ markdown==3.6 # via sphinx-markdown-tables markupsafe==2.1.5 # via + # -c requirements/base.txt # -r requirements/base.txt # jinja2 maykin-2fa==1.0.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework mccabe==0.7.0 @@ -415,10 +482,12 @@ mccabe==0.7.0 # pylint mozilla-django-oidc==4.0.1 # via + # -c requirements/base.txt # -r requirements/base.txt # mozilla-django-oidc-db -mozilla-django-oidc-db[setup-configuration]==0.21.1 +mozilla-django-oidc-db==0.21.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework multidict==6.0.5 @@ -427,16 +496,21 @@ mypy-extensions==1.0.0 # via black notifications-api-common==0.3.1 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common -open-api-framework==0.9.1 - # via -r requirements/base.txt +open-api-framework==0.9.2 + # via + # -c requirements/base.txt + # -r requirements/base.txt orderedmultidict==1.0.1 # via + # -c requirements/base.txt # -r requirements/base.txt # furl oyaml==1.0 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common packaging==24.1 @@ -450,6 +524,7 @@ pep8==1.7.1 # via -r requirements/test-tools.in phonenumberslite==8.13.42 # via + # -c requirements/base.txt # -r requirements/base.txt # django-two-factor-auth platformdirs==4.2.2 @@ -460,33 +535,40 @@ pluggy==1.5.0 # via pytest prometheus-client==0.20.0 # via + # -c requirements/base.txt # -r requirements/base.txt # flower prompt-toolkit==3.0.47 # via + # -c requirements/base.txt # -r requirements/base.txt # click-repl psycopg2==2.9.9 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework pycodestyle==2.12.0 # via flake8 pycparser==2.22 # via + # -c requirements/base.txt # -r requirements/base.txt # cffi pydantic==2.10.2 # via + # -c requirements/base.txt # -r requirements/base.txt # django-setup-configuration # pydantic-settings pydantic-core==2.27.1 # via + # -c requirements/base.txt # -r requirements/base.txt # pydantic -pydantic-settings[yaml]==2.6.1 +pydantic-settings==2.6.1 # via + # -c requirements/base.txt # -r requirements/base.txt # django-setup-configuration pyflakes==3.2.0 @@ -497,6 +579,7 @@ pygments==2.18.0 # sphinx-tabs pyjwt==2.9.0 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # zgw-consumers @@ -504,19 +587,22 @@ pylint==3.2.6 # via -r requirements/test-tools.in pyopenssl==24.2.1 # via + # -c requirements/base.txt # -r requirements/base.txt # josepy # webauthn pypng==0.20220715.0 # via + # -c requirements/base.txt # -r requirements/base.txt # qrcode pyquery==2.0.0 # via -r requirements/test-tools.in pytest==8.3.3 - # via -r requirements/ci.in + # via -r requirements/test-tools.in python-dateutil==2.9.0.post0 # via + # -c requirements/base.txt # -r requirements/base.txt # celery # django-relativedelta @@ -524,19 +610,23 @@ python-dateutil==2.9.0.post0 # freezegun python-decouple==3.8 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework python-dotenv==1.0.1 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework # pydantic-settings pytz==2024.1 # via + # -c requirements/base.txt # -r requirements/base.txt # flower pyyaml==6.0.1 # via + # -c requirements/base.txt # -r requirements/base.txt # drf-spectacular # oyaml @@ -544,21 +634,25 @@ pyyaml==6.0.1 # vcrpy qrcode==7.4.2 # via + # -c requirements/base.txt # -r requirements/base.txt # django-two-factor-auth recommonmark==0.7.1 - # via -r requirements/test-tools.in + # via -r requirements/docs.in redis==5.0.8 # via + # -c requirements/base.txt # -r requirements/base.txt # django-redis referencing==0.35.1 # via + # -c requirements/base.txt # -r requirements/base.txt # jsonschema # jsonschema-specifications requests==2.32.3 # via + # -c requirements/base.txt # -r requirements/base.txt # ape-pie # codecov @@ -572,20 +666,24 @@ requests==2.32.3 # zgw-consumers requests-mock==1.12.1 # via + # -c requirements/base.txt # -r requirements/base.txt # -r requirements/test-tools.in # commonground-api-common rpds-py==0.19.1 # via + # -c requirements/base.txt # -r requirements/base.txt # jsonschema # referencing sentry-sdk==2.12.0 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework six==1.16.0 # via + # -c requirements/base.txt # -r requirements/base.txt # bleach # furl @@ -598,17 +696,17 @@ soupsieve==2.5 # via beautifulsoup4 sphinx==7.4.7 # via - # -r requirements/test-tools.in + # -r requirements/docs.in # recommonmark # sphinx-rtd-theme # sphinx-tabs # sphinxcontrib-jquery sphinx-markdown-tables==0.0.17 - # via -r requirements/test-tools.in + # via -r requirements/docs.in sphinx-rtd-theme==2.0.0 - # via -r requirements/test-tools.in + # via -r requirements/docs.in sphinx-tabs==3.4.5 - # via -r requirements/test-tools.in + # via -r requirements/docs.in sphinxcontrib-applehelp==2.0.0 # via sphinx sphinxcontrib-devhelp==2.0.0 @@ -625,18 +723,21 @@ sphinxcontrib-serializinghtml==2.0.0 # via sphinx sqlparse==0.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # django tblib==3.0.0 # via -r requirements/test-tools.in tomlkit==0.13.0 # via pylint -tornado==6.4.1 +tornado==6.4.2 # via + # -c requirements/base.txt # -r requirements/base.txt # flower typing-extensions==4.12.2 # via + # -c requirements/base.txt # -r requirements/base.txt # faker # mozilla-django-oidc-db @@ -646,45 +747,53 @@ typing-extensions==4.12.2 # zgw-consumers tzdata==2024.1 # via + # -c requirements/base.txt # -r requirements/base.txt # celery uritemplate==4.1.1 # via + # -c requirements/base.txt # -r requirements/base.txt # coreapi # drf-spectacular urllib3==2.2.2 # via + # -c requirements/base.txt # -r requirements/base.txt # elastic-apm # requests # sentry-sdk uwsgi==2.0.26 # via + # -c requirements/base.txt # -r requirements/base.txt # open-api-framework vcrpy==6.0.1 # via -r requirements/test-tools.in vine==5.1.0 # via + # -c requirements/base.txt # -r requirements/base.txt # amqp # celery # kombu -waitress==3.0.0 +waitress==3.0.1 # via # -r requirements/test-tools.in # webtest wcwidth==0.2.13 # via + # -c requirements/base.txt # -r requirements/base.txt # prompt-toolkit webauthn==2.2.0 # via + # -c requirements/base.txt # -r requirements/base.txt # django-two-factor-auth webencodings==0.5.1 # via + # -c requirements/base.txt # -r requirements/base.txt # bleach webob==1.8.8 @@ -693,6 +802,7 @@ webtest==3.0.0 # via django-webtest wrapt==1.16.0 # via + # -c requirements/base.txt # -r requirements/base.txt # elastic-apm # vcrpy @@ -700,6 +810,7 @@ yarl==1.9.4 # via vcrpy zgw-consumers==0.35.1 # via + # -c requirements/base.txt # -r requirements/base.txt # commonground-api-common # notifications-api-common diff --git a/requirements/dev.in b/requirements/dev.in index cd67c099..768b06b4 100644 --- a/requirements/dev.in +++ b/requirements/dev.in @@ -1,3 +1,6 @@ +-c ci.txt +-r ci.txt + # Helpers pip-tools gitpython diff --git a/requirements/dev.txt b/requirements/dev.txt index 06b99563..f9135f69 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,60 +1,79 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# +# This file was autogenerated by uv via the following command: # ./bin/compile_dependencies.sh -# alabaster==0.7.16 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx amqp==5.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # kombu annotated-types==0.7.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # pydantic ape-pie==0.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # notifications-api-common # zgw-consumers asgiref==3.8.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django # django-axes # django-cors-headers asn1crypto==1.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # webauthn astroid==3.2.4 - # via pylint + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # pylint attrs==23.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # glom # jsonschema # referencing babel==2.15.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx beautifulsoup4==4.12.3 - # via webtest + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # webtest billiard==4.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery black==24.4.2 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt bleach==6.1.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework boltons==24.0.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # face # glom build==1.2.1 @@ -63,31 +82,37 @@ bump2version==1.0.1 # via -r requirements/dev.in cbor2==5.6.4 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # webauthn celery==5.4.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # flower # notifications-api-common # open-api-framework certifi==2024.7.4 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # elastic-apm # requests # sentry-sdk cffi==1.16.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # cryptography charset-normalizer==3.3.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # requests click==8.1.7 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # black # celery # click-didyoumean @@ -96,45 +121,71 @@ click==8.1.7 # pip-tools click-didyoumean==0.3.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery click-plugins==1.1.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery click-repl==0.3.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery +codecov==2.1.13 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt commonground-api-common==2.4.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework commonmark==0.9.1 - # via recommonmark + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # recommonmark coreapi==2.3.3 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common coreschema==0.0.4 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # coreapi +coverage==4.5.4 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # codecov cryptography==43.0.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-simple-certmanager # josepy # mozilla-django-oidc # pyopenssl # webauthn cssselect==1.2.0 - # via pyquery + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # pyquery dill==0.3.8 - # via pylint -django==4.2.15 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt + # pylint +django==4.2.17 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # django-admin-index # django-appconf @@ -173,23 +224,28 @@ django==4.2.15 # zgw-consumers django-admin-index==3.1.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-appconf==1.0.6 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-log-outgoing-requests django-axes==6.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-cors-headers==4.4.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-csp==3.8 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-debug-toolbar==4.4.6 # via -r requirements/dev.in @@ -197,88 +253,108 @@ django-extensions==3.2.3 # via -r requirements/dev.in django-filter==24.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # open-api-framework django-formtools==2.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-two-factor-auth django-jsonform==2.22.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # mozilla-django-oidc-db # open-api-framework django-log-outgoing-requests==0.6.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-markup==1.8.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-ordered-model==3.7.4 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-admin-index django-otp==1.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-two-factor-auth django-phonenumber-field==7.3.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-two-factor-auth django-privates==2.0.0.post1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-simple-certmanager django-redis==5.4.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-relativedelta==2.0.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # zgw-consumers django-rest-framework-condition==0.1.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common django-sendfile2==0.7.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-privates django-sessionprofile==3.0.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-setup-configuration==0.4.0 # via - # -r requirements/base.txt - # mozilla-django-oidc-db + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework django-simple-certmanager==2.3.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # zgw-consumers django-solo==2.3.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # django-log-outgoing-requests # mozilla-django-oidc-db # notifications-api-common # zgw-consumers -django-two-factor-auth[phonenumberslite,webauthn]==1.16.0 +django-two-factor-auth==1.16.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # maykin-2fa django-webtest==1.9.11 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt djangorestframework==3.15.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # djangorestframework-gis # djangorestframework-inclusions @@ -288,63 +364,85 @@ djangorestframework==3.15.2 # open-api-framework djangorestframework-camel-case==1.4.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # notifications-api-common djangorestframework-gis==1.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework djangorestframework-inclusions==1.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework docutils==0.20.1 # via + # -c requirements/ci.txt + # -r requirements/ci.txt # recommonmark # sphinx # sphinx-rtd-theme # sphinx-tabs drf-nested-routers==0.94.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common -drf-spectacular[sidecar]==0.27.2 +drf-spectacular==0.27.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # open-api-framework drf-spectacular-sidecar==2024.7.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # drf-spectacular ecs-logging==2.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # elastic-apm elastic-apm==6.23.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework face==20.1.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # glom factory-boy==3.3.0 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt faker==32.1.0 - # via factory-boy + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # factory-boy flake8==7.1.0 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt flower==2.0.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework freezegun==1.5.1 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt furl==2.1.3 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # ape-pie gitdb==4.0.11 # via gitpython @@ -352,226 +450,326 @@ gitpython==3.1.43 # via -r requirements/dev.in glom==23.5.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # mozilla-django-oidc-db humanize==4.10.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # flower idna==3.7 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # requests # yarl imagesize==1.4.1 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx inflection==0.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # drf-spectacular +iniconfig==2.0.0 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # pytest iso-639==0.4.5 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common isodate==0.6.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common isort==5.13.2 # via - # -r requirements/test-tools.in + # -c requirements/ci.txt + # -r requirements/ci.txt # pylint itypes==1.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # coreapi -jinja2==3.1.4 +jinja2==3.1.5 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # coreschema # sphinx josepy==1.14.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # mozilla-django-oidc jsonschema==4.23.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # drf-spectacular jsonschema-specifications==2023.12.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # jsonschema kombu==5.3.7 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery lxml==5.2.2 - # via pyquery + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # pyquery markdown==3.6 - # via sphinx-markdown-tables + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx-markdown-tables markupsafe==2.1.5 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # jinja2 maykin-2fa==1.0.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework mccabe==0.7.0 # via + # -c requirements/ci.txt + # -r requirements/ci.txt # flake8 # pylint mozilla-django-oidc==4.0.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # mozilla-django-oidc-db -mozilla-django-oidc-db[setup-configuration]==0.21.1 +mozilla-django-oidc-db==0.21.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework multidict==6.0.5 - # via yarl + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # yarl mypy-extensions==1.0.0 - # via black + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # black notifications-api-common==0.3.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common -open-api-framework==0.9.1 - # via -r requirements/base.txt +open-api-framework==0.9.2 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt orderedmultidict==1.0.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # furl oyaml==1.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common packaging==24.1 # via + # -c requirements/ci.txt + # -r requirements/ci.txt # black # build + # pytest # sphinx pathspec==0.12.1 - # via black + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # black pep8==1.7.1 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt phonenumberslite==8.13.42 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-two-factor-auth +pip==24.3.1 + # via pip-tools pip-tools==7.4.1 # via -r requirements/dev.in platformdirs==4.2.2 # via + # -c requirements/ci.txt + # -r requirements/ci.txt # black # pylint +pluggy==1.5.0 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # pytest prometheus-client==0.20.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # flower prompt-toolkit==3.0.47 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # click-repl psycopg2==2.9.9 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework pycodestyle==2.12.0 - # via flake8 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # flake8 pycparser==2.22 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # cffi pydantic==2.10.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-setup-configuration # pydantic-settings pydantic-core==2.27.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # pydantic -pydantic-settings[yaml]==2.6.1 +pydantic-settings==2.6.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-setup-configuration pyflakes==3.2.0 - # via flake8 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # flake8 pygments==2.18.0 # via + # -c requirements/ci.txt + # -r requirements/ci.txt # sphinx # sphinx-tabs pyjwt==2.9.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # zgw-consumers pylint==3.2.6 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt pyopenssl==24.2.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # josepy # webauthn pypng==0.20220715.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # qrcode pyproject-hooks==1.1.0 # via # build # pip-tools pyquery==2.0.0 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt +pytest==8.3.3 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt python-dateutil==2.9.0.post0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery # django-relativedelta # faker # freezegun python-decouple==3.8 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework python-dotenv==1.0.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework # pydantic-settings pytz==2024.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # flower pyyaml==6.0.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # drf-spectacular # oyaml # pydantic-settings # vcrpy qrcode==7.4.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-two-factor-auth recommonmark==0.7.1 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt redis==5.0.8 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-redis referencing==0.35.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # jsonschema # jsonschema-specifications requests==2.32.3 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # ape-pie + # codecov # commonground-api-common # coreapi # django-log-outgoing-requests @@ -582,21 +780,26 @@ requests==2.32.3 # zgw-consumers requests-mock==1.12.1 # via - # -r requirements/base.txt - # -r requirements/test-tools.in + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common rpds-py==0.19.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # jsonschema # referencing sentry-sdk==2.12.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework +setuptools==75.6.0 + # via pip-tools six==1.16.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # bleach # furl # isodate @@ -605,52 +808,94 @@ six==1.16.0 smmap==5.0.1 # via gitdb snowballstemmer==2.2.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx soupsieve==2.5 - # via beautifulsoup4 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # beautifulsoup4 sphinx==7.4.7 # via - # -r requirements/test-tools.in + # -c requirements/ci.txt + # -r requirements/ci.txt # recommonmark # sphinx-rtd-theme # sphinx-tabs # sphinxcontrib-jquery sphinx-markdown-tables==0.0.17 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt sphinx-rtd-theme==2.0.0 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt sphinx-tabs==3.4.5 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt sphinxcontrib-applehelp==2.0.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx sphinxcontrib-devhelp==2.0.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx sphinxcontrib-htmlhelp==2.1.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx sphinxcontrib-jquery==4.1 - # via sphinx-rtd-theme + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx sphinxcontrib-qthelp==2.0.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx sphinxcontrib-serializinghtml==2.0.0 - # via sphinx + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # sphinx sqlparse==0.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django # django-debug-toolbar tblib==3.0.0 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt tomlkit==0.13.0 - # via pylint -tornado==6.4.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt + # pylint +tornado==6.4.2 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt # flower typing-extensions==4.12.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # faker # mozilla-django-oidc-db # pydantic @@ -659,67 +904,85 @@ typing-extensions==4.12.2 # zgw-consumers tzdata==2024.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # celery uritemplate==4.1.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # coreapi # drf-spectacular urllib3==2.2.2 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # elastic-apm # requests # sentry-sdk uwsgi==2.0.26 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # open-api-framework vcrpy==6.0.1 - # via -r requirements/test-tools.in + # via + # -c requirements/ci.txt + # -r requirements/ci.txt vine==5.1.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # amqp # celery # kombu -waitress==3.0.0 +waitress==3.0.1 # via - # -r requirements/test-tools.in + # -c requirements/ci.txt + # -r requirements/ci.txt # webtest wcwidth==0.2.13 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # prompt-toolkit webauthn==2.2.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # django-two-factor-auth webencodings==0.5.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # bleach webob==1.8.8 - # via webtest + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # webtest webtest==3.0.0 - # via django-webtest + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # django-webtest wheel==0.43.0 # via pip-tools wrapt==1.16.0 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # elastic-apm # vcrpy yarl==1.9.4 - # via vcrpy + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # vcrpy zgw-consumers==0.35.1 # via - # -r requirements/base.txt + # -c requirements/ci.txt + # -r requirements/ci.txt # commonground-api-common # notifications-api-common # open-api-framework - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/requirements/docs.in b/requirements/docs.in new file mode 100644 index 00000000..23f29dde --- /dev/null +++ b/requirements/docs.in @@ -0,0 +1,9 @@ +-c base.txt +-r base.txt + +# Documentation +sphinx +sphinx_rtd_theme +recommonmark +sphinx-markdown-tables +sphinx-tabs diff --git a/requirements/test-tools.in b/requirements/test-tools.in index d5a4403d..1b186d3a 100644 --- a/requirements/test-tools.in +++ b/requirements/test-tools.in @@ -1,3 +1,6 @@ +-c base.txt +-r base.txt + # Dependencies only relevant for (unit) testing django-webtest factory-boy @@ -9,15 +12,10 @@ requests-mock tblib vcrpy waitress>=2.1.1 +codecov +pytest # Code formatting black isort flake8 - -# Documentation -sphinx -sphinx_rtd_theme -recommonmark -sphinx-markdown-tables -sphinx-tabs diff --git a/src/openklant/components/klantinteracties/admin/actoren.py b/src/openklant/components/klantinteracties/admin/actoren.py index 87596dd6..3459cf92 100644 --- a/src/openklant/components/klantinteracties/admin/actoren.py +++ b/src/openklant/components/klantinteracties/admin/actoren.py @@ -53,7 +53,10 @@ class ActorAdmin(admin.ModelAdmin): "soort_actor", "indicatie_actief", ) - search_fields = ("naam",) + search_fields = ( + "naam", + "uuid", + ) inlines = ( ActorKlantcontactInlineAdmin, GeautomatiseerdeActorInlineAdmin, @@ -61,11 +64,13 @@ class ActorAdmin(admin.ModelAdmin): OrganisatorischeEenheidInlineAdmin, InterneTaakInlineAdmin, ) + readonly_fields = ("uuid",) fieldsets = ( ( None, { "fields": [ + "uuid", "naam", "soort_actor", "indicatie_actief", diff --git a/src/openklant/components/klantinteracties/admin/digitaal_adres.py b/src/openklant/components/klantinteracties/admin/digitaal_adres.py index 28a4ada5..d5f525f6 100644 --- a/src/openklant/components/klantinteracties/admin/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/admin/digitaal_adres.py @@ -21,6 +21,9 @@ def clean_adres(self): @admin.register(DigitaalAdres) class DigitaalAdresAdmin(admin.ModelAdmin): readonly_fields = ("uuid",) - search_fields = ("adres",) + search_fields = ( + "adres", + "uuid", + ) autocomplete_fields = ("partij",) form = DigitaalAdresAdminForm diff --git a/src/openklant/components/klantinteracties/admin/internetaken.py b/src/openklant/components/klantinteracties/admin/internetaken.py index cb159b71..f1886044 100644 --- a/src/openklant/components/klantinteracties/admin/internetaken.py +++ b/src/openklant/components/klantinteracties/admin/internetaken.py @@ -28,7 +28,10 @@ class InterneTaakAdmin(admin.ModelAdmin): "toegewezen_op", "afgehandeld_op", ) - search_fields = ("nummer",) + search_fields = ( + "nummer", + "uuid", + ) list_filter = ( "actoren", "status", diff --git a/src/openklant/components/klantinteracties/admin/klantcontacten.py b/src/openklant/components/klantinteracties/admin/klantcontacten.py index c26ee379..155d2bbe 100644 --- a/src/openklant/components/klantinteracties/admin/klantcontacten.py +++ b/src/openklant/components/klantinteracties/admin/klantcontacten.py @@ -15,11 +15,13 @@ class BetrokkeneInlineAdmin(admin.StackedInline): "contactnaam_achternaam", ) autocomplete_fields = ("partij",) + readonly_fields = ("uuid",) fieldsets = [ ( None, { "fields": [ + "uuid", "partij", "klantcontact", "rol", @@ -70,16 +72,19 @@ class BetrokkeneInlineAdmin(admin.StackedInline): @admin.register(Betrokkene) class BetrokkeneAdmin(admin.ModelAdmin): search_fields = ( + "uuid", "contactnaam_voorletters", "contactnaam_voorvoegsel_achternaam", "contactnaam_achternaam", ) autocomplete_fields = ("partij",) + readonly_fields = ("uuid",) fieldsets = [ ( None, { "fields": [ + "uuid", "partij", "klantcontact", "rol", @@ -159,8 +164,12 @@ class KlantcontactAdmin(admin.ModelAdmin): BijlageInlineAdmin, InterneTaakInlineAdmin, ] - search_fields = ("nummer",) + search_fields = ( + "nummer", + "uuid", + ) date_hierarchy = "plaatsgevonden_op" + readonly_fields = ("uuid",) @admin.display(empty_value="---") def betrokkene_namen(self, obj): diff --git a/src/openklant/components/klantinteracties/api/tests/test_partijen.py b/src/openklant/components/klantinteracties/api/tests/test_partijen.py index 62704770..fa925abd 100644 --- a/src/openklant/components/klantinteracties/api/tests/test_partijen.py +++ b/src/openklant/components/klantinteracties/api/tests/test_partijen.py @@ -2126,7 +2126,7 @@ def test_invalid_validation_partij_identificator_code_objecttype(self): self.assertEqual(response.data["invalid_params"][0]["code"], "invalid") self.assertEqual( response.data["invalid_params"][0]["reason"], - "voor `codeRegister` brp zijn alleen deze waarden toegestaan: ['natuurlijk_persoon', 'overig']", + "voor `codeRegister` brp zijn alleen deze waarden toegestaan: ['natuurlijk_persoon']", ) def test_invalid_validation_partij_identificator_code_soort_object_id(self): @@ -2185,40 +2185,36 @@ def test_invalid_validation_partij_identificator_object_id(self): "Deze waarde is ongeldig, reden: Waarde moet 9 tekens lang zijn", ) - def test_valid_validation_partij_identificator(self): - # All validations pass + def test_invalid_overig_code_objecttype_validation_partij_identificator(self): + # Overig no validation url = reverse("klantinteracties:partijidentificator-list") partij = PartijFactory.create() data = { "identificeerdePartij": {"uuid": str(partij.uuid)}, "anderePartijIdentificator": "anderePartijIdentificator", "partijIdentificator": { - "codeObjecttype": "natuurlijk_persoon", + "codeObjecttype": "overig", "codeSoortObjectId": "bsn", "objectId": "296648875", "codeRegister": "brp", }, } response = self.client.post(url, data) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual( - response.data["partij_identificator"]["code_objecttype"], - "natuurlijk_persoon", - ) - self.assertEqual( - response.data["partij_identificator"]["code_soort_object_id"], - "bsn", - ) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.data["code"], "invalid") + self.assertEqual(response.data["title"], "Invalid input.") self.assertEqual( - response.data["partij_identificator"]["object_id"], "296648875" + response.data["invalid_params"][0]["name"], + "partijIdentificatorCodeObjecttype", ) + self.assertEqual(response.data["invalid_params"][0]["code"], "invalid") self.assertEqual( - response.data["partij_identificator"]["code_register"], - "brp", + response.data["invalid_params"][0]["reason"], + "voor `codeRegister` brp zijn alleen deze waarden toegestaan: ['natuurlijk_persoon']", ) - def test_valid_overig_code_register_validation_partij_identificator(self): - # Overig no validation + def test_valid_validation_partij_identificator(self): + # All validations pass url = reverse("klantinteracties:partijidentificator-list") partij = PartijFactory.create() data = { @@ -2227,8 +2223,8 @@ def test_valid_overig_code_register_validation_partij_identificator(self): "partijIdentificator": { "codeObjecttype": "natuurlijk_persoon", "codeSoortObjectId": "bsn", - "objectId": 296648875, - "codeRegister": "overig", + "objectId": "296648875", + "codeRegister": "brp", }, } response = self.client.post(url, data) @@ -2246,10 +2242,10 @@ def test_valid_overig_code_register_validation_partij_identificator(self): ) self.assertEqual( response.data["partij_identificator"]["code_register"], - "overig", + "brp", ) - def test_valid_overig_code_objecttype_validation_partij_identificator(self): + def test_valid_overig_code_register_validation_partij_identificator(self): # Overig no validation url = reverse("klantinteracties:partijidentificator-list") partij = PartijFactory.create() @@ -2257,29 +2253,28 @@ def test_valid_overig_code_objecttype_validation_partij_identificator(self): "identificeerdePartij": {"uuid": str(partij.uuid)}, "anderePartijIdentificator": "anderePartijIdentificator", "partijIdentificator": { - "codeObjecttype": "overig", + "codeObjecttype": "natuurlijk_persoon", "codeSoortObjectId": "bsn", - "objectId": 296648875, - "codeRegister": "brp", + "objectId": "296648875", + "codeRegister": "overig", }, } response = self.client.post(url, data) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( response.data["partij_identificator"]["code_objecttype"], - "overig", + "natuurlijk_persoon", ) self.assertEqual( response.data["partij_identificator"]["code_soort_object_id"], "bsn", ) self.assertEqual( - response.data["partij_identificator"]["object_id"], - "296648875", + response.data["partij_identificator"]["object_id"], "296648875" ) self.assertEqual( response.data["partij_identificator"]["code_register"], - "brp", + "overig", ) diff --git a/src/openklant/components/klantinteracties/models/validators.py b/src/openklant/components/klantinteracties/models/validators.py index 6bade7f2..353d027c 100644 --- a/src/openklant/components/klantinteracties/models/validators.py +++ b/src/openklant/components/klantinteracties/models/validators.py @@ -40,15 +40,13 @@ class PartijIdentificatorValidator: } ALLOWED_OBJECT_TYPES_FOR_REGISTRIES = { - PartijIdentificatorCodeRegister.brp: { - PartijIdentificatorCodeObjectType.natuurlijk_persoon.value: NATUURLIJK_PERSOON, - PartijIdentificatorCodeObjectType.overig.value: [], - }, - PartijIdentificatorCodeRegister.hr: { - PartijIdentificatorCodeObjectType.vestiging.value: VESTIGING, - PartijIdentificatorCodeObjectType.niet_natuurlijk_persoon.value: NIET_NATUURLIJK_PERSOON, - PartijIdentificatorCodeObjectType.overig.value: [], - }, + PartijIdentificatorCodeRegister.brp: [ + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + ], + PartijIdentificatorCodeRegister.hr: [ + PartijIdentificatorCodeObjectType.vestiging.value, + PartijIdentificatorCodeObjectType.niet_natuurlijk_persoon.value, + ], } def __init__( @@ -81,11 +79,8 @@ def validate_code_objecttype(self) -> None: or self.code_register == PartijIdentificatorCodeRegister.overig ): return - if self.code_objecttype not in ( - choices := list( - self.ALLOWED_OBJECT_TYPES_FOR_REGISTRIES[self.code_register].keys() - ) + choices := self.ALLOWED_OBJECT_TYPES_FOR_REGISTRIES[self.code_register] ): raise ValidationError( { diff --git a/src/openklant/components/klantinteracties/tests/test_validators.py b/src/openklant/components/klantinteracties/tests/test_validators.py index d9128d39..7179ed09 100644 --- a/src/openklant/components/klantinteracties/tests/test_validators.py +++ b/src/openklant/components/klantinteracties/tests/test_validators.py @@ -62,7 +62,7 @@ def test_invalid_code_objecttype_not_found_in_top_level(self): details = error.exception.message_dict self.assertEqual( details["partij_identificator_code_objecttype"][0], - "voor `codeRegister` brp zijn alleen deze waarden toegestaan: ['natuurlijk_persoon', 'overig']", + "voor `codeRegister` brp zijn alleen deze waarden toegestaan: ['natuurlijk_persoon']", ) # Start section validate_code_soort_object_id @@ -216,3 +216,124 @@ def test_invalid_object_id_proef11_bsn(self): details["partij_identificator_object_id"][0], "Deze waarde is ongeldig, reden: Onjuist BSN nummer", ) + + def test_allowed_cases(self): + valid_cases = [ + [ + PartijIdentificatorCodeRegister.brp.value, + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.bsn.value, + "296648875", + ], + [ + PartijIdentificatorCodeRegister.brp.value, + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.overig.value, + "123456", + ], + [ + PartijIdentificatorCodeRegister.hr.value, + PartijIdentificatorCodeObjectType.vestiging.value, + PartijIdentificatorCodeSoortObjectId.vestigingsnummer.value, + "123456789878", + ], + [ + PartijIdentificatorCodeRegister.hr.value, + PartijIdentificatorCodeObjectType.vestiging.value, + PartijIdentificatorCodeSoortObjectId.overig.value, + "296648875", + ], + [ + PartijIdentificatorCodeRegister.hr.value, + PartijIdentificatorCodeObjectType.niet_natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.rsin.value, + "296648875", + ], + [ + PartijIdentificatorCodeRegister.hr.value, + PartijIdentificatorCodeObjectType.niet_natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.kvk_nummer.value, + "12345678", + ], + [ + PartijIdentificatorCodeRegister.hr.value, + PartijIdentificatorCodeObjectType.niet_natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.overig.value, + "296648875", + ], + [ + PartijIdentificatorCodeRegister.overig.value, + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.bsn.value, + "296648875", + ], + [ + "", + "", + "", + "", + ], + [ + PartijIdentificatorCodeRegister.brp.value, + "", + "", + "", + ], + [ + "", + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + "", + "", + ], + [ + PartijIdentificatorCodeRegister.overig.value, + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + "", + "", + ], + [ + PartijIdentificatorCodeRegister.overig.value, + PartijIdentificatorCodeObjectType.overig.value, + PartijIdentificatorCodeSoortObjectId.overig.value, + "296648875", + ], + ] + for case in valid_cases: + validator = PartijIdentificatorValidator( + code_register=case[0], + code_objecttype=case[1], + code_soort_object_id=case[2], + object_id=case[3], + ) + validator.validate() + + def test_not_allowed_cases(self): + invalid_cases = [ + [ + PartijIdentificatorCodeRegister.brp.value, + PartijIdentificatorCodeObjectType.niet_natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.bsn.value, + "296648875", + ], + [ + PartijIdentificatorCodeRegister.brp.value, + PartijIdentificatorCodeObjectType.natuurlijk_persoon.value, + PartijIdentificatorCodeSoortObjectId.kvk_nummer.value, + "296648875", + ], + [ + PartijIdentificatorCodeRegister.brp.value, + PartijIdentificatorCodeObjectType.overig.value, + PartijIdentificatorCodeSoortObjectId.bsn.value, + "296648875", + ], + ] + for case in invalid_cases: + with self.assertRaises(ValidationError): + validator = PartijIdentificatorValidator( + code_register=case[0], + code_objecttype=case[1], + code_soort_object_id=case[2], + object_id=case[3], + ) + validator.validate()