From a63186d1bdb5715955a88268a8d733b5509de38d Mon Sep 17 00:00:00 2001 From: matthijsbekendam Date: Tue, 29 Aug 2023 14:07:52 +0200 Subject: [PATCH 1/2] update: lock attribute in EIO.bestandsdelen and bump version to 1.4.1 --- .bumpversion.cfg | 2 +- package.json | 2 +- src/drc/__init__.py | 2 +- src/drc/api/serializers/bestandsdeel.py | 6 + .../enkelvoudig_informatieobject.py | 11 +- src/drc/api/tests/test_dso_api_strategy.py | 2 +- src/drc/api/views/bestandsdeel.py | 1 + .../api/views/enkelvoudig_informatieobject.py | 8 +- src/drc/conf/api.py | 2 +- src/openapi.yaml | 309 +++++++++++++++++- 10 files changed, 335 insertions(+), 10 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index fa275660..18284411 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,7 +1,7 @@ [bumpversion] commit = False tag = False -current_version = 1.4.0 +current_version = 1.4.1 parse = (?P\d+)\.(?P\d+)\.(?P\d+)([-](?P(rc|alpha))+(?P\d+))? serialize = {major}.{minor}.{patch}-{release}{build} diff --git a/package.json b/package.json index 1d42d59f..6b311002 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "drc", - "version": "1.4.0", + "version": "1.4.1", "description": "drc referentie implementatie API", "main": "src/index.js", "directories": { diff --git a/src/drc/__init__.py b/src/drc/__init__.py index 836682f3..17a00d60 100644 --- a/src/drc/__init__.py +++ b/src/drc/__init__.py @@ -7,7 +7,7 @@ import re from collections import namedtuple -__version__ = "1.4.0" +__version__ = "1.4.1" __author__ = "VNG Realisatie" __homepage__ = "https://github.com/VNG-Realisatie/documenten-api" __docformat__ = "restructuredtext" diff --git a/src/drc/api/serializers/bestandsdeel.py b/src/drc/api/serializers/bestandsdeel.py index 3218b316..9b46acd1 100644 --- a/src/drc/api/serializers/bestandsdeel.py +++ b/src/drc/api/serializers/bestandsdeel.py @@ -49,3 +49,9 @@ def validate(self, attrs): ) return valid_attrs + + +class SchemaBestandsDeelSerializer(BestandsDeelSerializer): + lock = serializers.CharField( + help_text="Hash string, which represents id of the lock of related informatieobject", + ) diff --git a/src/drc/api/serializers/enkelvoudig_informatieobject.py b/src/drc/api/serializers/enkelvoudig_informatieobject.py index 4c569792..cf18b6d6 100644 --- a/src/drc/api/serializers/enkelvoudig_informatieobject.py +++ b/src/drc/api/serializers/enkelvoudig_informatieobject.py @@ -20,7 +20,10 @@ from drc.api.auth import get_ztc_auth from drc.api.fields import AnyBase64File -from drc.api.serializers.bestandsdeel import BestandsDeelSerializer +from drc.api.serializers.bestandsdeel import ( + BestandsDeelSerializer, + SchemaBestandsDeelSerializer, +) from drc.api.utils import create_filename, merge_files from drc.api.validators import StatusValidator from drc.datamodel.constants import ChecksumAlgoritmes, OndertekeningSoorten, Statussen @@ -497,3 +500,9 @@ class EIOZoekSerializer(serializers.Serializer): child=serializers.UUIDField(), help_text=_("Array of unieke resource identifiers (UUID4)"), ) + + +class SchemaEIOSerializer(EnkelvoudigInformatieObjectSerializer): + bestandsdelen = SchemaBestandsDeelSerializer( + source="canonical.bestandsdelen", many=True, read_only=True + ) diff --git a/src/drc/api/tests/test_dso_api_strategy.py b/src/drc/api/tests/test_dso_api_strategy.py index eaea5f0d..f5f5581e 100644 --- a/src/drc/api/tests/test_dso_api_strategy.py +++ b/src/drc/api/tests/test_dso_api_strategy.py @@ -23,7 +23,7 @@ def test_api_19_documentation_version_yaml(self): @override_settings(ROOT_URLCONF="drc.api.tests.test_urls") def test_api_24_version_header(self): response = self.client.get("/test-view") - self.assertEqual(response["API-version"], "1.4.0") + self.assertEqual(response["API-version"], "1.4.1") class DSOApi50Tests(APITestCase): diff --git a/src/drc/api/views/bestandsdeel.py b/src/drc/api/views/bestandsdeel.py index 17b0f3fa..57f4c871 100644 --- a/src/drc/api/views/bestandsdeel.py +++ b/src/drc/api/views/bestandsdeel.py @@ -9,6 +9,7 @@ from drc.api.schema import BestandsDeelSchema from drc.api.scopes import SCOPE_DOCUMENTEN_BIJWERKEN from drc.api.serializers import BestandsDeelSerializer +from drc.api.serializers.bestandsdeel import SchemaBestandsDeelSerializer from drc.datamodel.models.bestandsdeel import BestandsDeel diff --git a/src/drc/api/views/enkelvoudig_informatieobject.py b/src/drc/api/views/enkelvoudig_informatieobject.py index 7bc5cf62..43d5eb52 100644 --- a/src/drc/api/views/enkelvoudig_informatieobject.py +++ b/src/drc/api/views/enkelvoudig_informatieobject.py @@ -51,7 +51,10 @@ LockEnkelvoudigInformatieObjectSerializer, UnlockEnkelvoudigInformatieObjectSerializer, ) -from drc.api.serializers.enkelvoudig_informatieobject import EIOZoekSerializer +from drc.api.serializers.enkelvoudig_informatieobject import ( + EIOZoekSerializer, + SchemaEIOSerializer, +) from drc.api.views.constants import REGISTRATIE_QUERY_PARAM, VERSIE_QUERY_PARAM from drc.datamodel.models import EnkelvoudigInformatieObject @@ -256,7 +259,8 @@ def get_serializer_class(self, *args, **kwargs): return EnkelvoudigInformatieObjectSerializer @extend_schema( - parameters=[VERSIE_QUERY_PARAM, REGISTRATIE_QUERY_PARAM, EXPAND_QUERY_PARAM] + parameters=[VERSIE_QUERY_PARAM, REGISTRATIE_QUERY_PARAM, EXPAND_QUERY_PARAM], + responses=SchemaEIOSerializer, ) def retrieve(self, request, *args, **kwargs): return super().retrieve(request, *args, **kwargs) diff --git a/src/drc/conf/api.py b/src/drc/conf/api.py index 684eb915..b2956865 100644 --- a/src/drc/conf/api.py +++ b/src/drc/conf/api.py @@ -2,7 +2,7 @@ from vng_api_common.conf.api import * # noqa - imports white-listed -API_VERSION = "1.4.0" +API_VERSION = "1.4.1" REST_FRAMEWORK = BASE_REST_FRAMEWORK.copy() REST_FRAMEWORK["PAGE_SIZE"] = 100 diff --git a/src/openapi.yaml b/src/openapi.yaml index eaedfaa8..ee9c461d 100644 --- a/src/openapi.yaml +++ b/src/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: Documenten API - version: 1.4.0 + version: 1.4.1 description: "Een API om een documentregistratiecomponent (DRC) te benaderen.\n\n\ In een documentregistratiecomponent worden INFORMATIEOBJECTen opgeslagen. Een\n\ @@ -981,7 +981,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/EnkelvoudigInformatieObject' + $ref: '#/components/schemas/SchemaEIO' description: OK '401': headers: @@ -7965,6 +7965,311 @@ components: - antwoordnummer - postbusnummer type: string + SchemaBestandsDeel: + type: object + properties: + url: + type: string + format: uri + readOnly: true + title: url + description: + URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + minLength: 1 + maxLength: 1000 + volgnummer: + type: integer + readOnly: true + description: Een volgnummer dat de volgorde van de bestandsdelen aangeeft. + title: volgnummer + omvang: + type: integer + readOnly: true + description: De grootte van dit specifieke bestandsdeel. + title: omvang + voltooid: + type: boolean + readOnly: true + description: + 'Indicatie of dit bestandsdeel volledig is geupload. Dat wil + zeggen: het aantal bytes dat staat genoemd bij grootte is daadwerkelijk + ontvangen.' + title: voltooid + lock: + type: string + description: Hash string, which represents id of the lock of related informatieobject + title: lock + required: + - lock + - omvang + - url + - volgnummer + - voltooid + SchemaEIO: + type: object + description: Serializer for the EnkelvoudigInformatieObject model + properties: + url: + type: string + format: uri + readOnly: true + title: url + description: + URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + minLength: 1 + maxLength: 1000 + identificatie: + type: string + description: + Een binnen een gegeven context ondubbelzinnige referentie naar + het INFORMATIEOBJECT. + title: identificatie + maxLength: 40 + bronorganisatie: + type: string + description: + "Het RSIN van de Niet-natuurlijk persoon zijnde de organisatie\ + \ die het informatieobject heeft gecre\xEBerd of heeft ontvangen en als\ + \ eerste in een samenwerkingsketen heeft vastgelegd." + title: bronorganisatie + maxLength: 9 + creatiedatum: + type: string + format: date + description: Een datum of een gebeurtenis in de levenscyclus van het INFORMATIEOBJECT. + title: creatiedatum + titel: + type: string + description: De naam waaronder het INFORMATIEOBJECT formeel bekend is. + title: titel + maxLength: 200 + vertrouwelijkheidaanduiding: + description: + 'Aanduiding van de mate waarin het INFORMATIEOBJECT voor de + openbaarheid bestemd is. + + + Uitleg bij mogelijke waarden: + + + * `openbaar` - Openbaar + + * `beperkt_openbaar` - Beperkt openbaar + + * `intern` - Intern + + * `zaakvertrouwelijk` - Zaakvertrouwelijk + + * `vertrouwelijk` - Vertrouwelijk + + * `confidentieel` - Confidentieel + + * `geheim` - Geheim + + * `zeer_geheim` - Zeer geheim' + title: vertrouwelijkheidaanduiding + oneOf: + - $ref: '#/components/schemas/VertrouwelijkheidaanduidingEnum' + - $ref: '#/components/schemas/BlankEnum' + auteur: + type: string + description: + "De persoon of organisatie die in de eerste plaats verantwoordelijk\ + \ is voor het cre\xEBren van de inhoud van het INFORMATIEOBJECT." + title: auteur + maxLength: 200 + status: + description: + "Aanduiding van de stand van zaken van een INFORMATIEOBJECT. + De waarden 'in bewerking' en 'ter vaststelling' komen niet voor als + het attribuut `ontvangstdatum` van een waarde is voorzien. Wijziging van + de Status in 'gearchiveerd' impliceert dat het informatieobject een + duurzaam, niet-wijzigbaar Formaat dient te hebben. + + + Uitleg bij mogelijke waarden: + + + * `in_bewerking` - (In bewerking) Aan het informatieobject wordt nog gewerkt. + + * `ter_vaststelling` - (Ter vaststelling) Informatieobject gereed maar + moet nog vastgesteld worden. + + * `definitief` - (Definitief) Informatieobject door bevoegd iets of iemand + vastgesteld dan wel ontvangen. + + * `gearchiveerd` - (Gearchiveerd) Informatieobject duurzaam bewaarbaar + gemaakt; een gearchiveerd informatie-element." + title: status + oneOf: + - $ref: '#/components/schemas/StatusEnum' + - $ref: '#/components/schemas/BlankEnum' + formaat: + type: string + description: + 'Het "Media Type" (voorheen "MIME type") voor de wijze waaropde + inhoud van het INFORMATIEOBJECT is vastgelegd in een computerbestand. + Voorbeeld: `application/msword`. Zie: https://www.iana.org/assignments/media-types/media-types.xhtml' + title: formaat + maxLength: 255 + taal: + type: string + description: + 'Een ISO 639-2/B taalcode waarin de inhoud van het INFORMATIEOBJECT + is vastgelegd. Voorbeeld: `dut`. Zie: https://www.iso.org/standard/4767.html' + title: taal + maxLength: 3 + minLength: 3 + versie: + type: integer + readOnly: true + description: + Het (automatische) versienummer van het INFORMATIEOBJECT. Deze + begint bij 1 als het INFORMATIEOBJECT aangemaakt wordt. + title: versie + beginRegistratie: + type: string + format: date-time + readOnly: true + description: + Een datumtijd in ISO8601 formaat waarop deze versie van het + INFORMATIEOBJECT is aangemaakt of gewijzigd. + title: begin registratie + bestandsnaam: + type: string + description: + De naam van het fysieke bestand waarin de inhoud van het informatieobject + is vastgelegd, inclusief extensie. + title: bestandsnaam + maxLength: 255 + inhoud: + type: string + format: uri + description: Download URL van de binaire inhoud. + nullable: true + title: inhoud + bestandsomvang: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + nullable: true + description: Aantal bytes dat de inhoud van INFORMATIEOBJECT in beslag neemt. + title: bestandsomvang + link: + type: string + format: uri + description: + De URL waarmee de inhoud van het INFORMATIEOBJECT op te vragen + is. + title: link + maxLength: 200 + beschrijving: + type: string + description: Een generieke beschrijving van de inhoud van het INFORMATIEOBJECT. + title: beschrijving + maxLength: 1000 + ontvangstdatum: + type: string + format: date + nullable: true + description: + "**DEPRECATED** Dit attribuut is verplaatst naar resource Verzending.\ + \ \n\n De datum waarop het INFORMATIEOBJECT ontvangen is. Verplicht te\ + \ registreren voor INFORMATIEOBJECTen die van buiten de zaakbehandelende\ + \ organisatie(s) ontvangen zijn. Ontvangst en verzending is voorbehouden\ + \ aan documenten die van of naar andere personen ontvangen of verzonden\ + \ zijn waarbij die personen niet deel uit maken van de behandeling van\ + \ de zaak waarin het document een rol speelt." + title: ontvangstdatum + verzenddatum: + type: string + format: date + nullable: true + description: + "**DEPRECATED** Dit attribuut is verplaatst naar resource Verzending.\ + \ \n\n De datum waarop het INFORMATIEOBJECT verzonden is, zoals deze op\ + \ het INFORMATIEOBJECT vermeld is. Dit geldt voor zowel inkomende als\ + \ uitgaande INFORMATIEOBJECTen. Eenzelfde informatieobject kan niet tegelijk\ + \ inkomend en uitgaand zijn. Ontvangst en verzending is voorbehouden aan\ + \ documenten die van of naar andere personen ontvangen of verzonden zijn\ + \ waarbij die personen niet deel uit maken van de behandeling van de zaak\ + \ waarin het document een rol speelt." + title: verzenddatum + indicatieGebruiksrecht: + type: boolean + nullable: true + description: + Indicatie of er beperkingen gelden aangaande het gebruik van + het informatieobject anders dan raadpleging. Dit veld mag `null` zijn + om aan te geven dat de indicatie nog niet bekend is. Als de indicatie + gezet is, dan kan je de gebruiksrechten die van toepassing zijn raadplegen + via de GEBRUIKSRECHTen resource. + title: indicatie gebruiksrecht + verschijningsvorm: + type: string + description: "De essenti\xEBle opmaakaspecten van een INFORMATIEOBJECT." + title: verschijningsvorm + ondertekening: + allOf: + - $ref: '#/components/schemas/Ondertekening' + nullable: true + description: + Aanduiding van de rechtskracht van een informatieobject. Mag + niet van een waarde zijn voorzien als de `status` de waarde 'in bewerking' + of 'ter vaststelling' heeft. + title: ondertekening + integriteit: + allOf: + - $ref: '#/components/schemas/Integriteit' + nullable: true + description: + Uitdrukking van mate van volledigheid en onbeschadigd zijn + van digitaal bestand. + title: integriteit + informatieobjecttype: + type: string + format: uri + description: + URL-referentie naar het INFORMATIEOBJECTTYPE (in de Catalogi + API). + title: informatieobjecttype + maxLength: 200 + locked: + type: boolean + readOnly: true + description: + Geeft aan of het document gelocked is. Alleen als een document + gelocked is, mogen er aanpassingen gemaakt worden. + title: locked + bestandsdelen: + type: array + items: + $ref: '#/components/schemas/SchemaBestandsDeel' + readOnly: true + title: bestandsdelen + trefwoorden: + type: array + items: + type: string + maxLength: 100 + nullable: true + description: Een lijst van trefwoorden gescheiden door comma's. + title: trefwoorden + required: + - auteur + - beginRegistratie + - bestandsdelen + - bronorganisatie + - creatiedatum + - informatieobjecttype + - locked + - taal + - titel + - url + - versie SoortEnum: enum: - analoog From 2a559ce5824516537f509a5166e5414018d1e989 Mon Sep 17 00:00:00 2001 From: matthijsbekendam Date: Tue, 29 Aug 2023 14:48:52 +0200 Subject: [PATCH 2/2] update: CHANGELOG.rst and README.rst --- CHANGELOG.rst | 7 +++++++ README.rst | 2 ++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a9a13cc1..13af465b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ =========== Wijzigingen =========== +1.4.1 (2023-08-29) +=========== + +- **Changed:** schema generation such that the `lock` attribute shows up in EIO.bestandsdelen GET response. + +Implementation changes +---------------------- 1.4.0 (2023-08-22) =========== diff --git a/README.rst b/README.rst index 2c7c50da..ece4cc7d 100644 --- a/README.rst +++ b/README.rst @@ -24,6 +24,8 @@ Versie Release datum API specificatie master n.v.t. `ReDoc `_, `Scopes `_ `Berichtkenmerken `_ `Swagger `_ (`verschillen `_) +1.4.1 2023-08-29 `ReDoc `_, `Scopes `_ `Berichtkenmerken `_ + `Swagger `_ 1.4.0 2023-08-22 `ReDoc `_, `Scopes `_ `Berichtkenmerken `_ `Swagger `_ 1.3.x 2023-03-29 `ReDoc `_, `Scopes `_ `Berichtkenmerken `_