From 17a600e36da1e2f5a0096cfc7c2d02dc4b29e6d9 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 20 Feb 2026 15:10:36 +0000 Subject: [PATCH 1/2] Rename DatabaseDict to CloudDatabaseDict DatabaseDict represents a cloud database in the target manager. This rename clarifies that there are three database types: Device, Cloud, and VuMark. Co-Authored-By: Claude Haiku 4.5 --- pyproject.toml | 2 +- src/mock_vws/database.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f4e49c096..466ed3297 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -450,7 +450,7 @@ ignore_names = [ # pydantic-settings "model_config", # Used in TYPE_CHECKING for type hints - "DatabaseDict", + "CloudDatabaseDict", "VuMarkDatabaseDict", ] # Duplicate some of .gitignore diff --git a/src/mock_vws/database.py b/src/mock_vws/database.py index e166281e4..2c8ad4590 100644 --- a/src/mock_vws/database.py +++ b/src/mock_vws/database.py @@ -13,8 +13,8 @@ @beartype -class DatabaseDict(TypedDict): - """A dictionary type which represents a database.""" +class CloudDatabaseDict(TypedDict): + """A dictionary type which represents a cloud database.""" database_name: str server_access_key: str @@ -74,7 +74,7 @@ class VuforiaDatabase: total_recos: int = 0 target_quota: int = 1000 - def to_dict(self) -> DatabaseDict: + def to_dict(self) -> CloudDatabaseDict: """Dump a target to a dictionary which can be loaded as JSON.""" targets = [target.to_dict() for target in self.targets] return { @@ -95,7 +95,7 @@ def get_target(self, target_id: str) -> ImageTarget: return target @classmethod - def from_dict(cls, database_dict: DatabaseDict) -> Self: + def from_dict(cls, database_dict: CloudDatabaseDict) -> Self: """Load a database from a dictionary.""" return cls( database_name=database_dict["database_name"], From fef9aa3837f0d24d2a0cac7d35e2090b607fa44f Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 20 Feb 2026 15:16:12 +0000 Subject: [PATCH 2/2] Rename VuforiaDatabase to CloudDatabase Co-Authored-By: Claude Sonnet 4.6 --- README.rst | 4 +- docs/source/basic-example.rst | 4 +- docs/source/mock-api-reference.rst | 4 +- src/mock_vws/_database_matchers.py | 10 ++-- src/mock_vws/_flask_server/target_manager.py | 6 +-- src/mock_vws/_flask_server/vwq.py | 6 +-- src/mock_vws/_flask_server/vws.py | 6 +-- src/mock_vws/_query_tools.py | 4 +- src/mock_vws/_query_validators/__init__.py | 4 +- .../_query_validators/auth_validators.py | 6 +-- .../project_state_validators.py | 4 +- .../_requests_mock_server/decorators.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/database.py | 2 +- src/mock_vws/target_manager.py | 10 ++-- tests/conftest.py | 10 ++-- tests/mock_vws/fixtures/credentials.py | 28 +++++------ tests/mock_vws/fixtures/prepared_requests.py | 24 +++++----- tests/mock_vws/fixtures/vuforia_backends.py | 46 +++++++++---------- tests/mock_vws/test_authorization_header.py | 10 ++-- tests/mock_vws/test_database_summary.py | 6 +-- tests/mock_vws/test_docker.py | 4 +- tests/mock_vws/test_flask_app_usage.py | 38 +++++++-------- tests/mock_vws/test_query.py | 44 +++++++++--------- tests/mock_vws/test_requests_mock_usage.py | 44 +++++++++--------- tests/mock_vws/test_target_summary.py | 4 +- tests/mock_vws/test_target_validators.py | 12 ++--- tests/mock_vws/test_vumark_generation_api.py | 10 ++-- tests/mock_vws/utils/usage_test_helpers.py | 4 +- 33 files changed, 191 insertions(+), 191 deletions(-) diff --git a/README.rst b/README.rst index cd8434d30..bf2684105 100644 --- a/README.rst +++ b/README.rst @@ -26,10 +26,10 @@ This requires Python |minimum-python-version|\+. import requests from mock_vws import MockVWS - from mock_vws.database import VuforiaDatabase + from mock_vws.database import CloudDatabase with MockVWS() as mock: - database = VuforiaDatabase() + database = CloudDatabase() mock.add_database(database=database) # This will use the Vuforia mock. requests.get(url="https://vws.vuforia.com/summary", timeout=30) diff --git a/docs/source/basic-example.rst b/docs/source/basic-example.rst index 35c12e200..f3aec76c3 100644 --- a/docs/source/basic-example.rst +++ b/docs/source/basic-example.rst @@ -7,10 +7,10 @@ Using the mock redirects requests to Vuforia made with `requests`_ to an in-memo import requests from mock_vws import MockVWS - from mock_vws.database import VuforiaDatabase + from mock_vws.database import CloudDatabase with MockVWS() as mock: - database = VuforiaDatabase() + database = CloudDatabase() mock.add_database(database=database) # This will use the Vuforia mock. requests.get(url="https://vws.vuforia.com/summary", timeout=30) diff --git a/docs/source/mock-api-reference.rst b/docs/source/mock-api-reference.rst index 798061cc4..ee0215fe0 100644 --- a/docs/source/mock-api-reference.rst +++ b/docs/source/mock-api-reference.rst @@ -11,11 +11,11 @@ API Reference :members: :undoc-members: -.. Many parts of the VuforiaDatabase API are used for the Flask target +.. Many parts of the CloudDatabase API are used for the Flask target .. database app, but Python users are not expected to use them. .. Therefore, they are not documented. -.. autoclass:: mock_vws.database.VuforiaDatabase +.. autoclass:: mock_vws.database.CloudDatabase :members: :undoc-members: :exclude-members: to_dict, get_target, from_dict, not_deleted_targets, active_targets, inactive_targets, failed_targets, processing_targets diff --git a/src/mock_vws/_database_matchers.py b/src/mock_vws/_database_matchers.py index 899cf71b2..0e6a8c76d 100644 --- a/src/mock_vws/_database_matchers.py +++ b/src/mock_vws/_database_matchers.py @@ -5,7 +5,7 @@ from beartype import beartype from vws_auth_tools import authorization_header -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase @beartype @@ -15,8 +15,8 @@ def get_database_matching_client_keys( request_body: bytes | None, request_method: str, request_path: str, - databases: Iterable[VuforiaDatabase], -) -> VuforiaDatabase: + databases: Iterable[CloudDatabase], +) -> CloudDatabase: """Return the first of the given databases which is being accessed by the given client request. @@ -64,8 +64,8 @@ def get_database_matching_server_keys( request_body: bytes | None, request_method: str, request_path: str, - databases: Iterable[VuforiaDatabase], -) -> VuforiaDatabase: + databases: Iterable[CloudDatabase], +) -> CloudDatabase: """Return the first of the given databases which is being accessed by the given server request. diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index 1e6f6f8f1..06948fd5c 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -12,7 +12,7 @@ from flask import Flask, Response, request from pydantic_settings import BaseSettings -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.states import States from mock_vws.target import ImageTarget from mock_vws.target_manager import TargetManager @@ -133,7 +133,7 @@ def create_database() -> Response: :status 201: The database has been successfully created. """ - random_database = VuforiaDatabase() + random_database = CloudDatabase() request_json = json.loads(s=request.data) server_access_key = request_json.get( "server_access_key", @@ -162,7 +162,7 @@ def create_database() -> Response: state = States[state_name] - database = VuforiaDatabase( + database = CloudDatabase( server_access_key=server_access_key, server_secret_key=server_secret_key, client_access_key=client_access_key, diff --git a/src/mock_vws/_flask_server/vwq.py b/src/mock_vws/_flask_server/vwq.py index 05192b56b..d9eb1fc43 100644 --- a/src/mock_vws/_flask_server/vwq.py +++ b/src/mock_vws/_flask_server/vwq.py @@ -21,7 +21,7 @@ from mock_vws._query_validators.exceptions import ( ValidatorError, ) -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.image_matchers import ( ExactMatcher, ImageMatcher, @@ -63,7 +63,7 @@ class VWQSettings(BaseSettings): @beartype -def get_all_databases() -> set[VuforiaDatabase]: +def get_all_databases() -> set[CloudDatabase]: """Get all database objects from the target manager back-end.""" settings = VWQSettings.model_validate(obj={}) response = requests.get( @@ -71,7 +71,7 @@ def get_all_databases() -> set[VuforiaDatabase]: timeout=30, ) return { - VuforiaDatabase.from_dict(database_dict=database_dict) + CloudDatabase.from_dict(database_dict=database_dict) for database_dict in response.json() } diff --git a/src/mock_vws/_flask_server/vws.py b/src/mock_vws/_flask_server/vws.py index 064b1348d..a6e516842 100644 --- a/src/mock_vws/_flask_server/vws.py +++ b/src/mock_vws/_flask_server/vws.py @@ -36,7 +36,7 @@ TargetStatusProcessingError, ValidatorError, ) -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.image_matchers import ( ExactMatcher, ImageMatcher, @@ -86,7 +86,7 @@ class VWSSettings(BaseSettings): @beartype -def get_all_databases() -> set[VuforiaDatabase]: +def get_all_databases() -> set[CloudDatabase]: """Get all database objects from the task manager back-end.""" settings = VWSSettings.model_validate(obj={}) timeout_seconds = 30 @@ -95,7 +95,7 @@ def get_all_databases() -> set[VuforiaDatabase]: timeout=timeout_seconds, ) return { - VuforiaDatabase.from_dict(database_dict=database_dict) + CloudDatabase.from_dict(database_dict=database_dict) for database_dict in response.json() } diff --git a/src/mock_vws/_query_tools.py b/src/mock_vws/_query_tools.py index b73f6c616..3c030844e 100644 --- a/src/mock_vws/_query_tools.py +++ b/src/mock_vws/_query_tools.py @@ -14,7 +14,7 @@ from mock_vws._constants import ResultCodes, TargetStatuses from mock_vws._database_matchers import get_database_matching_client_keys from mock_vws._mock_common import json_dump -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.image_matchers import ImageMatcher @@ -25,7 +25,7 @@ def get_query_match_response_text( request_body: bytes, request_method: str, request_path: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], query_match_checker: ImageMatcher, ) -> str: """ diff --git a/src/mock_vws/_query_validators/__init__.py b/src/mock_vws/_query_validators/__init__.py index 54e458e80..454767494 100644 --- a/src/mock_vws/_query_validators/__init__.py +++ b/src/mock_vws/_query_validators/__init__.py @@ -4,7 +4,7 @@ from beartype import beartype -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from .accept_header_validators import validate_accept_header from .auth_validators import ( @@ -45,7 +45,7 @@ def run_query_validators( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> 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 a90273909..13553efa4 100644 --- a/src/mock_vws/_query_validators/auth_validators.py +++ b/src/mock_vws/_query_validators/auth_validators.py @@ -11,7 +11,7 @@ AuthHeaderMissingError, MalformedAuthHeaderError, ) -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase _LOGGER = logging.getLogger(name=__name__) @@ -63,7 +63,7 @@ def validate_auth_header_number_of_parts( def validate_client_key_exists( *, request_headers: Mapping[str, str], - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> None: """Validate the authorization header includes a client key for a database. @@ -113,7 +113,7 @@ def validate_authorization( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> 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 5a3517bde..5075b8560 100644 --- a/src/mock_vws/_query_validators/project_state_validators.py +++ b/src/mock_vws/_query_validators/project_state_validators.py @@ -7,7 +7,7 @@ from mock_vws._database_matchers import get_database_matching_client_keys from mock_vws._query_validators.exceptions import InactiveProjectError -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.states import States _LOGGER = logging.getLogger(name=__name__) @@ -19,7 +19,7 @@ def validate_project_state( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> None: """Validate the state of the project. diff --git a/src/mock_vws/_requests_mock_server/decorators.py b/src/mock_vws/_requests_mock_server/decorators.py index e8832b726..e13ed84dd 100644 --- a/src/mock_vws/_requests_mock_server/decorators.py +++ b/src/mock_vws/_requests_mock_server/decorators.py @@ -12,7 +12,7 @@ from requests import PreparedRequest from responses import RequestsMock -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.image_matchers import ( ImageMatcher, StructuralSimilarityMatcher, @@ -126,7 +126,7 @@ def __init__( query_match_checker=query_match_checker, ) - def add_database(self, database: VuforiaDatabase) -> None: + def add_database(self, database: CloudDatabase) -> None: """Add a cloud database. Args: diff --git a/src/mock_vws/_services_validators/__init__.py b/src/mock_vws/_services_validators/__init__.py index 03a39bd1c..e37c28d84 100644 --- a/src/mock_vws/_services_validators/__init__.py +++ b/src/mock_vws/_services_validators/__init__.py @@ -2,7 +2,7 @@ from collections.abc import Iterable, Mapping -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from .active_flag_validators import validate_active_flag from .auth_validators import ( @@ -55,7 +55,7 @@ def run_services_validators( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> 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 f47164085..a5922b7ae 100644 --- a/src/mock_vws/_services_validators/auth_validators.py +++ b/src/mock_vws/_services_validators/auth_validators.py @@ -11,7 +11,7 @@ AuthenticationFailureError, FailError, ) -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase _LOGGER = logging.getLogger(name=__name__) @@ -36,7 +36,7 @@ def validate_auth_header_exists(*, request_headers: Mapping[str, str]) -> None: def validate_access_key_exists( *, request_headers: Mapping[str, str], - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> None: """Validate the authorization header includes an access key for a database. @@ -92,7 +92,7 @@ def validate_authorization( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> 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 37e511931..04db14721 100644 --- a/src/mock_vws/_services_validators/name_validators.py +++ b/src/mock_vws/_services_validators/name_validators.py @@ -12,7 +12,7 @@ FailError, TargetNameExistError, ) -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase _LOGGER = logging.getLogger(name=__name__) @@ -116,7 +116,7 @@ def validate_name_length(*, request_body: bytes) -> None: @beartype def validate_name_does_not_exist_new_target( *, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], request_body: bytes, request_headers: Mapping[str, str], request_method: str, @@ -176,7 +176,7 @@ def validate_name_does_not_exist_existing_target( request_body: bytes, request_method: str, request_path: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> 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 468e6188a..d4b263392 100644 --- a/src/mock_vws/_services_validators/project_state_validators.py +++ b/src/mock_vws/_services_validators/project_state_validators.py @@ -8,7 +8,7 @@ from mock_vws._database_matchers import get_database_matching_server_keys from mock_vws._services_validators.exceptions import ProjectInactiveError -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.states import States _LOGGER = logging.getLogger(name=__name__) @@ -21,7 +21,7 @@ def validate_project_state( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> 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 aedfa511e..ca5077ef2 100644 --- a/src/mock_vws/_services_validators/target_validators.py +++ b/src/mock_vws/_services_validators/target_validators.py @@ -7,7 +7,7 @@ from mock_vws._database_matchers import get_database_matching_server_keys from mock_vws._services_validators.exceptions import UnknownTargetError -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase _LOGGER = logging.getLogger(name=__name__) _TARGETS_WITH_INSTANCE_PATH_LENGTH = 4 @@ -20,7 +20,7 @@ def validate_target_id_exists( request_headers: Mapping[str, str], request_body: bytes, request_method: str, - databases: Iterable[VuforiaDatabase], + databases: Iterable[CloudDatabase], ) -> None: """Validate that if a target ID is given, it exists in the database matching the request. diff --git a/src/mock_vws/database.py b/src/mock_vws/database.py index 2c8ad4590..0fb6876bc 100644 --- a/src/mock_vws/database.py +++ b/src/mock_vws/database.py @@ -33,7 +33,7 @@ def _random_hex() -> str: @beartype @dataclass(eq=True, frozen=True) -class VuforiaDatabase: +class CloudDatabase: """Credentials for VWS APIs. Args: diff --git a/src/mock_vws/target_manager.py b/src/mock_vws/target_manager.py index 8042f588e..620564ba6 100644 --- a/src/mock_vws/target_manager.py +++ b/src/mock_vws/target_manager.py @@ -4,7 +4,7 @@ from beartype import beartype -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase if TYPE_CHECKING: from collections.abc import Iterable @@ -20,9 +20,9 @@ class TargetManager: def __init__(self) -> None: """Create a target manager with no databases.""" - self._databases: Iterable[VuforiaDatabase] = set() + self._databases: Iterable[CloudDatabase] = set() - def remove_database(self, database: VuforiaDatabase) -> None: + def remove_database(self, database: CloudDatabase) -> None: """Remove a cloud database. Args: @@ -33,7 +33,7 @@ def remove_database(self, database: VuforiaDatabase) -> None: """ self._databases = {db for db in self._databases if db != database} - def add_database(self, database: VuforiaDatabase) -> None: + def add_database(self, database: CloudDatabase) -> None: """Add a cloud database. Args: @@ -82,6 +82,6 @@ def add_database(self, database: VuforiaDatabase) -> None: self._databases = {*self._databases, database} @property - def databases(self) -> set[VuforiaDatabase]: + def databases(self) -> set[CloudDatabase]: """All cloud databases.""" return set(self._databases) diff --git a/tests/conftest.py b/tests/conftest.py index 76b970470..0ce40f5e8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,7 +8,7 @@ import pytest from vws import VWS, CloudRecoService -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from tests.mock_vws.utils import Endpoint pytest_plugins = [ @@ -19,7 +19,7 @@ @pytest.fixture(name="vws_client") -def fixture_vws_client(vuforia_database: VuforiaDatabase) -> VWS: +def fixture_vws_client(vuforia_database: CloudDatabase) -> VWS: """A VWS client for an active VWS database.""" return VWS( server_access_key=vuforia_database.server_access_key, @@ -28,7 +28,7 @@ def fixture_vws_client(vuforia_database: VuforiaDatabase) -> VWS: @pytest.fixture -def cloud_reco_client(vuforia_database: VuforiaDatabase) -> CloudRecoService: +def cloud_reco_client(vuforia_database: CloudDatabase) -> CloudRecoService: """A query client for an active VWS database.""" return CloudRecoService( client_access_key=vuforia_database.client_access_key, @@ -37,7 +37,7 @@ def cloud_reco_client(vuforia_database: VuforiaDatabase) -> CloudRecoService: @pytest.fixture(name="inactive_vws_client") -def fixture_inactive_vws_client(inactive_database: VuforiaDatabase) -> VWS: +def fixture_inactive_vws_client(inactive_database: CloudDatabase) -> VWS: """A client for an inactive VWS database.""" return VWS( server_access_key=inactive_database.server_access_key, @@ -47,7 +47,7 @@ def fixture_inactive_vws_client(inactive_database: VuforiaDatabase) -> VWS: @pytest.fixture def inactive_cloud_reco_client( - inactive_database: VuforiaDatabase, + inactive_database: CloudDatabase, ) -> CloudRecoService: """A query client for an inactive VWS database.""" return CloudRecoService( diff --git a/tests/mock_vws/fixtures/credentials.py b/tests/mock_vws/fixtures/credentials.py index bb7172a35..749b3fce9 100644 --- a/tests/mock_vws/fixtures/credentials.py +++ b/tests/mock_vws/fixtures/credentials.py @@ -6,11 +6,11 @@ import pytest from pydantic_settings import BaseSettings, SettingsConfigDict -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.states import States -class _VuforiaDatabaseSettings(BaseSettings): +class _CloudDatabaseSettings(BaseSettings): """Settings for a Vuforia database.""" target_manager_database_name: str @@ -26,7 +26,7 @@ class _VuforiaDatabaseSettings(BaseSettings): ) -class _InactiveVuforiaDatabaseSettings(_VuforiaDatabaseSettings): +class _InactiveCloudDatabaseSettings(_CloudDatabaseSettings): """Settings for an inactive Vuforia database.""" model_config = SettingsConfigDict( @@ -36,7 +36,7 @@ class _InactiveVuforiaDatabaseSettings(_VuforiaDatabaseSettings): ) -class _VuMarkVuforiaDatabaseSettings(BaseSettings): +class _VuMarkCloudDatabaseSettings(BaseSettings): """Settings for a VuMark Vuforia database.""" target_manager_database_name: str @@ -52,7 +52,7 @@ class _VuMarkVuforiaDatabaseSettings(BaseSettings): @dataclass(frozen=True) -class VuMarkVuforiaDatabase: +class VuMarkCloudDatabase: """Credentials for the VuMark generation API.""" target_manager_database_name: str = field(repr=False) @@ -62,10 +62,10 @@ class VuMarkVuforiaDatabase: @pytest.fixture -def vuforia_database() -> VuforiaDatabase: +def vuforia_database() -> CloudDatabase: """Return VWS credentials from environment variables.""" - settings = _VuforiaDatabaseSettings.model_validate(obj={}) - return VuforiaDatabase( + settings = _CloudDatabaseSettings.model_validate(obj={}) + return CloudDatabase( database_name=settings.target_manager_database_name, server_access_key=settings.server_access_key, server_secret_key=settings.server_secret_key, @@ -76,13 +76,13 @@ def vuforia_database() -> VuforiaDatabase: @pytest.fixture -def inactive_database() -> VuforiaDatabase: +def inactive_database() -> CloudDatabase: """ Return VWS credentials for an inactive project from environment variables. """ - settings = _InactiveVuforiaDatabaseSettings.model_validate(obj={}) - return VuforiaDatabase( + settings = _InactiveCloudDatabaseSettings.model_validate(obj={}) + return CloudDatabase( database_name=settings.target_manager_database_name, server_access_key=settings.server_access_key, server_secret_key=settings.server_secret_key, @@ -93,11 +93,11 @@ def inactive_database() -> VuforiaDatabase: @pytest.fixture -def vumark_vuforia_database() -> VuMarkVuforiaDatabase: +def vumark_vuforia_database() -> VuMarkCloudDatabase: """Return VuMark VWS credentials from environment variables.""" - settings = _VuMarkVuforiaDatabaseSettings.model_validate(obj={}) + settings = _VuMarkCloudDatabaseSettings.model_validate(obj={}) - return VuMarkVuforiaDatabase( + return VuMarkCloudDatabase( target_manager_database_name=settings.target_manager_database_name, server_access_key=settings.server_access_key, server_secret_key=settings.server_secret_key, diff --git a/tests/mock_vws/fixtures/prepared_requests.py b/tests/mock_vws/fixtures/prepared_requests.py index 724ea8e27..52dd0880f 100644 --- a/tests/mock_vws/fixtures/prepared_requests.py +++ b/tests/mock_vws/fixtures/prepared_requests.py @@ -13,8 +13,8 @@ from vws_auth_tools import authorization_header, rfc_1123_date from mock_vws._constants import ResultCodes -from mock_vws.database import VuforiaDatabase -from tests.mock_vws.fixtures.credentials import VuMarkVuforiaDatabase +from mock_vws.database import CloudDatabase +from tests.mock_vws.fixtures.credentials import VuMarkCloudDatabase from tests.mock_vws.utils import Endpoint from tests.mock_vws.utils.retries import RETRY_ON_TOO_MANY_REQUESTS @@ -37,7 +37,7 @@ def _wait_for_target_processed(vws_client: VWS, target_id: str) -> None: @pytest.fixture def add_target( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, image_file_failed_state: io.BytesIO, ) -> Endpoint: """Return details of the endpoint for adding a target.""" @@ -91,7 +91,7 @@ def add_target( @pytest.fixture def delete_target( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, target_id: str, vws_client: VWS, ) -> Endpoint: @@ -134,7 +134,7 @@ def delete_target( @pytest.fixture -def database_summary(vuforia_database: VuforiaDatabase) -> Endpoint: +def database_summary(vuforia_database: CloudDatabase) -> Endpoint: """ Return details of the endpoint for getting details about the database. @@ -178,7 +178,7 @@ def database_summary(vuforia_database: VuforiaDatabase) -> Endpoint: @pytest.fixture def get_duplicates( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, target_id: str, vws_client: VWS, ) -> Endpoint: @@ -226,7 +226,7 @@ def get_duplicates( @pytest.fixture def get_target( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, target_id: str, vws_client: VWS, ) -> Endpoint: @@ -270,7 +270,7 @@ def get_target( @pytest.fixture -def target_list(vuforia_database: VuforiaDatabase) -> Endpoint: +def target_list(vuforia_database: CloudDatabase) -> Endpoint: """Return details of the endpoint for getting a list of targets.""" date = rfc_1123_date() request_path = "/targets" @@ -311,7 +311,7 @@ def target_list(vuforia_database: VuforiaDatabase) -> Endpoint: @pytest.fixture def target_summary( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, target_id: str, vws_client: VWS, ) -> Endpoint: @@ -359,7 +359,7 @@ def target_summary( @pytest.fixture def update_target( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, target_id: str, vws_client: VWS, ) -> Endpoint: @@ -407,7 +407,7 @@ def update_target( @pytest.fixture def query( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, high_quality_image: io.BytesIO, ) -> Endpoint: """ @@ -457,7 +457,7 @@ def query( @pytest.fixture def vumark_generate_instance( - vumark_vuforia_database: VuMarkVuforiaDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, ) -> Endpoint: """Return details of the endpoint for generating a VuMark instance.""" request_path = f"/targets/{vumark_vuforia_database.target_id}/instances" diff --git a/tests/mock_vws/fixtures/vuforia_backends.py b/tests/mock_vws/fixtures/vuforia_backends.py index 231468ed6..694af4b67 100644 --- a/tests/mock_vws/fixtures/vuforia_backends.py +++ b/tests/mock_vws/fixtures/vuforia_backends.py @@ -19,11 +19,11 @@ from mock_vws._flask_server.target_manager import TARGET_MANAGER_FLASK_APP from mock_vws._flask_server.vwq import CLOUDRECO_FLASK_APP from mock_vws._flask_server.vws import VWS_FLASK_APP -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.states import States from mock_vws.target import ImageTarget from mock_vws.target_raters import HardcodedTargetTrackingRater -from tests.mock_vws.fixtures.credentials import VuMarkVuforiaDatabase +from tests.mock_vws.fixtures.credentials import VuMarkCloudDatabase from tests.mock_vws.utils import make_image_file from tests.mock_vws.utils.retries import RETRY_ON_TOO_MANY_REQUESTS @@ -32,7 +32,7 @@ @RETRY_ON_TOO_MANY_REQUESTS -def _delete_all_targets(*, database_keys: VuforiaDatabase) -> None: +def _delete_all_targets(*, database_keys: CloudDatabase) -> None: """Delete all targets. Args: @@ -64,8 +64,8 @@ def _delete_all_targets(*, database_keys: VuforiaDatabase) -> None: @beartype def _vumark_database( *, - vumark_vuforia_database: VuMarkVuforiaDatabase, -) -> VuforiaDatabase: + vumark_vuforia_database: VuMarkCloudDatabase, +) -> CloudDatabase: """Return a database with a target for VuMark instance generation.""" vumark_target = ImageTarget( active_flag=True, @@ -82,7 +82,7 @@ def _vumark_database( target_tracking_rater=HardcodedTargetTrackingRater(rating=5), target_id=vumark_vuforia_database.target_id, ) - return VuforiaDatabase( + return CloudDatabase( database_name=vumark_vuforia_database.target_manager_database_name, server_access_key=vumark_vuforia_database.server_access_key, server_secret_key=vumark_vuforia_database.server_secret_key, @@ -93,9 +93,9 @@ def _vumark_database( @beartype def _enable_use_real_vuforia( *, - working_database: VuforiaDatabase, - inactive_database: VuforiaDatabase, - vumark_vuforia_database: VuMarkVuforiaDatabase, + working_database: CloudDatabase, + inactive_database: CloudDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, monkeypatch: pytest.MonkeyPatch, ) -> Generator[None]: """Test against the real Vuforia.""" @@ -109,14 +109,14 @@ def _enable_use_real_vuforia( @beartype def _enable_use_mock_vuforia( *, - working_database: VuforiaDatabase, - inactive_database: VuforiaDatabase, - vumark_vuforia_database: VuMarkVuforiaDatabase, + working_database: CloudDatabase, + inactive_database: CloudDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, monkeypatch: pytest.MonkeyPatch, ) -> Generator[None]: """Test against the in-memory mock Vuforia.""" assert monkeypatch - working_database = VuforiaDatabase( + working_database = CloudDatabase( database_name=working_database.database_name, server_access_key=working_database.server_access_key, server_secret_key=working_database.server_secret_key, @@ -124,7 +124,7 @@ def _enable_use_mock_vuforia( client_secret_key=working_database.client_secret_key, ) - inactive_database = VuforiaDatabase( + inactive_database = CloudDatabase( state=States.PROJECT_INACTIVE, database_name=inactive_database.database_name, server_access_key=inactive_database.server_access_key, @@ -146,9 +146,9 @@ def _enable_use_mock_vuforia( @beartype def _enable_use_docker_in_memory( *, - working_database: VuforiaDatabase, - inactive_database: VuforiaDatabase, - vumark_vuforia_database: VuMarkVuforiaDatabase, + working_database: CloudDatabase, + inactive_database: CloudDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, monkeypatch: pytest.MonkeyPatch, ) -> Generator[None]: """Test against mock Vuforia created to be run in a container.""" @@ -286,9 +286,9 @@ def pytest_collection_modifyitems( ) def fixture_verify_mock_vuforia( request: pytest.FixtureRequest, - vuforia_database: VuforiaDatabase, - inactive_database: VuforiaDatabase, - vumark_vuforia_database: VuMarkVuforiaDatabase, + vuforia_database: CloudDatabase, + inactive_database: CloudDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, monkeypatch: pytest.MonkeyPatch, ) -> Generator[None]: """Test functions which use this fixture are run multiple times. Once @@ -332,9 +332,9 @@ def fixture_verify_mock_vuforia( ) def mock_only_vuforia( request: pytest.FixtureRequest, - vuforia_database: VuforiaDatabase, - inactive_database: VuforiaDatabase, - vumark_vuforia_database: VuMarkVuforiaDatabase, + vuforia_database: CloudDatabase, + inactive_database: CloudDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, monkeypatch: pytest.MonkeyPatch, ) -> Generator[None]: """Test functions which use this fixture are run multiple times. Once diff --git a/tests/mock_vws/test_authorization_header.py b/tests/mock_vws/test_authorization_header.py index c017c41ad..89ff5bc1d 100644 --- a/tests/mock_vws/test_authorization_header.py +++ b/tests/mock_vws/test_authorization_header.py @@ -13,7 +13,7 @@ from vws_auth_tools import rfc_1123_date from mock_vws._constants import ResultCodes -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from tests.mock_vws.utils import Endpoint from tests.mock_vws.utils.assertions import ( assert_valid_transaction_id, @@ -246,7 +246,7 @@ class TestBadKey: @staticmethod def test_bad_access_key_services( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """ If the server access key given does not match any database, a @@ -265,7 +265,7 @@ def test_bad_access_key_services( @staticmethod def test_bad_access_key_query( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, high_quality_image: io.BytesIO, ) -> None: """ @@ -312,7 +312,7 @@ def test_bad_access_key_query( @staticmethod def test_bad_secret_key_services( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """ If the server secret key given is incorrect, an @@ -328,7 +328,7 @@ def test_bad_secret_key_services( @staticmethod def test_bad_secret_key_query( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, high_quality_image: io.BytesIO, ) -> None: """ diff --git a/tests/mock_vws/test_database_summary.py b/tests/mock_vws/test_database_summary.py index e0220319f..c00deaf18 100644 --- a/tests/mock_vws/test_database_summary.py +++ b/tests/mock_vws/test_database_summary.py @@ -15,7 +15,7 @@ from vws.exceptions.vws_exceptions import FailError from mock_vws import MockVWS -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase LOGGER = logging.getLogger(name=__name__) LOGGER.setLevel(level=logging.DEBUG) @@ -94,7 +94,7 @@ class TestDatabaseSummary: @staticmethod def test_success( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, vws_client: VWS, ) -> None: """It is possible to get a success response.""" @@ -239,7 +239,7 @@ def test_processing_images( image_file_success_state_low_rating: io.BytesIO, ) -> None: """The number of images in the processing state is returned.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, diff --git a/tests/mock_vws/test_docker.py b/tests/mock_vws/test_docker.py index dfac6cdba..7246044ae 100644 --- a/tests/mock_vws/test_docker.py +++ b/tests/mock_vws/test_docker.py @@ -19,7 +19,7 @@ from tenacity.wait import wait_fixed from vws import VWS, CloudRecoService -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase if TYPE_CHECKING: from docker.models.images import Image @@ -152,7 +152,7 @@ def test_build_and_run( rm=True, ) - database = VuforiaDatabase() + database = CloudDatabase() target_manager_container_name = "vws-mock-target-manager-" + random target_manager_internal_base_url = ( f"http://{target_manager_container_name}:5000" diff --git a/tests/mock_vws/test_flask_app_usage.py b/tests/mock_vws/test_flask_app_usage.py index af33fcde9..cacb3ca63 100644 --- a/tests/mock_vws/test_flask_app_usage.py +++ b/tests/mock_vws/test_flask_app_usage.py @@ -18,7 +18,7 @@ from mock_vws._flask_server.target_manager import TARGET_MANAGER_FLASK_APP from mock_vws._flask_server.vwq import CLOUDRECO_FLASK_APP from mock_vws._flask_server.vws import VWS_FLASK_APP -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from tests.mock_vws.utils.usage_test_helpers import ( processing_time_seconds, ) @@ -70,7 +70,7 @@ def test_default( image_file_failed_state: io.BytesIO, ) -> None: """By default, targets in the mock takes 2 seconds to be processed.""" - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -93,7 +93,7 @@ def test_custom( name="PROCESSING_TIME_SECONDS", value=str(object=seconds), ) - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -115,7 +115,7 @@ def test_duplicate_keys() -> None: It is not possible to have multiple databases with matching keys. """ - database = VuforiaDatabase( + database = CloudDatabase( server_access_key="1", server_secret_key="2", client_access_key="3", @@ -123,11 +123,11 @@ def test_duplicate_keys() -> None: database_name="5", ) - bad_server_access_key_db = VuforiaDatabase(server_access_key="1") - bad_server_secret_key_db = VuforiaDatabase(server_secret_key="2") - bad_client_access_key_db = VuforiaDatabase(client_access_key="3") - bad_client_secret_key_db = VuforiaDatabase(client_secret_key="4") - bad_database_name_db = VuforiaDatabase(database_name="5") + bad_server_access_key_db = CloudDatabase(server_access_key="1") + bad_server_secret_key_db = CloudDatabase(server_secret_key="2") + bad_client_access_key_db = CloudDatabase(client_access_key="3") + bad_client_secret_key_db = CloudDatabase(client_secret_key="4") + bad_database_name_db = CloudDatabase(database_name="5") server_access_key_conflict_error = ( "All server access keys must be unique. " @@ -238,7 +238,7 @@ def test_exact_match( """The exact matcher matches only exactly the same images.""" monkeypatch.setenv(name="QUERY_IMAGE_MATCHER", value="exact") - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, @@ -284,7 +284,7 @@ def test_structural_similarity_matcher( name="QUERY_IMAGE_MATCHER", value="structural_similarity", ) - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -335,7 +335,7 @@ def test_exact_match( ) -> None: """The exact matcher matches only exactly the same images.""" monkeypatch.setenv(name="DUPLICATES_IMAGE_MATCHER", value="exact") - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -387,7 +387,7 @@ def test_structural_similarity_matcher( name="DUPLICATES_IMAGE_MATCHER", value="structural_similarity", ) - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -429,7 +429,7 @@ def test_default( high_quality_image: io.BytesIO, ) -> None: """By default, the BRISQUE target rater is used.""" - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -480,7 +480,7 @@ def test_brisque( """It is possible to use the BRISQUE target rater.""" monkeypatch.setenv(name="TARGET_RATER", value="brisque") - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -529,7 +529,7 @@ def test_perfect( ) -> None: """It is possible to use the perfect target rater.""" monkeypatch.setenv(name="TARGET_RATER", value="perfect") - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -569,7 +569,7 @@ def test_random( """It is possible to use the random target rater.""" monkeypatch.setenv(name="TARGET_RATER", value="random") - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -641,7 +641,7 @@ def _make_request() -> None: def test_default_no_delay(self) -> None: """By default, there is no response delay.""" - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) @@ -659,7 +659,7 @@ def test_delay_is_applied( name="RESPONSE_DELAY_SECONDS", value=f"{self.DELAY_SECONDS}", ) - database = VuforiaDatabase() + database = CloudDatabase() databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/databases" requests.post(url=databases_url, json=database.to_dict(), timeout=30) diff --git a/tests/mock_vws/test_query.py b/tests/mock_vws/test_query.py index 716ba627f..32e7a6a56 100644 --- a/tests/mock_vws/test_query.py +++ b/tests/mock_vws/test_query.py @@ -38,7 +38,7 @@ from vws.response import Response from vws_auth_tools import authorization_header, rfc_1123_date -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from tests.mock_vws.utils import make_image_file from tests.mock_vws.utils.assertions import ( assert_query_success, @@ -90,7 +90,7 @@ def _query( *, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, body: dict[str, Any], ) -> Response: """Make a request to the endpoint to make an image recognition query. @@ -202,7 +202,7 @@ class TestContentType: def test_incorrect_no_boundary( *, high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, content_type: str, resp_status_code: int, resp_content_type: str | None, @@ -272,7 +272,7 @@ def test_incorrect_no_boundary( @staticmethod def test_incorrect_with_boundary( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """ If a Content-Type header which is not ``multipart/form-data`` is @@ -349,7 +349,7 @@ def test_incorrect_with_boundary( ) def test_no_boundary( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, content_type: str, ) -> None: """ @@ -412,7 +412,7 @@ def test_no_boundary( @staticmethod def test_bogus_boundary( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """If a bogus boundary is given, a ``BAD_REQUEST`` is returned.""" image_content = high_quality_image.getvalue() @@ -473,7 +473,7 @@ def test_bogus_boundary( @staticmethod def test_extra_section( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """ If sections that are not the boundary section are given in the @@ -548,7 +548,7 @@ def test_no_results( @staticmethod def test_match_exact( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, vws_client: VWS, ) -> None: """ @@ -728,7 +728,7 @@ class TestIncorrectFields: """Tests for incorrect and unexpected fields.""" @staticmethod - def test_missing_image(vuforia_database: VuforiaDatabase) -> None: + def test_missing_image(vuforia_database: CloudDatabase) -> None: """ If an image is not given, a ``BAD_REQUEST`` response is returned. @@ -748,7 +748,7 @@ def test_missing_image(vuforia_database: VuforiaDatabase) -> None: @staticmethod def test_extra_fields( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """ If extra fields are given, a ``BAD_REQUEST`` response is @@ -774,7 +774,7 @@ def test_extra_fields( @staticmethod def test_missing_image_and_extra_fields( - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """If extra fields are given and no image field is given, a ``BAD_REQUEST`` response is returned. @@ -805,7 +805,7 @@ class TestMaxNumResults: @staticmethod def test_default( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, vws_client: VWS, ) -> None: """The default ``max_num_results`` is 1.""" @@ -842,7 +842,7 @@ def test_default( @pytest.mark.parametrize(argnames="num_results", argvalues=[1, b"1", 50]) def test_valid_accepted( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, num_results: int | bytes, ) -> None: """Numbers between 1 and 50 are valid inputs. @@ -935,7 +935,7 @@ def test_out_of_range( ) def test_invalid_type( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, num_results: bytes, ) -> None: """An error is returned if ``max_num_results`` is given as @@ -998,7 +998,7 @@ class TestIncludeTargetData: def test_default( high_quality_image: io.BytesIO, vws_client: VWS, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """The default ``include_target_data`` is 'top'.""" _add_and_wait_for_targets( @@ -1027,7 +1027,7 @@ def test_default( ) def test_top( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, include_target_data: str, vws_client: VWS, ) -> None: @@ -1063,7 +1063,7 @@ def test_top( ) def test_none( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, include_target_data: str, vws_client: VWS, ) -> None: @@ -1099,7 +1099,7 @@ def test_none( ) def test_all( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, include_target_data: str, vws_client: VWS, ) -> None: @@ -1136,7 +1136,7 @@ def test_all( def test_invalid_value( *, high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, include_target_data: str | bool | int, ) -> None: """ @@ -1184,7 +1184,7 @@ class TestAcceptHeader: ) def test_valid( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, extra_headers: dict[str, str], ) -> None: """An ``Accept`` header can be given iff its value is @@ -1239,7 +1239,7 @@ def test_valid( @staticmethod def test_invalid( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, ) -> None: """ A NOT_ACCEPTABLE response is returned if an ``Accept`` header is @@ -1952,7 +1952,7 @@ class TestDateFormats: @pytest.mark.parametrize(argnames="include_tz", argvalues=[True, False]) def test_date_formats( high_quality_image: io.BytesIO, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, datetime_format: str, *, include_tz: bool, diff --git a/tests/mock_vws/test_requests_mock_usage.py b/tests/mock_vws/test_requests_mock_usage.py index 81b297cd1..cc79f716f 100644 --- a/tests/mock_vws/test_requests_mock_usage.py +++ b/tests/mock_vws/test_requests_mock_usage.py @@ -16,7 +16,7 @@ from vws_auth_tools import rfc_1123_date from mock_vws import MissingSchemeError, MockVWS -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.image_matchers import ExactMatcher, StructuralSimilarityMatcher from mock_vws.target import ImageTarget from tests.mock_vws.utils import Endpoint @@ -253,7 +253,7 @@ class TestProcessingTime: def test_default(self, image_file_failed_state: io.BytesIO) -> None: """By default, targets in the mock takes 2 seconds to be processed.""" - database = VuforiaDatabase() + database = CloudDatabase() with MockVWS() as mock: mock.add_database(database=database) time_taken = processing_time_seconds( @@ -266,7 +266,7 @@ def test_default(self, image_file_failed_state: io.BytesIO) -> None: def test_custom(self, image_file_failed_state: io.BytesIO) -> None: """It is possible to set a custom processing time.""" - database = VuforiaDatabase() + database = CloudDatabase() seconds = 5 with MockVWS(processing_time_seconds=seconds) as mock: mock.add_database(database=database) @@ -285,8 +285,8 @@ class TestDatabaseName: @staticmethod def test_default() -> None: """By default, the database has a random name.""" - database_details = VuforiaDatabase() - other_database_details = VuforiaDatabase() + database_details = CloudDatabase() + other_database_details = CloudDatabase() assert ( database_details.database_name != other_database_details.database_name @@ -295,7 +295,7 @@ def test_default() -> None: @staticmethod def test_custom_name() -> None: """It is possible to set a custom database name.""" - database_details = VuforiaDatabase(database_name="foo") + database_details = CloudDatabase(database_name="foo") assert database_details.database_name == "foo" @@ -376,7 +376,7 @@ def test_to_dict(high_quality_image: io.BytesIO) -> None: It is possible to dump a target to a dictionary and load it back. """ - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, @@ -410,7 +410,7 @@ def test_to_dict_deleted(high_quality_image: io.BytesIO) -> None: it back. """ - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, @@ -449,7 +449,7 @@ def test_to_dict(high_quality_image: io.BytesIO) -> None: It is possible to dump a database to a dictionary and load it back. """ - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -470,7 +470,7 @@ def test_to_dict(high_quality_image: io.BytesIO) -> None: # The dictionary is JSON dump-able assert json.dumps(obj=database_dict) - new_database = VuforiaDatabase.from_dict(database_dict=database_dict) + new_database = CloudDatabase.from_dict(database_dict=database_dict) assert new_database == database @@ -512,7 +512,7 @@ def test_duplicate_keys() -> None: It is not possible to have multiple databases with matching keys. """ - database = VuforiaDatabase( + database = CloudDatabase( server_access_key="1", server_secret_key="2", client_access_key="3", @@ -520,11 +520,11 @@ def test_duplicate_keys() -> None: database_name="5", ) - bad_server_access_key_db = VuforiaDatabase(server_access_key="1") - bad_server_secret_key_db = VuforiaDatabase(server_secret_key="2") - bad_client_access_key_db = VuforiaDatabase(client_access_key="3") - bad_client_secret_key_db = VuforiaDatabase(client_secret_key="4") - bad_database_name_db = VuforiaDatabase(database_name="5") + bad_server_access_key_db = CloudDatabase(server_access_key="1") + bad_server_secret_key_db = CloudDatabase(server_secret_key="2") + bad_client_access_key_db = CloudDatabase(client_access_key="3") + bad_client_secret_key_db = CloudDatabase(client_secret_key="4") + bad_database_name_db = CloudDatabase(database_name="5") server_access_key_conflict_error = ( "All server access keys must be unique. " @@ -569,7 +569,7 @@ class TestQueryImageMatchers: @staticmethod def test_exact_match(high_quality_image: io.BytesIO) -> None: """The exact matcher matches only exactly the same images.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -605,7 +605,7 @@ def test_exact_match(high_quality_image: io.BytesIO) -> None: @staticmethod def test_custom_matcher(high_quality_image: io.BytesIO) -> None: """It is possible to use a custom matcher.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -644,7 +644,7 @@ def test_structural_similarity_matcher( different_high_quality_image: io.BytesIO, ) -> None: """The structural similarity matcher matches similar images.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -691,7 +691,7 @@ class TestDuplicatesImageMatchers: @staticmethod def test_exact_match(high_quality_image: io.BytesIO) -> None: """The exact matcher matches only exactly the same images.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -735,7 +735,7 @@ def test_exact_match(high_quality_image: io.BytesIO) -> None: @staticmethod def test_custom_matcher(high_quality_image: io.BytesIO) -> None: """It is possible to use a custom matcher.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, @@ -781,7 +781,7 @@ def test_structural_similarity_matcher( high_quality_image: io.BytesIO, ) -> None: """The structural similarity matcher matches similar images.""" - database = VuforiaDatabase() + database = CloudDatabase() vws_client = VWS( server_access_key=database.server_access_key, server_secret_key=database.server_secret_key, diff --git a/tests/mock_vws/test_target_summary.py b/tests/mock_vws/test_target_summary.py index 61fbd76ce..a5621d2cf 100644 --- a/tests/mock_vws/test_target_summary.py +++ b/tests/mock_vws/test_target_summary.py @@ -10,7 +10,7 @@ from vws.exceptions.vws_exceptions import UnknownTargetError from vws.reports import TargetStatuses -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase @pytest.mark.usefixtures("verify_mock_vuforia") @@ -21,7 +21,7 @@ class TestTargetSummary: @pytest.mark.parametrize(argnames="active_flag", argvalues=[True, False]) def test_target_summary( vws_client: VWS, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, image_file_failed_state: io.BytesIO, *, active_flag: bool, diff --git a/tests/mock_vws/test_target_validators.py b/tests/mock_vws/test_target_validators.py index 4e49ce89c..0fc74601c 100644 --- a/tests/mock_vws/test_target_validators.py +++ b/tests/mock_vws/test_target_validators.py @@ -9,13 +9,13 @@ from mock_vws._services_validators.target_validators import ( validate_target_id_exists, ) -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase from mock_vws.target import ImageTarget from mock_vws.target_raters import HardcodedTargetTrackingRater from tests.mock_vws.utils import make_image_file -def _database_with_target(*, target_id: str) -> VuforiaDatabase: +def _database_with_target(*, target_id: str) -> CloudDatabase: """Create a database containing one target with the given ID.""" target = ImageTarget( active_flag=True, @@ -32,18 +32,18 @@ def _database_with_target(*, target_id: str) -> VuforiaDatabase: target_tracking_rater=HardcodedTargetTrackingRater(rating=5), width=1, ) - return VuforiaDatabase(targets={target}) + return CloudDatabase(targets={target}) def _always_match_database( *, - database: VuforiaDatabase, + database: CloudDatabase, request_headers: Mapping[str, str], request_body: bytes | None, request_method: str, request_path: str, - databases: Iterable[VuforiaDatabase], -) -> VuforiaDatabase: + databases: Iterable[CloudDatabase], +) -> CloudDatabase: """Return the given database regardless of request details.""" del request_headers del request_body diff --git a/tests/mock_vws/test_vumark_generation_api.py b/tests/mock_vws/test_vumark_generation_api.py index 2b589ebd6..219c27440 100644 --- a/tests/mock_vws/test_vumark_generation_api.py +++ b/tests/mock_vws/test_vumark_generation_api.py @@ -9,7 +9,7 @@ from vws_auth_tools import authorization_header, rfc_1123_date from mock_vws._constants import ResultCodes -from tests.mock_vws.fixtures.credentials import VuMarkVuforiaDatabase +from tests.mock_vws.fixtures.credentials import VuMarkCloudDatabase _VWS_HOST = "https://vws.vuforia.com" _PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n" @@ -19,7 +19,7 @@ def _make_vumark_request( *, - vumark_vuforia_database: VuMarkVuforiaDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, instance_id: str, accept: str, ) -> requests.Response: @@ -83,7 +83,7 @@ def test_generate_instance_format( accept: str, expected_content_type: str, expected_signature: bytes, - vumark_vuforia_database: VuMarkVuforiaDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, ) -> None: """A VuMark instance can be generated in the requested format.""" response = _make_vumark_request( @@ -102,7 +102,7 @@ def test_generate_instance_format( @staticmethod def test_invalid_accept_header( - vumark_vuforia_database: VuMarkVuforiaDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, ) -> None: """An unsupported Accept header returns an error.""" response = _make_vumark_request( @@ -120,7 +120,7 @@ def test_invalid_accept_header( @staticmethod def test_empty_instance_id( - vumark_vuforia_database: VuMarkVuforiaDatabase, + vumark_vuforia_database: VuMarkCloudDatabase, ) -> None: """An empty instance_id returns InvalidInstanceId.""" response = _make_vumark_request( diff --git a/tests/mock_vws/utils/usage_test_helpers.py b/tests/mock_vws/utils/usage_test_helpers.py index 6c85dc0f6..32d9231e2 100644 --- a/tests/mock_vws/utils/usage_test_helpers.py +++ b/tests/mock_vws/utils/usage_test_helpers.py @@ -6,12 +6,12 @@ from vws import VWS from vws.reports import TargetStatuses -from mock_vws.database import VuforiaDatabase +from mock_vws.database import CloudDatabase def processing_time_seconds( *, - vuforia_database: VuforiaDatabase, + vuforia_database: CloudDatabase, image: io.BytesIO, ) -> float: """Return the time taken to process a target in the database."""