Skip to content

Commit 2c892ec

Browse files
committed
♻️ organize convenience methods into separate namespace
1 parent d650c29 commit 2c892ec

File tree

10 files changed

+87
-53
lines changed

10 files changed

+87
-53
lines changed

openklant_client/_methods/__init__.py

Whitespace-only changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing import cast
2+
3+
from ape_pie import APIClient
4+
5+
from openklant_client._resources.base import ConvenienceMethodMixin
6+
from openklant_client.types.methods.maak_klant_contact import (
7+
MaakKlantContactCreateData,
8+
MaakKlantContactResponse,
9+
)
10+
11+
12+
class MaakKlantContactConvenienceMethod(ConvenienceMethodMixin):
13+
"""
14+
Convenience endpoint to create of KlantContact, Betrokkene and OnderwerpObject
15+
"""
16+
17+
http_client: APIClient
18+
base_path: str = "maak-klantcontact"
19+
20+
def __call__(
21+
self,
22+
*,
23+
data: MaakKlantContactCreateData,
24+
) -> MaakKlantContactResponse:
25+
response = self._post(self.base_path, data=data)
26+
return cast(MaakKlantContactResponse, self.process_response(response))

openklant_client/_resources/base.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,15 @@ def inner(*args: P.args, **kwargs: P.kwargs) -> Generator[T, Any, None]:
239239
return self._paginator(f(*args, **kwargs))
240240

241241
return inner
242+
243+
244+
class ConvenienceMethodMixin(ResourceMixin):
245+
http_client: APIClient
246+
247+
def __init__(self, http_client: APIClient):
248+
self.http_client = http_client
249+
250+
def __call__(self):
251+
raise NotImplementedError(
252+
"You must implement the _call__ method to invoke the convenience method"
253+
)

openklant_client/_resources/maak_klant_contact.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

openklant_client/client.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1+
from dataclasses import dataclass
12
from typing import Any
23

34
from ape_pie import APIClient
45
from ape_pie.typing import ConfigAdapter
56

7+
from openklant_client._methods.maak_klant_contact import (
8+
MaakKlantContactConvenienceMethod,
9+
)
610
from openklant_client._resources.actor import ActorResource
711
from openklant_client._resources.betrokkene import BetrokkeneResource
812
from openklant_client._resources.digitaal_adres import DigitaalAdresResource
913
from openklant_client._resources.interne_taak import InterneTaakResource
1014
from openklant_client._resources.klant_contact import KlantContactResource
11-
from openklant_client._resources.maak_klant_contact import MaakKlantContactResource
1215
from openklant_client._resources.onderwerp_object import OnderwerpObjectResource
1316
from openklant_client._resources.partij import PartijResource
1417
from openklant_client._resources.partij_identificator import PartijIdentificatorResource
1518

1619

20+
@dataclass
21+
class ConvenienceMethods:
22+
"""Container for non-resource centric, convenience method endpoints."""
23+
24+
maak_klant_contact: MaakKlantContactConvenienceMethod
25+
26+
1727
class OpenKlantClient(APIClient):
1828
partij: PartijResource
1929
partij_identificator: PartijIdentificatorResource
@@ -23,7 +33,7 @@ class OpenKlantClient(APIClient):
2333
actor: ActorResource
2434
interne_taak: InterneTaakResource
2535
betrokkene: BetrokkeneResource
26-
maak_klant_contact: MaakKlantContactResource
36+
methods: ConvenienceMethods
2737

2838
def __init__(
2939
self,
@@ -50,7 +60,9 @@ def __init__(
5060
self.actor = ActorResource(self)
5161
self.interne_taak = InterneTaakResource(self)
5262
self.betrokkene = BetrokkeneResource(self)
53-
self.maak_klant_contact = MaakKlantContactResource(self)
63+
self.methods = ConvenienceMethods(
64+
maak_klant_contact=MaakKlantContactConvenienceMethod(self)
65+
)
5466

5567
@classmethod
5668
def configure_from(cls, adapter: ConfigAdapter, **kwargs):

openklant_client/types/methods/__init__.py

Whitespace-only changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing import NotRequired, TypedDict
2+
3+
from openklant_client.types.resources.betrokkene import (
4+
Betrokkene,
5+
BetrokkeneBaseCreateData,
6+
)
7+
from openklant_client.types.resources.klant_contact import (
8+
CreateKlantContactData,
9+
KlantContact,
10+
)
11+
from openklant_client.types.resources.onderwerp_object import (
12+
OnderwerpObject,
13+
OnderwerpObjectBaseCreateData,
14+
)
15+
16+
17+
class MaakKlantContactCreateData(TypedDict):
18+
klantcontact: CreateKlantContactData
19+
betrokkene: NotRequired[BetrokkeneBaseCreateData]
20+
onderwerpobject: NotRequired[OnderwerpObjectBaseCreateData]
21+
22+
23+
class MaakKlantContactResponse(TypedDict):
24+
klantcontact: KlantContact
25+
betrokkene: Betrokkene | None
26+
onderwerpobject: OnderwerpObject | None

openklant_client/types/resources/maak_klant_contact.py

Lines changed: 0 additions & 17 deletions
This file was deleted.

tests/test_maak_klant_contact.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from tests.validators import (
44
MaakKlantContactCreateDataValidator,
5-
MaakKlantContactValidator,
5+
MaakKlantContactResponseValidator,
66
)
77

88

@@ -32,6 +32,6 @@ def test_create_klant_contact(client) -> None:
3232
},
3333
}
3434
)
35-
resp = client.maak_klant_contact.create(data=data)
35+
resp = client.methods.maak_klant_contact(data=data)
3636

37-
MaakKlantContactValidator.validate_python(resp)
37+
MaakKlantContactResponseValidator.validate_python(resp)

tests/validators.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
from pydantic import TypeAdapter
1010

11+
from openklant_client.types.methods.maak_klant_contact import (
12+
MaakKlantContactCreateData,
13+
MaakKlantContactResponse,
14+
)
1115
from openklant_client.types.resources.actor import Actor, CreateActorData
1216
from openklant_client.types.resources.betrokkene import Betrokkene, BetrokkeneCreateData
1317
from openklant_client.types.resources.digitaal_adres import (
@@ -22,10 +26,6 @@
2226
CreateKlantContactData,
2327
KlantContact,
2428
)
25-
from openklant_client.types.resources.maak_klant_contact import (
26-
MaakKlantContact,
27-
MaakKlantContactCreateData,
28-
)
2929
from openklant_client.types.resources.onderwerp_object import (
3030
CreateOnderwerpObjectData,
3131
OnderwerpObject,
@@ -76,5 +76,5 @@
7676
CreatePartijIdentificatorDataValidator = TypeAdapter(CreatePartijIdentificatorData)
7777

7878
# Maak Klant Contact validators
79-
MaakKlantContactValidator = TypeAdapter(MaakKlantContact)
79+
MaakKlantContactResponseValidator = TypeAdapter(MaakKlantContactResponse)
8080
MaakKlantContactCreateDataValidator = TypeAdapter(MaakKlantContactCreateData)

0 commit comments

Comments
 (0)