From cb8567a467bd53f0dd528d2d260f21ed6a3b17e0 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Sat, 28 Sep 2024 09:35:53 +0100 Subject: [PATCH] Pass around `Iterable[VuforiaDatabase]` rather than `set[VuforiaDatabase]` --- src/mock_vws/_query_tools.py | 4 ++-- src/mock_vws/_query_validators/__init__.py | 4 ++-- src/mock_vws/_query_validators/auth_validators.py | 6 +++--- .../_query_validators/project_state_validators.py | 4 ++-- src/mock_vws/_services_validators/__init__.py | 4 ++-- .../_services_validators/auth_validators.py | 6 +++--- .../_services_validators/name_validators.py | 6 +++--- .../project_state_validators.py | 4 ++-- .../_services_validators/target_validators.py | 4 ++-- src/mock_vws/target_manager.py | 13 +++++++++---- 10 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/mock_vws/_query_tools.py b/src/mock_vws/_query_tools.py index 2f2936f4..9a4a7a0a 100644 --- a/src/mock_vws/_query_tools.py +++ b/src/mock_vws/_query_tools.py @@ -5,7 +5,7 @@ import base64 import io import uuid -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from email.message import EmailMessage from typing import Any @@ -27,7 +27,7 @@ def get_query_match_response_text( request_body: bytes, request_method: str, request_path: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], query_match_checker: ImageMatcher, ) -> str: """ diff --git a/src/mock_vws/_query_validators/__init__.py b/src/mock_vws/_query_validators/__init__.py index 411bdd99..a933a919 100644 --- a/src/mock_vws/_query_validators/__init__.py +++ b/src/mock_vws/_query_validators/__init__.py @@ -2,7 +2,7 @@ Input validators to use in the mock query API. """ -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from beartype import beartype @@ -47,7 +47,7 @@ def run_query_validators( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Run all validators. diff --git a/src/mock_vws/_query_validators/auth_validators.py b/src/mock_vws/_query_validators/auth_validators.py index 054a82a7..555dea6c 100644 --- a/src/mock_vws/_query_validators/auth_validators.py +++ b/src/mock_vws/_query_validators/auth_validators.py @@ -3,7 +3,7 @@ """ import logging -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from beartype import beartype @@ -65,7 +65,7 @@ def validate_auth_header_number_of_parts( def validate_client_key_exists( *, request_headers: Mapping[str, str], - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate the authorization header includes a client key for a database. @@ -116,7 +116,7 @@ def validate_authorization( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate the authorization header given to the query endpoint. diff --git a/src/mock_vws/_query_validators/project_state_validators.py b/src/mock_vws/_query_validators/project_state_validators.py index dccf202f..ae506574 100644 --- a/src/mock_vws/_query_validators/project_state_validators.py +++ b/src/mock_vws/_query_validators/project_state_validators.py @@ -3,7 +3,7 @@ """ import logging -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from beartype import beartype @@ -21,7 +21,7 @@ def validate_project_state( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate the state of the project. diff --git a/src/mock_vws/_services_validators/__init__.py b/src/mock_vws/_services_validators/__init__.py index e49561ad..f2c72aec 100644 --- a/src/mock_vws/_services_validators/__init__.py +++ b/src/mock_vws/_services_validators/__init__.py @@ -2,7 +2,7 @@ Input validators to use in the mock. """ -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from mock_vws.database import VuforiaDatabase @@ -56,7 +56,7 @@ def run_services_validators( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Run all validators. diff --git a/src/mock_vws/_services_validators/auth_validators.py b/src/mock_vws/_services_validators/auth_validators.py index e3ec36d2..89fe85f8 100644 --- a/src/mock_vws/_services_validators/auth_validators.py +++ b/src/mock_vws/_services_validators/auth_validators.py @@ -3,7 +3,7 @@ """ import logging -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from http import HTTPStatus from beartype import beartype @@ -38,7 +38,7 @@ def validate_auth_header_exists(*, request_headers: Mapping[str, str]) -> None: def validate_access_key_exists( *, request_headers: Mapping[str, str], - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate the authorization header includes an access key for a database. @@ -95,7 +95,7 @@ def validate_authorization( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate the authorization header given to a VWS endpoint. diff --git a/src/mock_vws/_services_validators/name_validators.py b/src/mock_vws/_services_validators/name_validators.py index f11de3cd..516e320e 100644 --- a/src/mock_vws/_services_validators/name_validators.py +++ b/src/mock_vws/_services_validators/name_validators.py @@ -4,7 +4,7 @@ import json import logging -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from http import HTTPMethod, HTTPStatus from beartype import beartype @@ -121,7 +121,7 @@ def validate_name_length(*, request_body: bytes) -> None: @beartype def validate_name_does_not_exist_new_target( *, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], request_body: bytes, request_headers: Mapping[str, str], request_method: str, @@ -182,7 +182,7 @@ def validate_name_does_not_exist_existing_target( request_body: bytes, request_method: str, request_path: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate that the name does not exist for any existing target apart from diff --git a/src/mock_vws/_services_validators/project_state_validators.py b/src/mock_vws/_services_validators/project_state_validators.py index cd21bebe..a526d8f9 100644 --- a/src/mock_vws/_services_validators/project_state_validators.py +++ b/src/mock_vws/_services_validators/project_state_validators.py @@ -3,7 +3,7 @@ """ import logging -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from http import HTTPMethod from beartype import beartype @@ -23,7 +23,7 @@ def validate_project_state( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate the state of the project. diff --git a/src/mock_vws/_services_validators/target_validators.py b/src/mock_vws/_services_validators/target_validators.py index 11bb4df9..f417fcea 100644 --- a/src/mock_vws/_services_validators/target_validators.py +++ b/src/mock_vws/_services_validators/target_validators.py @@ -3,7 +3,7 @@ """ import logging -from collections.abc import Mapping +from collections.abc import Iterable, Mapping from beartype import beartype @@ -21,7 +21,7 @@ def validate_target_id_exists( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: set[VuforiaDatabase], + databases: Iterable[VuforiaDatabase], ) -> None: """ Validate that if a target ID is given, it exists in the database matching diff --git a/src/mock_vws/target_manager.py b/src/mock_vws/target_manager.py index fb8543c2..c5887d28 100644 --- a/src/mock_vws/target_manager.py +++ b/src/mock_vws/target_manager.py @@ -2,10 +2,15 @@ A fake implementation of a Vuforia target manager. """ +from typing import TYPE_CHECKING + from beartype import beartype from mock_vws.database import VuforiaDatabase +if TYPE_CHECKING: + from collections.abc import Iterable + @beartype class TargetManager: @@ -17,7 +22,7 @@ def __init__(self) -> None: """ Create a target manager with no databases. """ - self._databases: set[VuforiaDatabase] = set() + self._databases: Iterable[VuforiaDatabase] = set() def remove_database(self, database: VuforiaDatabase) -> None: """ @@ -29,7 +34,7 @@ def remove_database(self, database: VuforiaDatabase) -> None: Raises: KeyError: The database is not in the target manager. """ - self._databases.remove(database) + self._databases = {db for db in self._databases if db != database} def add_database(self, database: VuforiaDatabase) -> None: """ @@ -78,11 +83,11 @@ def add_database(self, database: VuforiaDatabase) -> None: message = message_fmt.format(key_name=key_name, value=new) raise ValueError(message) - self._databases.add(database) + self._databases = {*self._databases, database} @property def databases(self) -> set[VuforiaDatabase]: """ All cloud databases. """ - return self._databases + return set(self._databases)