Skip to content

Commit

Permalink
✨ [#14] added information category management command
Browse files Browse the repository at this point in the history
  • Loading branch information
bart-maykin committed Oct 9, 2024
1 parent a25c025 commit f7e7254
Show file tree
Hide file tree
Showing 3 changed files with 343 additions and 0 deletions.
236 changes: 236 additions & 0 deletions src/woo_publications/fixtures/informatie_category.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
[
{
"model": "metadata.informationcategory",
"pk": 1,
"fields": {
"order": 1010,
"uuid": "be4e21c2-0be5-4616-945e-1f101b0c0e6d",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_139c6280",
"naam": "wet of algemeen verbindend voorschrift",
"naam_meervoud": "wetten en algemeen verbindende voorschriften",
"definitie": "wetten en andere algemeen verbindende voorschriften",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 2,
"fields": {
"order": 1090,
"uuid": "380f49a4-8578-4317-b91e-3dfd13bab89b",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_3a248e3a",
"naam": "agenda of besluitenlijst bestuurscollege",
"naam_meervoud": "agenda’s en besluitenlijsten bestuurscolleges",
"definitie": "agenda’s en besluitenlijsten van vergaderingen van de ministerraad, gedeputeerde staten, colleges van burgemeester en wethouders en dagelijkse besturen van waterschappen en dagelijkse besturen van openbare lichamen als bedoeld in de Wet gemeenschappelijke regelingen",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 3,
"fields": {
"order": 1140,
"uuid": "b84c3b0d-a471-48f5-915f-7fbd8b94188f",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_3baef532",
"naam": "Woo-verzoek of -besluit",
"naam_meervoud": "Woo-verzoeken en -besluiten",
"definitie": "de inhoud van de schriftelijke verzoeken op grond van artikel 4.1, van de schriftelijke beslissingen op die verzoeken en de daarbij verstrekte informatie",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 4,
"fields": {
"order": 1040,
"uuid": "9aeb7501-3f77-4f36-8c8f-d21f47c2d6e8",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_40a05794",
"naam": "organisatie en werkwijze",
"naam_meervoud": "organisatie en werkwijze",
"definitie": "inzicht in zijn organisatie en werkwijze, waaronder de taken en bevoegdheden van de organisatieonderdelen",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 5,
"fields": {
"order": 1160,
"uuid": "d3008496-a014-431a-8b6b-0813f09e6085",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_46a81018",
"naam": "beschikking",
"naam_meervoud": "beschikkingen",
"definitie": "beschikkingen, met uitzondering van 21 categorieën.",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 6,
"fields": {
"order": 1030,
"uuid": "88fb1c5e-e899-456d-b077-6101a9829c11",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_759721e2",
"naam": "ontwerp van wet- en regelgeving met adviesaanvraag",
"naam_meervoud": "ontwerpen van wet- en regelgeving met adviesaanvraag",
"definitie": "ontwerpen van wetten, andere algemeen verbindende voorschriften en overige besluiten van algemene strekking waarover een extern advies is gevraagd, met inbegrip van de adviesaanvraag",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 7,
"fields": {
"order": 2000,
"uuid": "8223209f-a502-4dda-b1b6-c33b61525239",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_816e508d",
"naam": "inspanningsverplichting art 3.1 Woo",
"naam_meervoud": "inspanningsverplichting art 3.1 Woo",
"definitie": "Informatie die niet valt onder een van de informatiecategorieën van artikel 3.3 Woo, maar actief openbaar is gemaakt op grond van de algemene inspanningsverplichting van artikel 3.1 Woo ",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 8,
"fields": {
"order": 1050,
"uuid": "7184027d-5634-4bd4-8121-871916384f0e",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_89ee6784",
"naam": "bereikbaarheidsgegevens",
"naam_meervoud": "bereikbaarheidsgegevens",
"definitie": "de bereikbaarheid van het bestuursorgaan en zijn organisatieonderdelen en de wijze waarop een verzoek om informatie kan worden ingediend",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 9,
"fields": {
"order": 1060,
"uuid": "ca9a38d6-5774-43fb-acc0-04832e9fd231",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_8c840238",
"naam": "bij vertegenwoordigend orgaan ingekomen stuk",
"naam_meervoud": "bij vertegenwoordigende organen ingekomen stukken",
"definitie": "bij de Kamers en de verenigde vergadering der Staten-Generaal, provinciale staten, gemeenteraden en algemene besturen van waterschappen ter behandeling ingekomen stukken, tenzij deze betrekking hebben op door de regering vertrouwelijk aan de Staten-Generaal verstrekte informatie of tenzij deze betrekking hebben op individuele gevallen",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 10,
"fields": {
"order": 1110,
"uuid": "7ee891df-ca3e-4b19-b9e5-494bc3c485ea",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_8fc2335c",
"naam": "convenant",
"naam_meervoud": "convenanten",
"definitie": "convenanten",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 11,
"fields": {
"order": 1100,
"uuid": "5bfcb832-e940-493e-8050-699053f4f56a",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_99a836c7",
"naam": "advies",
"naam_meervoud": "adviezen",
"definitie": "adviezen:\n1. over de ontwerpen, bedoeld in het eerste lid, onderdeel c, van adviescolleges of -commissies alsmede van andere externe partijen indien die om advies zijn verzocht;\n2. over andere onderwerpen van adviescolleges of -commissies, alsmede de op dat advies betrekking hebbende adviesaanvraag, uitgezonderd adviezen die betrekking hebben op individuele gevallen;",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 12,
"fields": {
"order": 1170,
"uuid": "3e9298ed-c90a-49fb-b89d-0cc060b7b0f7",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_a870c43d",
"naam": "klachtoordeel",
"naam_meervoud": "klachtoordelen",
"definitie": "schriftelijke oordelen in klachtprocedures als bedoeld in titel 9.1 van de Algemene wet bestuursrecht",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 13,
"fields": {
"order": 1020,
"uuid": "8f3bdef0-a926-4f67-b1f2-94c583c462ce",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_aab6bfc7",
"naam": "overig besluit van algemene strekking",
"naam_meervoud": "overige besluiten van algemene strekking",
"definitie": "overige besluiten van algemene strekking",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 14,
"fields": {
"order": 1120,
"uuid": "f4de3422-ce74-45c7-b881-45bebe90984f",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_c6cd1213",
"naam": "jaarplan of jaarverslag",
"naam_meervoud": "jaarplannen en jaarverslagen",
"definitie": "jaarplannen en jaarverslagen van bestuursorganen inzake de voorgenomen uitvoering van de taak of de verantwoording van die uitvoering",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 15,
"fields": {
"order": 1070,
"uuid": "568ebb54-9e43-4c12-924f-77f7d812026d",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_c76862ab",
"naam": "vergaderstuk Staten-Generaal",
"naam_meervoud": "vergaderstukken Staten-Generaal",
"definitie": "vergaderstukken en verslagen van de Kamers en de verenigde vergadering der Staten-Generaal en hun commissies, tenzij deze betrekking hebben op door de regering vertrouwelijk aan de Staten-Generaal verstrekte informatie",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 16,
"fields": {
"order": 1130,
"uuid": "68e33566-9f48-4547-8024-2d0d03b54b4d",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_cf268088",
"naam": "subsidieverplichting anders dan met beschikking",
"naam_meervoud": "subsidieverplichtingen anders dan met beschikking",
"definitie": "verplichtingen tot verstrekking van subsidies, anders dan met een beschikking (NB - alleen bij Min. BZ)",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 17,
"fields": {
"order": 1080,
"uuid": "57e3c1e2-53aa-4d2c-888d-7232288dd425",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_db4862c3",
"naam": "vergaderstuk decentrale overheid",
"naam_meervoud": "vergaderstukken decentrale overheden",
"definitie": "vergaderstukken en verslagen van provinciale staten, gemeenteraden en algemene besturen van waterschappen, algemene besturen van openbare lichamen, besturen van bedrijfsvoeringsorganisaties en gemeenschappelijke organen als bedoeld in de Wet gemeenschappelijke regelingen en hun commissies",
"oorsprong": "waardelijst"
}
},
{
"model": "metadata.informationcategory",
"pk": 18,
"fields": {
"order": 1150,
"uuid": "e7f1b136-58f1-4d7e-82b3-0571e2388058",
"identifier": "https://identifier.overheid.nl/tooi/def/thes/kern/c_fdaee95e",
"naam": "onderzoeksrapport",
"naam_meervoud": "onderzoeksrapporten",
"definitie": "op verzoek van een bestuursorgaan ambtelijk of extern opgestelde onderzoeksrapporten die geen onderdeel vormen van de uitvoering van de taak van dat bestuursorgaan, die voornamelijk uit feitelijk materiaal bestaan en die betrekking hebben op:\n1. de wijze van functioneren van de eigen organisatie;\n2. de voorbereiding of de evaluatie van beleid, inclusief de uitvoering, naleving en handhaving.",
"oorsprong": "waardelijst"
}
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from django.core.management.base import BaseCommand, CommandError

from woo_publications.metadata.update_informatie_category import (
InformatieCategoryWaardenlijstError,
update_informatie_category,
)


class Command(BaseCommand):
help = "Used to fetch the gov waardenlijsten data and turn them into a fixture to load the data into the db."

def add_arguments(self, parser):
parser.add_argument(
"--file-path",
action="store",
help="The file path to where the fixture file will be created.",
default=None,
)

def handle(self, *args, **options):
try:
update_informatie_category(options["file_path"])
except InformatieCategoryWaardenlijstError as err:
raise CommandError(err)
83 changes: 83 additions & 0 deletions src/woo_publications/metadata/update_informatie_category.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
from io import StringIO
from pathlib import Path

Check warning on line 2 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L1-L2

Added lines #L1 - L2 were not covered by tests

from django.conf import settings
from django.core.management import call_command

Check warning on line 5 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L4-L5

Added lines #L4 - L5 were not covered by tests

import requests
from glom import PathAccessError, T, glom

Check warning on line 8 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L7-L8

Added lines #L7 - L8 were not covered by tests

from woo_publications.metadata.constants import InformationCategoryOrigins
from woo_publications.metadata.models import InformationCategory

Check warning on line 11 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L10-L11

Added lines #L10 - L11 were not covered by tests

SPEC = {

Check warning on line 13 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L13

Added line #L13 was not covered by tests
"naam": T["http://www.w3.org/2004/02/skos/core#prefLabel"][0]["@value"],
"naam_meervoud": T[
"https://identifier.overheid.nl/tooi/def/ont/prefLabelVoorGroepen"
][0]["@value"],
"definitie": T["http://www.w3.org/2004/02/skos/core#definition"][0]["@value"],
"order": T["http://www.w3.org/ns/shacl#order"][0]["@value"],
}


class InformatieCategoryWaardenlijstError(Exception):

Check warning on line 23 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L23

Added line #L23 was not covered by tests
pass


def update_informatie_category(file_path: str):

Check warning on line 27 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L27

Added line #L27 was not covered by tests
if not file_path:
file_path = str(

Check warning on line 29 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L29

Added line #L29 was not covered by tests
Path(
settings.BASE_DIR
/ "src"
/ "woo_publications"
/ "fixtures"
/ "informatie_category.json"
)
)

response = requests.get(

Check warning on line 39 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L39

Added line #L39 was not covered by tests
"https://repository.officiele-overheidspublicaties.nl/waardelijsten/scw_woo_informatiecategorieen/3/json/scw_woo_informatiecategorieen_3.json"
)

try:
response.raise_for_status()
except requests.exceptions.ConnectionError as err:
raise InformatieCategoryWaardenlijstError(

Check warning on line 46 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L43-L46

Added lines #L43 - L46 were not covered by tests
"Could not connect with url."
) from err

data = response.json()

Check warning on line 50 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L50

Added line #L50 was not covered by tests
if not data:
raise InformatieCategoryWaardenlijstError("Could not retrieve json from url.")

Check warning on line 52 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L52

Added line #L52 was not covered by tests

for waardenlijst in data:
# filter out all ids that aren't waardenlijsten
if (
not waardenlijst.get("@type")[0]
== "http://www.w3.org/2004/02/skos/core#Concept"
):
continue

Check warning on line 60 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L60

Added line #L60 was not covered by tests

fields = glom(waardenlijst, SPEC, skip_exc=PathAccessError)
fields["oorsprong"] = InformationCategoryOrigins.value_list

Check warning on line 63 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L62-L63

Added lines #L62 - L63 were not covered by tests

if fields:
InformationCategory.objects.update_or_create(

Check warning on line 66 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L66

Added line #L66 was not covered by tests
identifier=waardenlijst.get("@id"), defaults=fields
)

to_export = InformationCategory.objects.filter(

Check warning on line 70 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L70

Added line #L70 was not covered by tests
oorsprong=InformationCategoryOrigins.value_list
).values_list("pk", flat=True)

call_command(

Check warning on line 74 in src/woo_publications/metadata/update_informatie_category.py

View check run for this annotation

Codecov / codecov/patch

src/woo_publications/metadata/update_informatie_category.py#L74

Added line #L74 was not covered by tests
"dumpdata",
"metadata.informationcategory",
format="json",
indent=4,
natural_primary=True,
pks=",".join([str(pk) for pk in to_export]),
output=file_path,
stdout=StringIO(),
)

0 comments on commit f7e7254

Please sign in to comment.