Skip to content

Commit

Permalink
[#2821] Implement provisionary configuration for OpenKlant2 service
Browse files Browse the repository at this point in the history
  • Loading branch information
pi-sigma committed Oct 18, 2024
1 parent 0ee4d7d commit eea4282
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 15 deletions.
25 changes: 14 additions & 11 deletions src/open_inwoner/openklant/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from open_inwoner.openklant.clients import build_klanten_client
from open_inwoner.utils.logentry import system_action
from openklant2.client import OpenKlant2Client
from openklant2.models import OpenKlant2Config
from openklant2.types.resources.digitaal_adres import DigitaalAdres
from openklant2.types.resources.klant_contact import KlantContact
from openklant2.types.resources.partij import Partij, PartijListParams
Expand Down Expand Up @@ -144,19 +145,21 @@ def from_klantcontact_and_answer(


class OpenKlant2Service:

config: OpenKlant2Config
client: OpenKlant2Client
mijn_vragen_actor: uuid.UUID | None
MIJN_VRAGEN_KANAAL: str = "oip_mijn_vragen"

def __init__(
self, client: OpenKlant2Client, mijn_vragen_actor: str | uuid.UUID | None = None
self,
config: OpenKlant2Config | None = None,
mijn_vragen_actor: str | uuid.UUID | None = None,
):
if not isinstance(client, OpenKlant2Client):
raise ValueError(
f"`client` must be an instance of {type(OpenKlant2Client)}"
)
self.client = client
# TODO: replace with proper config model instance
self.config = config or OpenKlant2Config.from_django_settings()
self.client = OpenKlant2Client(
api_root=self.config.api_url,
token=self.config.api_token,
)
if mijn_vragen_actor:
self.mijn_vragen_actor = (
uuid.UUID(mijn_vragen_actor)
Expand Down Expand Up @@ -466,7 +469,7 @@ def create_question(
"inhoud": question,
"onderwerp": subject,
"taal": "nld",
"kanaal": self.MIJN_VRAGEN_KANAAL,
"kanaal": self.config.mijn_vragen_kanaal,
"vertrouwelijk": False,
"plaatsgevondenOp": timezone.now().isoformat(),
}
Expand Down Expand Up @@ -513,7 +516,7 @@ def create_answer(
"inhoud": answer,
"onderwerp": question_klantcontact["onderwerp"],
"taal": "nld",
"kanaal": self.MIJN_VRAGEN_KANAAL,
"kanaal": self.config.mijn_vragen_kanaal,
"vertrouwelijk": False,
"plaatsgevondenOp": timezone.now().isoformat(),
}
Expand Down Expand Up @@ -555,7 +558,7 @@ def klantcontacten_for_partij(self, partij: Partij) -> Iterable[KlantContact]:
"hadBetrokkenen",
"hadBetrokkenen.wasPartij",
],
"kanaal": self.MIJN_VRAGEN_KANAAL,
"kanaal": self.config.mijn_vragen_kanaal,
}
)

Expand Down
10 changes: 9 additions & 1 deletion src/open_inwoner/openklant/tests/test_openklant2_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,22 @@
from open_inwoner.openklant.services import OpenKlant2Question, OpenKlant2Service
from open_inwoner.openklant.tests.helpers import Openklant2ServiceTestCase
from openklant2.factories.partij import CreatePartijPersoonDataFactory
from openklant2.models import OpenKlant2Config
from openklant2.types.resources.partij import PartijValidator


@tag("openklant2")
class PartijGetOrCreateTestCase(Openklant2ServiceTestCase):
def setUp(self):
super().setUp()
self.service = OpenKlant2Service(self.openklant_client)
self.openklant2_config = OpenKlant2Config(
api_root="http://localhost:8338",
api_path="/klantinteracties/api/v1",
api_token="b2eb1da9861da88743d72a3fb4344288fe2cba44",
mijn_vragen_kanaal="oip_mijn_vragen",
mijn_vragen_organisatie_naam="Open Inwoner Platform",
)
self.service = OpenKlant2Service(config=self.openklant2_config)
self.user = UserFactory(first_name="John", last_name="Doe")

def test_get_or_create_persoon(self):
Expand Down
6 changes: 3 additions & 3 deletions src/openklant2/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ class OpenKlant2Client:
http_client: APIClient
partij: PartijResource

def __init__(self, token: str, api_root: str):
def __init__(self, api_url: str, api_token: str):
self.http_client = APIClient(
request_kwargs={"headers": {"Authorization": f"Token {token}"}},
base_url=api_root,
request_kwargs={"headers": {"Authorization": f"Token {api_token}"}},
base_url=api_url,
)

self.partij = PartijResource(self.http_client)
Expand Down
23 changes: 23 additions & 0 deletions src/openklant2/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from dataclasses import dataclass
from urllib.parse import urljoin


@dataclass
class OpenKlant2Config:
api_root: str
api_path: str
api_token: str

# Question/Answer settings
mijn_vragen_kanaal: str # e.g. "oip_mijn_vragen"
mijn_vragen_organisatie_naam: str # e.g. "Open Inwoner Platform",

@property
def api_url(self):
return urljoin(self.api_root, self.api_path)

@classmethod
def from_django_settings(cls):
from django.conf import settings

return cls(**settings.OPENKLANT2_CONFIG)

0 comments on commit eea4282

Please sign in to comment.