diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index 0b7f3469b..8d7ba28f0 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -369,6 +369,7 @@ def delete_target(database_name: str, target_id: str) -> Response: rule="/cloud_databases//targets/", methods=[HTTPMethod.PUT], ) +@beartype def update_target(database_name: str, target_id: str) -> Response: """Update a target.""" (database,) = ( diff --git a/src/mock_vws/_flask_server/vwq.py b/src/mock_vws/_flask_server/vwq.py index a421b1b66..4fb1e75c1 100644 --- a/src/mock_vws/_flask_server/vwq.py +++ b/src/mock_vws/_flask_server/vwq.py @@ -113,6 +113,7 @@ def add_response_delay(response: Response) -> Response: @CLOUDRECO_FLASK_APP.errorhandler(code_or_exception=ValidatorError) +@beartype def handle_exceptions(exc: ValidatorError) -> Response: """Return the error response associated with the given exception.""" response = Response( @@ -127,6 +128,7 @@ def handle_exceptions(exc: ValidatorError) -> Response: @CLOUDRECO_FLASK_APP.route(rule="/v1/query", methods=[HTTPMethod.POST]) +@beartype def query() -> Response: """Perform an image recognition query.""" settings = VWQSettings.model_validate(obj={}) diff --git a/src/mock_vws/_flask_server/vws.py b/src/mock_vws/_flask_server/vws.py index fc9bb8a84..ab1c1cb9b 100644 --- a/src/mock_vws/_flask_server/vws.py +++ b/src/mock_vws/_flask_server/vws.py @@ -117,6 +117,7 @@ def get_all_vumark_databases() -> set[VuMarkDatabase]: @VWS_FLASK_APP.before_request +@beartype def set_terminate_wsgi_input() -> None: """We set ``wsgi.input_terminated`` to ``True`` when going through ``requests`` in our tests, so that requests have the given ``Content- @@ -171,6 +172,7 @@ def add_response_delay(response: Response) -> Response: @VWS_FLASK_APP.errorhandler(code_or_exception=ValidatorError) +@beartype def handle_exceptions(exc: ValidatorError) -> Response: """Return the error response associated with the given exception.""" response = Response( @@ -319,6 +321,7 @@ def get_target(target_id: str) -> Response: rule="/targets/", methods=[HTTPMethod.DELETE], ) +@beartype def delete_target(target_id: str) -> Response: """Delete a target. @@ -499,6 +502,7 @@ def database_summary() -> Response: rule="/summary/", methods=[HTTPMethod.GET], ) +@beartype def target_summary(target_id: str) -> Response: """Get a summary report for a target. @@ -616,6 +620,7 @@ def get_duplicates(target_id: str) -> Response: @VWS_FLASK_APP.route(rule="/targets", methods=[HTTPMethod.GET]) +@beartype def target_list() -> Response: """Get a list of all targets. @@ -658,6 +663,7 @@ def target_list() -> Response: @VWS_FLASK_APP.route( rule="/targets/", methods=[HTTPMethod.PUT] ) +@beartype def update_target(target_id: str) -> Response: """Update a target. diff --git a/src/mock_vws/_mock_common.py b/src/mock_vws/_mock_common.py index 5a7069562..5b0c81a62 100644 --- a/src/mock_vws/_mock_common.py +++ b/src/mock_vws/_mock_common.py @@ -8,6 +8,7 @@ from beartype import beartype +@beartype @dataclass(frozen=True) class RequestData: """A library-agnostic representation of an HTTP request. @@ -25,6 +26,7 @@ class RequestData: body: bytes +@beartype @dataclass(frozen=True) class Route: """A representation of a VWS route. diff --git a/src/mock_vws/_query_validators/content_type_validators.py b/src/mock_vws/_query_validators/content_type_validators.py index 3e7dc4792..586978ccc 100644 --- a/src/mock_vws/_query_validators/content_type_validators.py +++ b/src/mock_vws/_query_validators/content_type_validators.py @@ -18,6 +18,7 @@ @beartype def validate_content_type_header( + *, request_headers: Mapping[str, str], request_body: bytes, ) -> None: diff --git a/src/mock_vws/_query_validators/date_validators.py b/src/mock_vws/_query_validators/date_validators.py index 4151b0d31..116aff3eb 100644 --- a/src/mock_vws/_query_validators/date_validators.py +++ b/src/mock_vws/_query_validators/date_validators.py @@ -34,6 +34,7 @@ def validate_date_header_given(*, request_headers: Mapping[str, str]) -> None: raise DateHeaderNotGivenError +@beartype def _accepted_date_formats() -> set[str]: """Return all known accepted date formats. diff --git a/src/mock_vws/_query_validators/image_validators.py b/src/mock_vws/_query_validators/image_validators.py index e2f8f498f..d08617ec2 100644 --- a/src/mock_vws/_query_validators/image_validators.py +++ b/src/mock_vws/_query_validators/image_validators.py @@ -171,6 +171,7 @@ def validate_image_format( @beartype def validate_image_is_image( + *, request_headers: Mapping[str, str], request_body: bytes, ) -> None: diff --git a/src/mock_vws/_query_validators/include_target_data_validators.py b/src/mock_vws/_query_validators/include_target_data_validators.py index b3719aad8..b3696c658 100644 --- a/src/mock_vws/_query_validators/include_target_data_validators.py +++ b/src/mock_vws/_query_validators/include_target_data_validators.py @@ -15,6 +15,7 @@ @beartype def validate_include_target_data( + *, request_headers: Mapping[str, str], request_body: bytes, ) -> None: diff --git a/src/mock_vws/_query_validators/project_state_validators.py b/src/mock_vws/_query_validators/project_state_validators.py index 5075b8560..7767499b2 100644 --- a/src/mock_vws/_query_validators/project_state_validators.py +++ b/src/mock_vws/_query_validators/project_state_validators.py @@ -15,6 +15,7 @@ @beartype def validate_project_state( + *, request_path: str, request_headers: Mapping[str, str], request_body: bytes, diff --git a/src/mock_vws/_requests_mock_server/decorators.py b/src/mock_vws/_requests_mock_server/decorators.py index 04a961989..7cea0e976 100644 --- a/src/mock_vws/_requests_mock_server/decorators.py +++ b/src/mock_vws/_requests_mock_server/decorators.py @@ -35,6 +35,7 @@ _BRISQUE_TRACKING_RATER = BrisqueTargetTrackingRater() +@beartype class MissingSchemeError(Exception): """Raised when a URL is missing a schema.""" diff --git a/src/mock_vws/_requests_mock_server/mock_web_query_api.py b/src/mock_vws/_requests_mock_server/mock_web_query_api.py index 6f8f519d3..b7d7aad57 100644 --- a/src/mock_vws/_requests_mock_server/mock_web_query_api.py +++ b/src/mock_vws/_requests_mock_server/mock_web_query_api.py @@ -41,6 +41,7 @@ def __call__(self, *args: _P.args, **kwargs: _P.kwargs) -> _ResponseType: @beartype def route( + *, path_pattern: str, http_methods: Iterable[str], ) -> Callable[[_RouteMethod[_P]], _RouteMethod[_P]]: diff --git a/src/mock_vws/_requests_mock_server/mock_web_services_api.py b/src/mock_vws/_requests_mock_server/mock_web_services_api.py index 1b0662cea..671539cdb 100644 --- a/src/mock_vws/_requests_mock_server/mock_web_services_api.py +++ b/src/mock_vws/_requests_mock_server/mock_web_services_api.py @@ -67,6 +67,7 @@ def __call__(self, *args: _P.args, **kwargs: _P.kwargs) -> _ResponseType: @beartype def route( + *, path_pattern: str, http_methods: Iterable[HTTPMethod], ) -> Callable[[_RouteMethod[_P]], _RouteMethod[_P]]: diff --git a/src/mock_vws/_services_validators/__init__.py b/src/mock_vws/_services_validators/__init__.py index 7a2e742a3..026d46800 100644 --- a/src/mock_vws/_services_validators/__init__.py +++ b/src/mock_vws/_services_validators/__init__.py @@ -2,6 +2,8 @@ from collections.abc import Iterable, Mapping +from beartype import beartype + from mock_vws._database_matchers import AnyDatabase from .active_flag_validators import validate_active_flag @@ -50,7 +52,9 @@ from .width_validators import validate_width +@beartype def run_services_validators( + *, request_path: str, request_headers: Mapping[str, str], request_body: bytes, diff --git a/src/mock_vws/_services_validators/key_validators.py b/src/mock_vws/_services_validators/key_validators.py index cf4d32fa4..379daaddd 100644 --- a/src/mock_vws/_services_validators/key_validators.py +++ b/src/mock_vws/_services_validators/key_validators.py @@ -14,6 +14,7 @@ _LOGGER = logging.getLogger(name=__name__) +@beartype @dataclass class _Route: """A representation of a VWS route.