commonground-api-common 2.15.2__tar.gz → 3.0.0__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.
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/CHANGELOG.rst +29 -0
- {commonground_api_common-2.15.2/commonground_api_common.egg-info → commonground_api_common-3.0.0}/PKG-INFO +6 -6
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/README.rst +2 -2
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0/commonground_api_common.egg-info}/PKG-INFO +6 -6
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/commonground_api_common.egg-info/SOURCES.txt +0 -3
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/commonground_api_common.egg-info/requires.txt +1 -1
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/pyproject.toml +5 -5
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_utils.py +0 -11
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_views.py +94 -0
- commonground_api_common-3.0.0/vng_api_common/__init__.py +1 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/apps.py +0 -2
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/fields.py +1 -84
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/locale/nl/LC_MESSAGES/django.po +1 -1
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/routers.py +0 -10
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/views.py +30 -10
- commonground_api_common-2.15.2/tests/test_jwtsecrets.py +0 -39
- commonground_api_common-2.15.2/vng_api_common/__init__.py +0 -1
- commonground_api_common-2.15.2/vng_api_common/api/urls.py +0 -7
- commonground_api_common-2.15.2/vng_api_common/api/views.py +0 -37
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/MANIFEST.in +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/commonground_api_common.egg-info/dependency_links.txt +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/commonground_api_common.egg-info/not-zip-safe +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/commonground_api_common.egg-info/top_level.txt +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/setup.cfg +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_autorisatie_validation.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_cache_headers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_cached_hyperlinkrelatedfields.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_check_query_params.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_checks.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_choices.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_configuration_steps_applicaties.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_configuration_steps_jwtsecrets.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_content_type_headers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_exception_camelize.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_exception_handler.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_field_extensions.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_fields.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_filter_extension.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_filters.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_gegevensgroepen.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_get_resource.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_jwt_decoding.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_migrations.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_nested_serializer_validation.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_notes.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_pagination.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_permissions.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_publish_validators.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_schema.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_scopes.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_serializer_extensions.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_serializer_fields.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_server_errors.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/tests/test_validators.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/admin.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/api/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/api/permissions.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/api/serializers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/admin.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/api/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/api/scopes.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/api/serializers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/apps.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/audits.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0001_initial.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0002_auto_20190516_0830.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0003_auto_20190517_0844.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0004_auto_20190520_1238.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0005_auto_20190520_1450.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0006_audittrail_toelichting.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0007_auto_20190522_0916.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0008_audittrail_resource_weergave.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0009_auto_20190712_1643.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0010_audittrail_request_id.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0011_auto_20190918_1335.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0012_auto_20200619_0545.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0012_remove_audittrail_request_id.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0013_audittrail_logrecord_id.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0013_auto_20201207_0846.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0014_auto_20201221_0905.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0014_auto_20210323_1654.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0015_auto_20220318_1608.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0016_merge_20220607_0517.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0017_alter_audittrail_bron.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0018_auto_20221212_0745.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/0019_alter_audittrail_options.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/migrations/_operations.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/models.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/utils.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/audittrails/viewsets.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/admin.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/middleware.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0001_initial.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0002_authorizationsconfig.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0003_auto_20190502_0409.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0004_auto_20190503_0941.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0005_auto_20190506_0842.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0006_auto_20190506_0901.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0007_auto_20190506_1212.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0008_auto_20190712_1541.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0009_update_enums.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0010_auto_20190712_1643.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0011_auto_20191114_0728.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0012_auto_20200619_0545.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0013_auto_20201207_0846.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0014_auto_20201221_0905.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0015_auto_20220318_1608.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0016_remove_authorizationsconfig_api_root_and_more.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0017_alter_applicatie_client_ids_and_more.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/0018_alter_applicatie_options_alter_autorisatie_options.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/migrations/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/models.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/serializers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/utils.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/authorizations/validators.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/decorators.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/etags.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/introspection.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/models.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/registry.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/caching/signals.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/checks.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/choices.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/client.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/compat.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/conf/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/conf/api.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/constants.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/contrib/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/contrib/setup_configuration/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/contrib/setup_configuration/models.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/contrib/setup_configuration/steps.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/db/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/db/operations.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/descriptors.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/diagrams/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/diagrams/generate_graphs.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/diagrams/uml_images.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/doc.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/exception_handling.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/exceptions.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/file.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/gegevensgroep.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/geojson.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/hyperlink.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/polymorphic.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/extensions/query.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/filters.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/filters_backend.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/filtersets.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/generators.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/geo.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/locale/nl/LC_MESSAGES/django.mo +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/middleware.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0001_initial.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0002_apicredential.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0003_auto_20190417_1145.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0004_auto_20190517_0903.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0005_auto_20190614_1346.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0006_delete_apicredential.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/0007_alter_jwtsecret_options.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/migrations/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/mocks.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/models.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/api/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/api/serializers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/api/viewsets.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/apps.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/constants.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notes/models.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/api/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/api/urls.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/api/views.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/apps.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/handlers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0001_initial.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0002_subscription__subscription.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0003_auto_20190319_1048.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0004_auto_20190325_1313.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0005_fix_default_nrc.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0006_auto_20190417_1142.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0007_auto_20190429_1442.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0008_auto_20190502_0415.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0009_auto_20190729_0427.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0010_auto_20220704_1419.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/0011_remove_subscription_config_and_more.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/notifications/migrations/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/oas.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/pagination.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/permissions.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/polymorphism.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/schema.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/scopes.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/search.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/serializers.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/settings.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/css/admin/admin_overrides.css +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/css/screen.css +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/ico/favicon.png +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/img/vng.svg +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/LICENSE.txt +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/css/all.css +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/css/all.min.css +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-brands-400.eot +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-brands-400.svg +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-brands-400.woff +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-regular-400.eot +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-regular-400.svg +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-regular-400.woff +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-solid-900.eot +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-solid-900.svg +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-solid-900.woff +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/static/vng_api_common/libs/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/admin/base_site.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/includes/kanalen_card.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/index.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/master.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/ref/error_detail.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/ref/scopes.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templates/vng_api_common/view_config.html +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templatetags/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/templatetags/vng_api_common.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/tests/__init__.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/tests/auth.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/tests/caching.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/tests/schema.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/tests/urls.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/tests/utils.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/urls.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/utils.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/validators.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/version.py +0 -0
- {commonground_api_common-2.15.2 → commonground_api_common-3.0.0}/vng_api_common/viewsets.py +0 -0
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
Change history
|
|
3
3
|
==============
|
|
4
4
|
|
|
5
|
+
3.0.0 (2026-10-01)
|
|
6
|
+
-------------------
|
|
7
|
+
|
|
8
|
+
**💥 Breaking changes**
|
|
9
|
+
|
|
10
|
+
* Drop support for python 3.11
|
|
11
|
+
* Remove code that was marked deprecated
|
|
12
|
+
|
|
13
|
+
* ``DaysDurationField``
|
|
14
|
+
* option to specify base_name instead of basename for ``NestedRegisteringMixin``
|
|
15
|
+
* ``CreateJWTSecretView``
|
|
16
|
+
|
|
17
|
+
**Bugfixes**
|
|
18
|
+
|
|
19
|
+
* [#187] Don't crash ViewConfigView on empty ZGW secret
|
|
20
|
+
|
|
21
|
+
**Maintenance**
|
|
22
|
+
|
|
23
|
+
* Confirm support for python 3.14
|
|
24
|
+
* Pin ``django-setup-configuration`` to 0.13.0 or greater
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
2.16.0 (2026-09-14)
|
|
28
|
+
-------------------
|
|
29
|
+
|
|
30
|
+
**Deprecations**
|
|
31
|
+
|
|
32
|
+
* [openzaak/open-zaak#2506] Mark ``DaysDurationField`` field as deprecated
|
|
33
|
+
|
|
5
34
|
2.15.2 (2026-09-10)
|
|
6
35
|
-------------------
|
|
7
36
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: commonground-api-common
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: Commonground API tooling
|
|
5
5
|
Author-email: "Maykin Media, VNG-Realisatie" <support@maykinmedia.nl>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -18,11 +18,11 @@ Classifier: Operating System :: MacOS
|
|
|
18
18
|
Classifier: Operating System :: Microsoft :: Windows
|
|
19
19
|
Classifier: Programming Language :: Python :: 3
|
|
20
20
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.12
|
|
26
26
|
Description-Content-Type: text/x-rst
|
|
27
27
|
Requires-Dist: django>=5.2.0
|
|
28
28
|
Requires-Dist: django-filter<=25.1,>=23.1
|
|
@@ -72,7 +72,7 @@ Requires-Dist: requests-mock; extra == "oas"
|
|
|
72
72
|
Provides-Extra: testutils
|
|
73
73
|
Requires-Dist: zgw-consumers-oas; extra == "testutils"
|
|
74
74
|
Provides-Extra: setup-configuration
|
|
75
|
-
Requires-Dist: django-setup-configuration>=0.
|
|
75
|
+
Requires-Dist: django-setup-configuration>=0.13.0; extra == "setup-configuration"
|
|
76
76
|
Provides-Extra: notifications
|
|
77
77
|
Requires-Dist: notifications-api-common>=0.3.1; extra == "notifications"
|
|
78
78
|
Provides-Extra: coverage
|
|
@@ -88,7 +88,7 @@ Commonground-API-common - Tooling voor RESTful APIs
|
|
|
88
88
|
===================================================
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
:Version:
|
|
91
|
+
:Version: 3.0.0
|
|
92
92
|
:Source: https://github.com/maykinmedia/commonground-api-common
|
|
93
93
|
:PythonVersion: 3.12
|
|
94
94
|
|
|
@@ -143,7 +143,7 @@ Features
|
|
|
143
143
|
* ``BSNField``
|
|
144
144
|
* ``LanguageField``
|
|
145
145
|
* ``VertrouwelijkheidsAanduidingField``
|
|
146
|
-
* ``
|
|
146
|
+
* ``DurationField``
|
|
147
147
|
* Mocks voor de validators die netwerk IO hebben, eenvoudig via
|
|
148
148
|
``@override_settings`` toe te passen
|
|
149
149
|
* Test utilities
|
|
@@ -3,7 +3,7 @@ Commonground-API-common - Tooling voor RESTful APIs
|
|
|
3
3
|
===================================================
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
:Version:
|
|
6
|
+
:Version: 3.0.0
|
|
7
7
|
:Source: https://github.com/maykinmedia/commonground-api-common
|
|
8
8
|
:PythonVersion: 3.12
|
|
9
9
|
|
|
@@ -58,7 +58,7 @@ Features
|
|
|
58
58
|
* ``BSNField``
|
|
59
59
|
* ``LanguageField``
|
|
60
60
|
* ``VertrouwelijkheidsAanduidingField``
|
|
61
|
-
* ``
|
|
61
|
+
* ``DurationField``
|
|
62
62
|
* Mocks voor de validators die netwerk IO hebben, eenvoudig via
|
|
63
63
|
``@override_settings`` toe te passen
|
|
64
64
|
* Test utilities
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: commonground-api-common
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: Commonground API tooling
|
|
5
5
|
Author-email: "Maykin Media, VNG-Realisatie" <support@maykinmedia.nl>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -18,11 +18,11 @@ Classifier: Operating System :: MacOS
|
|
|
18
18
|
Classifier: Operating System :: Microsoft :: Windows
|
|
19
19
|
Classifier: Programming Language :: Python :: 3
|
|
20
20
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.12
|
|
26
26
|
Description-Content-Type: text/x-rst
|
|
27
27
|
Requires-Dist: django>=5.2.0
|
|
28
28
|
Requires-Dist: django-filter<=25.1,>=23.1
|
|
@@ -72,7 +72,7 @@ Requires-Dist: requests-mock; extra == "oas"
|
|
|
72
72
|
Provides-Extra: testutils
|
|
73
73
|
Requires-Dist: zgw-consumers-oas; extra == "testutils"
|
|
74
74
|
Provides-Extra: setup-configuration
|
|
75
|
-
Requires-Dist: django-setup-configuration>=0.
|
|
75
|
+
Requires-Dist: django-setup-configuration>=0.13.0; extra == "setup-configuration"
|
|
76
76
|
Provides-Extra: notifications
|
|
77
77
|
Requires-Dist: notifications-api-common>=0.3.1; extra == "notifications"
|
|
78
78
|
Provides-Extra: coverage
|
|
@@ -88,7 +88,7 @@ Commonground-API-common - Tooling voor RESTful APIs
|
|
|
88
88
|
===================================================
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
:Version:
|
|
91
|
+
:Version: 3.0.0
|
|
92
92
|
:Source: https://github.com/maykinmedia/commonground-api-common
|
|
93
93
|
:PythonVersion: 3.12
|
|
94
94
|
|
|
@@ -143,7 +143,7 @@ Features
|
|
|
143
143
|
* ``BSNField``
|
|
144
144
|
* ``LanguageField``
|
|
145
145
|
* ``VertrouwelijkheidsAanduidingField``
|
|
146
|
-
* ``
|
|
146
|
+
* ``DurationField``
|
|
147
147
|
* Mocks voor de validators die netwerk IO hebben, eenvoudig via
|
|
148
148
|
``@override_settings`` toe te passen
|
|
149
149
|
* Test utilities
|
|
@@ -26,7 +26,6 @@ tests/test_filters.py
|
|
|
26
26
|
tests/test_gegevensgroepen.py
|
|
27
27
|
tests/test_get_resource.py
|
|
28
28
|
tests/test_jwt_decoding.py
|
|
29
|
-
tests/test_jwtsecrets.py
|
|
30
29
|
tests/test_migrations.py
|
|
31
30
|
tests/test_nested_serializer_validation.py
|
|
32
31
|
tests/test_notes.py
|
|
@@ -81,8 +80,6 @@ vng_api_common/viewsets.py
|
|
|
81
80
|
vng_api_common/api/__init__.py
|
|
82
81
|
vng_api_common/api/permissions.py
|
|
83
82
|
vng_api_common/api/serializers.py
|
|
84
|
-
vng_api_common/api/urls.py
|
|
85
|
-
vng_api_common/api/views.py
|
|
86
83
|
vng_api_common/audittrails/__init__.py
|
|
87
84
|
vng_api_common/audittrails/admin.py
|
|
88
85
|
vng_api_common/audittrails/apps.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "commonground-api-common"
|
|
7
|
-
version = "
|
|
7
|
+
version = "3.0.0"
|
|
8
8
|
description = "Commonground API tooling"
|
|
9
9
|
readme = "README.rst"
|
|
10
10
|
license = "MIT"
|
|
@@ -13,7 +13,7 @@ authors = [
|
|
|
13
13
|
{ name = "Maykin Media, VNG-Realisatie", email = "support@maykinmedia.nl" }
|
|
14
14
|
]
|
|
15
15
|
keywords = ["openapi", "swagger", "django"]
|
|
16
|
-
requires-python = ">=3.
|
|
16
|
+
requires-python = ">=3.12"
|
|
17
17
|
|
|
18
18
|
classifiers = [
|
|
19
19
|
"Development Status :: 5 - Production/Stable",
|
|
@@ -25,9 +25,9 @@ classifiers = [
|
|
|
25
25
|
"Operating System :: Microsoft :: Windows",
|
|
26
26
|
"Programming Language :: Python :: 3",
|
|
27
27
|
"Programming Language :: Python :: 3 :: Only",
|
|
28
|
-
"Programming Language :: Python :: 3.11",
|
|
29
28
|
"Programming Language :: Python :: 3.12",
|
|
30
29
|
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Programming Language :: Python :: 3.14",
|
|
31
31
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
32
32
|
]
|
|
33
33
|
|
|
@@ -102,7 +102,7 @@ testutils = [
|
|
|
102
102
|
]
|
|
103
103
|
|
|
104
104
|
setup-configuration = [
|
|
105
|
-
"django-setup-configuration>=0.
|
|
105
|
+
"django-setup-configuration>=0.13.0",
|
|
106
106
|
]
|
|
107
107
|
|
|
108
108
|
notifications = [
|
|
@@ -155,7 +155,7 @@ exclude_also = [
|
|
|
155
155
|
]
|
|
156
156
|
|
|
157
157
|
[tool.bumpversion]
|
|
158
|
-
current_version = "
|
|
158
|
+
current_version = "3.0.0"
|
|
159
159
|
files = [
|
|
160
160
|
{filename = "pyproject.toml"},
|
|
161
161
|
{filename = "README.rst"},
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import warnings
|
|
2
1
|
from datetime import date
|
|
3
2
|
|
|
4
3
|
from django.urls import reverse
|
|
@@ -7,7 +6,6 @@ import pytest
|
|
|
7
6
|
|
|
8
7
|
from testapp.models import Group, Record
|
|
9
8
|
from testapp.viewsets import GroupViewSet
|
|
10
|
-
from vng_api_common.api.views import CreateJWTSecretView
|
|
11
9
|
from vng_api_common.utils import (
|
|
12
10
|
generate_unique_identification,
|
|
13
11
|
get_resources_for_paths,
|
|
@@ -92,12 +90,3 @@ def test_generate_unique_identification():
|
|
|
92
90
|
id2 = generate_unique_identification(record2, "create_date")
|
|
93
91
|
|
|
94
92
|
assert id2 == "RECORD-2023-0000000002"
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def test_createjwtsecretview_as_view_emits_deprecation_warning():
|
|
98
|
-
with warnings.catch_warnings(record=True) as caught:
|
|
99
|
-
warnings.simplefilter("always")
|
|
100
|
-
|
|
101
|
-
CreateJWTSecretView.as_view()
|
|
102
|
-
|
|
103
|
-
assert any("CreateJWTSecretView" in str(w.message) for w in caught)
|
|
@@ -231,3 +231,97 @@ def test_config_view_authorizations_error_response(api_client):
|
|
|
231
231
|
|
|
232
232
|
notifications_request = request_mocker.request_history[1]
|
|
233
233
|
assert notifications_request.url == expected_request_notifications_url
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
@pytest.mark.django_db
|
|
237
|
+
def test_config_view_notifications_empty_secret(api_client):
|
|
238
|
+
"""
|
|
239
|
+
regression test for https://github.com/maykinmedia/commonground-api-common/issues/187
|
|
240
|
+
"""
|
|
241
|
+
notifications_service = ServiceFactory(
|
|
242
|
+
api_root="https://notificaties-api.vng.cloud/api/v1/",
|
|
243
|
+
client_id="foobar",
|
|
244
|
+
secret="",
|
|
245
|
+
auth_type=AuthTypes.zgw,
|
|
246
|
+
)
|
|
247
|
+
notifications_config = NotificationsConfig.get_solo()
|
|
248
|
+
notifications_config.notifications_api_service = notifications_service
|
|
249
|
+
notifications_config.save()
|
|
250
|
+
|
|
251
|
+
authorizations_service = ServiceFactory(
|
|
252
|
+
api_root="https://autorisaties-api.vng.cloud/api/v1/",
|
|
253
|
+
client_id="foobar",
|
|
254
|
+
secret="super-secret",
|
|
255
|
+
auth_type=AuthTypes.zgw,
|
|
256
|
+
)
|
|
257
|
+
authorizations_config = AuthorizationsConfig.get_solo()
|
|
258
|
+
authorizations_config.authorizations_api_service = authorizations_service
|
|
259
|
+
authorizations_config.save()
|
|
260
|
+
|
|
261
|
+
path = reverse("view-config")
|
|
262
|
+
|
|
263
|
+
expected_request_authorizations_url = (
|
|
264
|
+
f"{authorizations_service.api_root}applicaties?clientIds=foobar"
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
with requests_mock.Mocker() as request_mocker:
|
|
268
|
+
request_mocker.get(expected_request_authorizations_url, status_code=200)
|
|
269
|
+
|
|
270
|
+
response: TemplateResponse = api_client.get(path)
|
|
271
|
+
|
|
272
|
+
response_content = response.content.decode("utf-8")
|
|
273
|
+
|
|
274
|
+
assert response.status_code == status.HTTP_200_OK
|
|
275
|
+
assert notifications_service.api_root in response_content
|
|
276
|
+
assert "HMAC" not in response_content
|
|
277
|
+
assert _("Misconfigured") in response_content
|
|
278
|
+
|
|
279
|
+
# no request to the NRC is attempted
|
|
280
|
+
assert request_mocker.call_count == 1
|
|
281
|
+
assert request_mocker.request_history[0].url == expected_request_authorizations_url
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
@pytest.mark.django_db
|
|
285
|
+
def test_config_view_authorizations_empty_secret(api_client):
|
|
286
|
+
"""
|
|
287
|
+
regression test for https://github.com/maykinmedia/commonground-api-common/issues/187
|
|
288
|
+
"""
|
|
289
|
+
notifications_service = ServiceFactory(
|
|
290
|
+
api_root="https://notificaties-api.vng.cloud/api/v1/",
|
|
291
|
+
client_id="foobar",
|
|
292
|
+
secret="super-secret",
|
|
293
|
+
auth_type=AuthTypes.zgw,
|
|
294
|
+
)
|
|
295
|
+
notifications_config = NotificationsConfig.get_solo()
|
|
296
|
+
notifications_config.notifications_api_service = notifications_service
|
|
297
|
+
notifications_config.save()
|
|
298
|
+
|
|
299
|
+
authorizations_service = ServiceFactory(
|
|
300
|
+
api_root="https://autorisaties-api.vng.cloud/api/v1/",
|
|
301
|
+
client_id="foobar",
|
|
302
|
+
secret="",
|
|
303
|
+
auth_type=AuthTypes.zgw,
|
|
304
|
+
)
|
|
305
|
+
authorizations_config = AuthorizationsConfig.get_solo()
|
|
306
|
+
authorizations_config.authorizations_api_service = authorizations_service
|
|
307
|
+
authorizations_config.save()
|
|
308
|
+
|
|
309
|
+
path = reverse("view-config")
|
|
310
|
+
|
|
311
|
+
expected_request_notifications_url = f"{notifications_service.api_root}kanaal"
|
|
312
|
+
|
|
313
|
+
with requests_mock.Mocker() as request_mocker:
|
|
314
|
+
request_mocker.get(expected_request_notifications_url, status_code=200)
|
|
315
|
+
|
|
316
|
+
response: TemplateResponse = api_client.get(path)
|
|
317
|
+
|
|
318
|
+
response_content = response.content.decode("utf-8")
|
|
319
|
+
|
|
320
|
+
assert response.status_code == status.HTTP_200_OK
|
|
321
|
+
assert authorizations_service.api_root in response_content
|
|
322
|
+
assert "HMAC" not in response_content
|
|
323
|
+
assert _("Misconfigured") in response_content
|
|
324
|
+
|
|
325
|
+
# no request to the AC is attempted
|
|
326
|
+
assert request_mocker.call_count == 1
|
|
327
|
+
assert request_mocker.request_history[0].url == expected_request_notifications_url
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.0.0"
|
|
@@ -7,7 +7,6 @@ from django.utils.translation import gettext_lazy as _
|
|
|
7
7
|
import structlog
|
|
8
8
|
from rest_framework import serializers
|
|
9
9
|
|
|
10
|
-
from . import fields
|
|
11
10
|
from .choices import TextChoicesWithDescriptions, ensure_description_exists
|
|
12
11
|
from .serializers import DurationField, LengthHyperlinkedRelatedField
|
|
13
12
|
|
|
@@ -45,7 +44,6 @@ class CommonGroundAPICommonConfig(AppConfig):
|
|
|
45
44
|
def register_serializer_field():
|
|
46
45
|
mapping = serializers.ModelSerializer.serializer_field_mapping
|
|
47
46
|
mapping[models.DurationField] = DurationField
|
|
48
|
-
mapping[fields.DaysDurationField] = DurationField
|
|
49
47
|
|
|
50
48
|
if RelativeDeltaField is not None:
|
|
51
49
|
mapping[RelativeDeltaField] = DurationField
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
from datetime import timedelta
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
1
|
from django.core import checks
|
|
5
2
|
from django.core.validators import (
|
|
6
|
-
MaxValueValidator,
|
|
7
3
|
MinLengthValidator,
|
|
8
|
-
MinValueValidator,
|
|
9
4
|
)
|
|
10
5
|
from django.db import models
|
|
11
|
-
from django.
|
|
12
|
-
from django.utils.translation import gettext, gettext_lazy as _
|
|
6
|
+
from django.utils.translation import gettext_lazy as _
|
|
13
7
|
|
|
14
8
|
from iso639 import iter_langs
|
|
15
9
|
|
|
@@ -125,80 +119,3 @@ class VertrouwelijkheidsAanduidingField(models.CharField):
|
|
|
125
119
|
)
|
|
126
120
|
]
|
|
127
121
|
return []
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
class DaysDurationField(models.DurationField):
|
|
131
|
-
"""
|
|
132
|
-
Express duration in number of calendar days.
|
|
133
|
-
|
|
134
|
-
:param min_duration: minimal duration, in number of calendar days.
|
|
135
|
-
Defaults to 1.
|
|
136
|
-
:param max_duration: maximal duration, in number of calendar days.
|
|
137
|
-
Defaults to 999.
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
def __init__(self, *args, **kwargs):
|
|
141
|
-
kwargs.setdefault("min_duration", 1)
|
|
142
|
-
kwargs.setdefault("max_duration", 999) # 999 calendar days
|
|
143
|
-
|
|
144
|
-
self.min_duration = kwargs.pop("min_duration")
|
|
145
|
-
self.max_duration = kwargs.pop("max_duration")
|
|
146
|
-
|
|
147
|
-
self.default_validators = [
|
|
148
|
-
MinValueValidator(timedelta(days=self.min_duration)),
|
|
149
|
-
MaxValueValidator(timedelta(days=self.max_duration)),
|
|
150
|
-
]
|
|
151
|
-
|
|
152
|
-
super().__init__(*args, **kwargs)
|
|
153
|
-
|
|
154
|
-
def deconstruct(self) -> tuple:
|
|
155
|
-
name, path, args, kwargs = super().deconstruct()
|
|
156
|
-
kwargs.update(
|
|
157
|
-
{"min_duration": self.min_duration, "max_duration": self.max_duration}
|
|
158
|
-
)
|
|
159
|
-
return name, path, args, kwargs
|
|
160
|
-
|
|
161
|
-
def check(self, **kwargs) -> list:
|
|
162
|
-
errors = super().check(**kwargs)
|
|
163
|
-
errors.extend(self._check_min_duration(**kwargs))
|
|
164
|
-
return errors
|
|
165
|
-
|
|
166
|
-
def _check_min_duration(self, **kwargs) -> list[checks.Error]:
|
|
167
|
-
errors = []
|
|
168
|
-
if self.min_duration < 1:
|
|
169
|
-
errors.append(
|
|
170
|
-
checks.Error(
|
|
171
|
-
"De minimale duur in kalenderdagen moet groter dan of gelijk aan 1 zijn",
|
|
172
|
-
obj=self,
|
|
173
|
-
id="vng_api_common.fields.E006",
|
|
174
|
-
)
|
|
175
|
-
)
|
|
176
|
-
if self.min_duration > self.max_duration:
|
|
177
|
-
errors.append(
|
|
178
|
-
checks.Error(
|
|
179
|
-
"De minimale duur mag niet langer zijn dan de maximale duur",
|
|
180
|
-
obj=self,
|
|
181
|
-
id="vng_api_common.fields.E007",
|
|
182
|
-
)
|
|
183
|
-
)
|
|
184
|
-
return errors
|
|
185
|
-
|
|
186
|
-
def formfield(
|
|
187
|
-
self,
|
|
188
|
-
form_class: type[Field] | None = None,
|
|
189
|
-
choices_form_class: type[ChoiceField] | None = None,
|
|
190
|
-
**kwargs,
|
|
191
|
-
) -> Any:
|
|
192
|
-
# add sensible help-text
|
|
193
|
-
_help_text = gettext("Specifieer de duur als 'DD 00:00'")
|
|
194
|
-
help_text = f"{self.help_text} {_help_text}" if self.help_text else _help_text
|
|
195
|
-
|
|
196
|
-
defaults: dict[str, Any] = {"help_text": help_text}
|
|
197
|
-
defaults.update(kwargs)
|
|
198
|
-
# Ensure form_class and choices_form_class are types, not strings
|
|
199
|
-
|
|
200
|
-
return super().formfield(
|
|
201
|
-
form_class=form_class,
|
|
202
|
-
choices_form_class=choices_form_class,
|
|
203
|
-
**defaults,
|
|
204
|
-
)
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import warnings
|
|
2
|
-
|
|
3
1
|
from rest_framework.routers import (
|
|
4
2
|
APIRootView as _APIRootView,
|
|
5
3
|
DefaultRouter as DRFDefaultRouter,
|
|
@@ -31,14 +29,6 @@ class NestedRegisteringMixin(DRFDefaultRouter):
|
|
|
31
29
|
if not nested:
|
|
32
30
|
return
|
|
33
31
|
|
|
34
|
-
if "base_name" in kwargs:
|
|
35
|
-
warnings.warn(
|
|
36
|
-
"base_name kwarg is deprecated, use basename instead",
|
|
37
|
-
DeprecationWarning,
|
|
38
|
-
)
|
|
39
|
-
kwargs["basename"] = kwargs["base_name"]
|
|
40
|
-
del kwargs["base_name"]
|
|
41
|
-
|
|
42
32
|
base_name = kwargs.get("basename") or self.get_default_basename(viewset)
|
|
43
33
|
|
|
44
34
|
nested_router = NestedSimpleRouter(
|
|
@@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _
|
|
|
7
7
|
from django.views.generic import TemplateView
|
|
8
8
|
|
|
9
9
|
import requests
|
|
10
|
+
from jwt import InvalidKeyError
|
|
10
11
|
from rest_framework import exceptions as drf_exceptions
|
|
11
12
|
|
|
12
13
|
from vng_api_common.client import Client
|
|
@@ -94,7 +95,12 @@ def _test_ac_config() -> list[CheckResult]:
|
|
|
94
95
|
auth_config = AuthorizationsConfig.get_solo()
|
|
95
96
|
|
|
96
97
|
# check if AC auth is configured
|
|
97
|
-
|
|
98
|
+
try:
|
|
99
|
+
ac_client: Client | None = AuthorizationsConfig.get_client()
|
|
100
|
+
ac_misconfigured = False
|
|
101
|
+
except InvalidKeyError: # ZGW auth with an empty secret
|
|
102
|
+
ac_client = None
|
|
103
|
+
ac_misconfigured = True
|
|
98
104
|
has_ac_auth = ac_client.auth is not None if ac_client else False
|
|
99
105
|
|
|
100
106
|
checks: list[CheckResult] = [
|
|
@@ -103,14 +109,20 @@ def _test_ac_config() -> list[CheckResult]:
|
|
|
103
109
|
_("AC"),
|
|
104
110
|
(
|
|
105
111
|
auth_config.authorizations_api_service.api_root
|
|
106
|
-
if
|
|
112
|
+
if auth_config.authorizations_api_service
|
|
107
113
|
else _("Missing")
|
|
108
114
|
),
|
|
109
|
-
bool(
|
|
115
|
+
bool(auth_config.authorizations_api_service),
|
|
110
116
|
),
|
|
111
117
|
(
|
|
112
118
|
_("Credentials for AC"),
|
|
113
|
-
|
|
119
|
+
(
|
|
120
|
+
_("Misconfigured")
|
|
121
|
+
if ac_misconfigured
|
|
122
|
+
else _("Configured")
|
|
123
|
+
if has_ac_auth
|
|
124
|
+
else _("Missing")
|
|
125
|
+
),
|
|
114
126
|
has_ac_auth,
|
|
115
127
|
),
|
|
116
128
|
]
|
|
@@ -148,10 +160,12 @@ def _test_nrc_config(
|
|
|
148
160
|
from notifications_api_common.models import NotificationsConfig, Subscription
|
|
149
161
|
|
|
150
162
|
nrc_config = NotificationsConfig.get_solo()
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
163
|
+
try:
|
|
164
|
+
nrc_client = NotificationsConfig.get_client()
|
|
165
|
+
nrc_misconfigured = False
|
|
166
|
+
except InvalidKeyError: # ZGW auth with an empty secret
|
|
167
|
+
nrc_client = None
|
|
168
|
+
nrc_misconfigured = True
|
|
155
169
|
|
|
156
170
|
has_nrc_auth = nrc_client.auth is not None if nrc_client else False
|
|
157
171
|
|
|
@@ -167,7 +181,13 @@ def _test_nrc_config(
|
|
|
167
181
|
),
|
|
168
182
|
(
|
|
169
183
|
_("Credentials for NRC"),
|
|
170
|
-
|
|
184
|
+
(
|
|
185
|
+
_("Misconfigured")
|
|
186
|
+
if nrc_misconfigured
|
|
187
|
+
else _("Configured")
|
|
188
|
+
if has_nrc_auth
|
|
189
|
+
else _("Missing")
|
|
190
|
+
),
|
|
171
191
|
has_nrc_auth,
|
|
172
192
|
),
|
|
173
193
|
]
|
|
@@ -177,7 +197,7 @@ def _test_nrc_config(
|
|
|
177
197
|
error = False
|
|
178
198
|
|
|
179
199
|
try:
|
|
180
|
-
response: requests.Response = nrc_client.get("kanaal")
|
|
200
|
+
response: requests.Response = nrc_client.get("kanaal") # type: ignore
|
|
181
201
|
response.raise_for_status()
|
|
182
202
|
except requests.ConnectionError:
|
|
183
203
|
error = True
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
from rest_framework import status
|
|
3
|
-
from rest_framework.reverse import reverse
|
|
4
|
-
from rest_framework.test import APIClient
|
|
5
|
-
|
|
6
|
-
from vng_api_common.authorizations.models import Applicatie, Autorisatie
|
|
7
|
-
from vng_api_common.authorizations.utils import generate_jwt
|
|
8
|
-
from vng_api_common.constants import ComponentTypes
|
|
9
|
-
from vng_api_common.models import JWTSecret
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@pytest.mark.django_db
|
|
13
|
-
def test_unauthorized_jwtsecret_create_forbidden():
|
|
14
|
-
url = reverse("jwtsecret-create")
|
|
15
|
-
client = APIClient()
|
|
16
|
-
|
|
17
|
-
response = client.post(url, {"identifier": "foo", "secret": "bar"})
|
|
18
|
-
|
|
19
|
-
assert response.status_code == status.HTTP_403_FORBIDDEN
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@pytest.mark.django_db
|
|
23
|
-
def test_authorized_jwtsecret_create_ok():
|
|
24
|
-
url = reverse("jwtsecret-create")
|
|
25
|
-
client = APIClient()
|
|
26
|
-
# set up auth
|
|
27
|
-
JWTSecret.objects.create(identifier="pytest", secret="sekrit")
|
|
28
|
-
app = Applicatie.objects.create(client_ids=["pytest"], label="tests")
|
|
29
|
-
Autorisatie.objects.create(
|
|
30
|
-
applicatie=app,
|
|
31
|
-
component=ComponentTypes.ac,
|
|
32
|
-
scopes=["autorisaties.credentials-registreren"],
|
|
33
|
-
)
|
|
34
|
-
token = generate_jwt("pytest", "sekrit", "pytest", "pytest")
|
|
35
|
-
client.credentials(HTTP_AUTHORIZATION=token)
|
|
36
|
-
|
|
37
|
-
response = client.post(url, {"identifier": "foo", "secret": "bar"})
|
|
38
|
-
|
|
39
|
-
assert response.status_code == status.HTTP_201_CREATED
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.15.2"
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import warnings
|
|
2
|
-
|
|
3
|
-
from rest_framework.generics import CreateAPIView
|
|
4
|
-
|
|
5
|
-
from ..models import JWTSecret
|
|
6
|
-
from ..scopes import Scope
|
|
7
|
-
from .permissions import JWTCreatePermission
|
|
8
|
-
from .serializers import JWTSecretSerializer
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class CreateJWTSecretView(CreateAPIView):
|
|
12
|
-
"""
|
|
13
|
-
XXX: deprecated, scheduled for removal in 3.0.
|
|
14
|
-
|
|
15
|
-
The zds-token-issuer is no longer used, and maintained implementations
|
|
16
|
-
no longer rely on this view.
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
action = "create"
|
|
20
|
-
swagger_schema = None
|
|
21
|
-
|
|
22
|
-
model = JWTSecret
|
|
23
|
-
serializer_class = JWTSecretSerializer
|
|
24
|
-
permission_classes = (JWTCreatePermission,)
|
|
25
|
-
required_scopes = {
|
|
26
|
-
"create": Scope("autorisaties.credentials-registreren", private=True)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@classmethod
|
|
30
|
-
def as_view(cls, **initkwargs):
|
|
31
|
-
warnings.warn(
|
|
32
|
-
"The 'jwtsecret/' endpoint and CreateJWTSecretView are deprecated "
|
|
33
|
-
"and scheduled for removal in 3.0.",
|
|
34
|
-
category=DeprecationWarning,
|
|
35
|
-
stacklevel=2,
|
|
36
|
-
)
|
|
37
|
-
return super().as_view(**initkwargs)
|
|
File without changes
|