Skip to content

Commit ee4a1f9

Browse files
authored
Merge pull request #696 from maykinmedia/fix/691-multiple-services-configured
[#691] Multiple services configured
2 parents 6d0b9d1 + f47b1dc commit ee4a1f9

File tree

9 files changed

+49
-19
lines changed

9 files changed

+49
-19
lines changed

backend/src/openarchiefbeheer/destruction/models.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
from timeline_logger.models import TimelineLog
2020
from zgw_consumers.client import build_client
2121
from zgw_consumers.constants import APITypes
22-
from zgw_consumers.models import Service
2322

2423
from openarchiefbeheer.accounts.models import User
2524
from openarchiefbeheer.config.models import ArchiveConfig
2625
from openarchiefbeheer.utils.results_store import ResultStore
26+
from openarchiefbeheer.utils.services import get_service
2727
from openarchiefbeheer.zaken.utils import (
2828
delete_zaak_and_related_objects,
2929
get_zaak_metadata,
@@ -286,7 +286,7 @@ def get_destruction_report_url(self) -> str | None:
286286
if not self.zaak_destruction_report_url:
287287
return
288288

289-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
289+
zrc_service = get_service(APITypes.zrc)
290290
zrc_client = build_client(zrc_service)
291291

292292
with zrc_client:

backend/src/openarchiefbeheer/destruction/utils.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
from zgw_consumers.client import build_client
1212
from zgw_consumers.constants import APITypes
13-
from zgw_consumers.models import Service
1413

1514
from openarchiefbeheer.accounts.models import User
1615
from openarchiefbeheer.config.models import ArchiveConfig
@@ -19,6 +18,7 @@
1918
from openarchiefbeheer.logging import logevent
2019
from openarchiefbeheer.selection.models import SelectionItem
2120
from openarchiefbeheer.utils.results_store import ResultStore
21+
from openarchiefbeheer.utils.services import get_service
2222
from openarchiefbeheer.zaken.models import Zaak
2323

2424
from .constants import (
@@ -177,7 +177,7 @@ def create_zaak_for_report(
177177
) -> None:
178178
config = ArchiveConfig.get_solo()
179179

180-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
180+
zrc_service = get_service(APITypes.zrc)
181181
zrc_client = build_client(zrc_service)
182182

183183
with zrc_client:
@@ -240,7 +240,7 @@ def create_eio_destruction_report(
240240

241241
config = ArchiveConfig.get_solo()
242242

243-
drc_service = Service.objects.get(api_type=APITypes.drc)
243+
drc_service = get_service(APITypes.drc)
244244
drc_client = build_client(drc_service)
245245

246246
with drc_client, destruction_list.destruction_report.open("rb") as f_report:
@@ -271,7 +271,7 @@ def attach_report_to_zaak(
271271
if store.has_created_resource("zaakinformatieobjecten"):
272272
return
273273

274-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
274+
zrc_service = get_service(APITypes.zrc)
275275
zrc_client = build_client(zrc_service)
276276

277277
with zrc_client:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
class NoServiceConfigured(Exception):
2+
pass
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from zgw_consumers.constants import APITypes
2+
from zgw_consumers.models import Service
3+
4+
from .exceptions import NoServiceConfigured
5+
6+
7+
def get_service(service_type: APITypes) -> Service:
8+
service = Service.objects.filter(api_type=service_type).first()
9+
if not service:
10+
raise NoServiceConfigured(f"No service configured of type {service_type}.")
11+
return service
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django.test import TestCase
2+
3+
from zgw_consumers.constants import APITypes
4+
from zgw_consumers.models import Service
5+
6+
from ..exceptions import NoServiceConfigured
7+
from ..services import get_service
8+
9+
10+
class UtilsTests(TestCase):
11+
def test_no_zaak_services_configured(self):
12+
Service.objects.filter(api_type=APITypes.zrc).delete()
13+
14+
with self.assertRaises(NoServiceConfigured):
15+
get_service(APITypes.zrc)

backend/src/openarchiefbeheer/zaken/models.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from zgw_consumers.client import build_client
77
from zgw_consumers.constants import APITypes
8-
from zgw_consumers.models import Service
8+
9+
from openarchiefbeheer.utils.services import get_service
910

1011

1112
class Zaak(models.Model):
@@ -112,7 +113,7 @@ def __str__(self):
112113
def update_data(self, data: dict) -> None:
113114
from .api.serializers import ZaakSerializer
114115

115-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
116+
zrc_service = get_service(APITypes.zrc)
116117
zrc_client = build_client(zrc_service)
117118

118119
with zrc_client:

backend/src/openarchiefbeheer/zaken/tasks.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
from requests.adapters import HTTPAdapter, Retry
1010
from zgw_consumers.client import build_client
1111
from zgw_consumers.constants import APITypes
12-
from zgw_consumers.models import Service
1312

1413
from openarchiefbeheer.celery import app
1514
from openarchiefbeheer.config.models import APIConfig
1615
from openarchiefbeheer.destruction.utils import resync_items_and_zaken
1716
from openarchiefbeheer.logging import logevent
17+
from openarchiefbeheer.utils.services import get_service
1818

1919
from .api.serializers import ZaakSerializer
2020
from .decorators import log_errors
@@ -36,7 +36,7 @@ def configure_retry(client: APIClient) -> APIClient:
3636

3737

3838
def retrieve_and_cache_zaken(is_full_resync=False):
39-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
39+
zrc_service = get_service(APITypes.zrc)
4040
zrc_client = build_client(zrc_service)
4141
zrc_client = configure_retry(zrc_client)
4242

backend/src/openarchiefbeheer/zaken/tests/vcr/test_utils.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
from vcr.unittest import VCRMixin
55
from zgw_consumers.client import build_client
66
from zgw_consumers.constants import APITypes
7-
from zgw_consumers.models import Service
87
from zgw_consumers.test.factories import ServiceFactory
98

109
from openarchiefbeheer.destruction.tests.factories import DestructionListItemFactory
1110
from openarchiefbeheer.utils.results_store import ResultStore
11+
from openarchiefbeheer.utils.services import get_service
1212
from openarchiefbeheer.utils.utils_decorators import reload_openzaak_fixtures
1313

1414
from ...models import Zaak
@@ -54,7 +54,7 @@ def test_delete_zaak_related_to_besluit_related_to_document(self):
5454

5555
delete_zaak_and_related_objects(destruction_list_item.zaak, result_store)
5656

57-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
57+
zrc_service = get_service(APITypes.zrc)
5858
zrc_client = build_client(zrc_service)
5959

6060
with zrc_client:
@@ -65,7 +65,7 @@ def test_delete_zaak_related_to_besluit_related_to_document(self):
6565

6666
self.assertEqual(data["count"], 102)
6767

68-
drc_service = Service.objects.get(api_type=APITypes.drc)
68+
drc_service = get_service(APITypes.drc)
6969
drc_client = build_client(drc_service)
7070
with drc_client:
7171
response = drc_client.get("enkelvoudiginformatieobjecten")
@@ -80,7 +80,7 @@ def test_delete_zaak_related_to_besluit_related_to_document(self):
8080
self.assertIn("DOCUMENT-01", identificaties)
8181
self.assertIn("DOCUMENT-03", identificaties)
8282

83-
brc_service = Service.objects.get(api_type=APITypes.brc)
83+
brc_service = get_service(APITypes.brc)
8484
brc_client = build_client(brc_service)
8585
with brc_client:
8686
response = brc_client.get("besluiten")

backend/src/openarchiefbeheer/zaken/utils.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from openarchiefbeheer.config.models import APIConfig
2626
from openarchiefbeheer.utils.datastructure import HashableDict
2727
from openarchiefbeheer.utils.results_store import ResultStore
28+
from openarchiefbeheer.utils.services import get_service
2829

2930
from .models import Zaak
3031
from .types import DropDownChoice
@@ -267,7 +268,7 @@ def delete_decisions_and_relation_objects(
267268
268269
This automatically deletes ZaakBesluiten in the Zaken API.
269270
"""
270-
brc_service = Service.objects.get(api_type=APITypes.brc)
271+
brc_service = get_service(APITypes.brc)
271272
brc_client = build_client(brc_service)
272273

273274
with brc_client:
@@ -338,7 +339,7 @@ def delete_relation_object(
338339

339340

340341
def delete_documents(result_store: ResultStore) -> None:
341-
drc_service = Service.objects.get(api_type=APITypes.drc)
342+
drc_service = get_service(APITypes.drc)
342343
drc_client = build_client(drc_service)
343344

344345
with drc_client:
@@ -393,7 +394,7 @@ def delete_zaak_and_related_objects(zaak: "Zaak", result_store: ResultStore) ->
393394
If an error occurs after deleting the ZIOs, we wouldn't know which documents
394395
should be deleted.
395396
"""
396-
zrc_service = Service.objects.get(api_type=APITypes.zrc)
397+
zrc_service = get_service(APITypes.zrc)
397398
zrc_client = build_client(zrc_service)
398399

399400
delete_decisions_and_relation_objects(zaak, result_store)
@@ -409,7 +410,7 @@ def retrieve_paginated_type(
409410
def format_choice(item: dict) -> DropDownChoice:
410411
return {"label": item["omschrijving"] or item["url"], "value": item["url"]}
411412

412-
ztc_service = Service.objects.get(api_type=APITypes.ztc)
413+
ztc_service = get_service(APITypes.ztc)
413414
ztc_client = build_client(ztc_service)
414415

415416
with ztc_client:
@@ -433,7 +434,7 @@ def get_zaak_metadata(zaak: Zaak) -> dict:
433434

434435
@lru_cache
435436
def retrieve_zaaktypen(query_params: HashableDict | None = None) -> list[dict]:
436-
ztc_service = Service.objects.get(api_type=APITypes.ztc)
437+
ztc_service = get_service(APITypes.ztc)
437438
ztc_client = build_client(ztc_service)
438439

439440
with ztc_client:

0 commit comments

Comments
 (0)