From fae11b0a3a98a8212936560104c7847f4dd6bdaf Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Thu, 10 Sep 2026 13:59:16 +0100 Subject: [PATCH 1/4] Type target manager request defaults --- newsfragments/3605.change.rst | 2 ++ src/mock_vws/_flask_server/target_manager.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 newsfragments/3605.change.rst diff --git a/newsfragments/3605.change.rst b/newsfragments/3605.change.rst new file mode 100644 index 000000000..56ec6825b --- /dev/null +++ b/newsfragments/3605.change.rst @@ -0,0 +1,2 @@ +Type target-manager request defaults as database dictionaries instead of +arbitrary mappings. diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index bee1d009b..1db36a980 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -4,7 +4,7 @@ import copy import datetime import json -from collections.abc import Callable, Mapping, Sequence +from collections.abc import Callable, Sequence from enum import Enum, StrEnum, auto from http import HTTPMethod, HTTPStatus from typing import Annotated, NotRequired, TypedDict, TypeIs, assert_never @@ -22,7 +22,12 @@ ) from pydantic_settings import BaseSettings -from mock_vws.database import CloudDatabase, VuMarkDatabase +from mock_vws.database import ( + CloudDatabase, + CloudDatabaseDict, + VuMarkDatabase, + VuMarkDatabaseDict, +) from mock_vws.database_type import DatabaseType from mock_vws.model_target import ModelTargetDataset, OAuth2ClientCredential from mock_vws.request_rate_limits import RequestRateLimit, RequestRateLimits @@ -329,7 +334,7 @@ def _validate_request_body[T: BaseModel]( *, model: type[T], data: bytes, - defaults: Mapping[str, object], + defaults: CloudDatabaseDict | VuMarkDatabaseDict, ) -> T: """Parse a request body as a JSON object and validate it as a model. From c8023b7a93f41a9f7108f1a53b07d223f58b249c Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2026 13:01:12 +0000 Subject: [PATCH 2/4] [autofix.ci] apply automated fixes --- newsfragments/3605.change.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/newsfragments/3605.change.rst b/newsfragments/3605.change.rst index 56ec6825b..ffcf633a9 100644 --- a/newsfragments/3605.change.rst +++ b/newsfragments/3605.change.rst @@ -1,2 +1 @@ -Type target-manager request defaults as database dictionaries instead of -arbitrary mappings. +Type target-manager request defaults as database dictionaries instead of arbitrary mappings. From cec103fa8a36e70f78adabf8cf88a974610875e3 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Thu, 10 Sep 2026 15:33:48 +0100 Subject: [PATCH 3/4] Type parsed request bodies as JSON --- src/mock_vws/_flask_server/target_manager.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index 1db36a980..b3a510fdb 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -29,7 +29,11 @@ VuMarkDatabaseDict, ) from mock_vws.database_type import DatabaseType -from mock_vws.model_target import ModelTargetDataset, OAuth2ClientCredential +from mock_vws.model_target import ( + JSONValue, + ModelTargetDataset, + OAuth2ClientCredential, +) from mock_vws.request_rate_limits import RequestRateLimit, RequestRateLimits from mock_vws.states import States from mock_vws.target import ImageTarget, VuMarkTarget @@ -108,7 +112,7 @@ def validate(value: object) -> T: @beartype -def _is_json_object(value: object, /) -> TypeIs[dict[str, object]]: +def _is_json_object(value: object, /) -> TypeIs[dict[str, JSONValue]]: """Whether a value parsed from JSON is an object. JSON object keys are always strings. From 03c86c5baad0724080a7e6fa2bfd43745562c520 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Thu, 10 Sep 2026 15:35:17 +0100 Subject: [PATCH 4/4] Add news fragment --- newsfragments/3606.change.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/3606.change.rst diff --git a/newsfragments/3606.change.rst b/newsfragments/3606.change.rst new file mode 100644 index 000000000..59763f327 --- /dev/null +++ b/newsfragments/3606.change.rst @@ -0,0 +1 @@ +Type parsed Target Manager request bodies using recursive JSON values.