From 75bcc5dbcd04be702db85b23dc165bb35dcf9c11 Mon Sep 17 00:00:00 2001 From: Viktor van Wijk Date: Fri, 20 Dec 2024 11:13:46 +0100 Subject: [PATCH] :sparkles: [#4908] Add typing hints for json registration options --- src/openforms/registrations/contrib/json/config.py | 14 ++++++++++++++ src/openforms/registrations/contrib/json/plugin.py | 7 +++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/openforms/registrations/contrib/json/config.py b/src/openforms/registrations/contrib/json/config.py index d71d7964da..091cc529e0 100644 --- a/src/openforms/registrations/contrib/json/config.py +++ b/src/openforms/registrations/contrib/json/config.py @@ -1,3 +1,5 @@ +from typing import Required, TypedDict + from django.utils.translation import gettext_lazy as _ from rest_framework import serializers @@ -28,3 +30,15 @@ class JSONOptionsSerializer(JsonSchemaSerializerMixin, serializers.Serializer): "A comma-separated list of form variables (can also include static variables) to use." ) ) + + +class JSONOptions(TypedDict): + """ + JSON registration plugin options + + This describes the shape of :attr:`JSONOptionsSerializer.validated_data`, after + the input data has been cleaned/validated. + """ + service: Required[Service] + relative_api_endpoint: str + form_variables: Required[list[str]] diff --git a/src/openforms/registrations/contrib/json/plugin.py b/src/openforms/registrations/contrib/json/plugin.py index 2bcdfb816a..51a1f53c43 100644 --- a/src/openforms/registrations/contrib/json/plugin.py +++ b/src/openforms/registrations/contrib/json/plugin.py @@ -7,10 +7,10 @@ from openforms.submissions.models import Submission from openforms.variables.service import get_static_variables -from ...base import BasePlugin, OptionsT # openforms.registrations.base +from ...base import BasePlugin # openforms.registrations.base from ...registry import register # openforms.registrations.registry from ...utils import execute_unless_result_exists -from .config import JSONOptionsSerializer +from .config import JSONOptions, JSONOptionsSerializer @register("json") @@ -18,9 +18,8 @@ class JSONRegistration(BasePlugin): verbose_name = _("JSON registration") configuration_options = JSONOptionsSerializer - def register_submission(self, submission: Submission, options: OptionsT) -> None: + def register_submission(self, submission: Submission, options: JSONOptions) -> dict: # TODO-4908: the email plugin works with a EmailConfig singleton model. Is that useful here? - # TODO-4908: add typing for options dict # TODO-4908: any other form field types that need 'special attention'?