From 7ec82909b60856cec8f4b94947eaf37b5167d4e5 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 20 Feb 2026 15:51:36 +0000 Subject: [PATCH 1/2] Refresh secrets (#2966) * Refresh Vuforia secrets and simplify admin script Replace suspended license credentials with 100 fresh cloud database credentials. Simplify the secrets creation script to reuse existing VuMark and inactive database credentials from the existing secrets file instead of creating new ones each run. Co-Authored-By: Claude Opus 4.6 * Revert simplification of admin script to restore VuMark creation logic Co-Authored-By: Claude Sonnet 4.6 --------- Co-authored-by: Claude Opus 4.6 --- pyproject.toml | 2 +- secrets.tar.gpg | Bin 17558 -> 19046 bytes src/mock_vws/_flask_server/target_manager.py | 16 +++++---- src/mock_vws/_flask_server/vwq.py | 4 +-- src/mock_vws/_flask_server/vws.py | 20 +++++------ .../mock_web_query_api.py | 4 +-- .../mock_web_services_api.py | 34 +++++++++--------- src/mock_vws/target_manager.py | 4 +-- 8 files changed, 43 insertions(+), 41 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 466ed3297..c5a2f5685 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,7 +105,7 @@ optional-dependencies.dev = [ "vulture==2.14", "vws-python==2026.2.15", "vws-test-fixtures==2023.3.5", - "vws-web-tools==2026.2.17.1", + "vws-web-tools==2026.2.20", "yamlfix==1.19.1", "zizmor==1.22.0", ] diff --git a/secrets.tar.gpg b/secrets.tar.gpg index a21cf43fd538155a3612c7f1b41c19eb17508113..32c9b9c6f5e398b64161ca4cf9bd9aa193cca373 100644 GIT binary patch literal 19046 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 literal 17558 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 diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index 06948fd5c..856738050 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -70,7 +70,7 @@ def delete_database(database_name: str) -> Response: try: (matching_database,) = { database - for database in TARGET_MANAGER.databases + for database in TARGET_MANAGER.cloud_databases if database_name == database.database_name } except ValueError: @@ -82,9 +82,11 @@ def delete_database(database_name: str) -> Response: @TARGET_MANAGER_FLASK_APP.route(rule="/databases", methods=[HTTPMethod.GET]) @beartype -def get_databases() -> Response: +def get_cloud_databases() -> Response: """Return a list of all databases.""" - databases = [database.to_dict() for database in TARGET_MANAGER.databases] + databases = [ + database.to_dict() for database in TARGET_MANAGER.cloud_databases + ] return Response( response=json.dumps(obj=databases), status=HTTPStatus.OK, @@ -93,7 +95,7 @@ def get_databases() -> Response: @TARGET_MANAGER_FLASK_APP.route(rule="/databases", methods=[HTTPMethod.POST]) @beartype -def create_database() -> Response: +def create_cloud_database() -> Response: """Create a new database. :reqheader Content-Type: application/json @@ -193,7 +195,7 @@ def create_target(database_name: str) -> Response: """Create a new target in a given database.""" (database,) = ( database - for database in TARGET_MANAGER.databases + for database in TARGET_MANAGER.cloud_databases if database.database_name == database_name ) request_json = json.loads(s=request.data) @@ -229,7 +231,7 @@ def delete_target(database_name: str, target_id: str) -> Response: """Delete a target.""" (database,) = ( database - for database in TARGET_MANAGER.databases + for database in TARGET_MANAGER.cloud_databases if database.database_name == database_name ) target = database.get_target(target_id=target_id) @@ -255,7 +257,7 @@ def update_target(database_name: str, target_id: str) -> Response: """Update a target.""" (database,) = ( database - for database in TARGET_MANAGER.databases + for database in TARGET_MANAGER.cloud_databases if database.database_name == database_name ) target = database.get_target(target_id=target_id) diff --git a/src/mock_vws/_flask_server/vwq.py b/src/mock_vws/_flask_server/vwq.py index d9eb1fc43..d8ef38350 100644 --- a/src/mock_vws/_flask_server/vwq.py +++ b/src/mock_vws/_flask_server/vwq.py @@ -63,7 +63,7 @@ class VWQSettings(BaseSettings): @beartype -def get_all_databases() -> set[CloudDatabase]: +def get_all_cloud_databases() -> set[CloudDatabase]: """Get all database objects from the target manager back-end.""" settings = VWQSettings.model_validate(obj={}) response = requests.get( @@ -132,7 +132,7 @@ def query() -> Response: settings = VWQSettings.model_validate(obj={}) query_match_checker = settings.query_image_matcher.to_image_matcher() - databases = get_all_databases() + databases = get_all_cloud_databases() request_body = request.stream.read() run_query_validators( request_headers=dict(request.headers), diff --git a/src/mock_vws/_flask_server/vws.py b/src/mock_vws/_flask_server/vws.py index a6e516842..d85d0701e 100644 --- a/src/mock_vws/_flask_server/vws.py +++ b/src/mock_vws/_flask_server/vws.py @@ -86,7 +86,7 @@ class VWSSettings(BaseSettings): @beartype -def get_all_databases() -> set[CloudDatabase]: +def get_all_cloud_databases() -> set[CloudDatabase]: """Get all database objects from the task manager back-end.""" settings = VWSSettings.model_validate(obj={}) timeout_seconds = 30 @@ -130,7 +130,7 @@ def set_terminate_wsgi_input() -> None: @beartype def validate_request() -> None: """Run validators on the request.""" - databases = get_all_databases() + databases = get_all_cloud_databases() run_services_validators( request_headers=dict(request.headers), request_body=request.data, @@ -172,7 +172,7 @@ def add_target() -> Response: https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#add """ settings = VWSSettings.model_validate(obj={}) - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, @@ -245,7 +245,7 @@ def get_target(target_id: str) -> Response: Fake implementation of https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#target-record """ - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, @@ -302,7 +302,7 @@ def delete_target(target_id: str) -> Response: https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#delete """ settings = VWSSettings.model_validate(obj={}) - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, @@ -402,7 +402,7 @@ def database_summary() -> Response: Fake implementation of https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#summary-report """ - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, @@ -457,7 +457,7 @@ def target_summary(target_id: str) -> Response: Fake implementation of https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#retrieve-report """ - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, @@ -511,7 +511,7 @@ def get_duplicates(target_id: str) -> Response: Fake implementation of https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#check """ - databases = get_all_databases() + databases = get_all_cloud_databases() settings = VWSSettings.model_validate(obj={}) database = get_database_matching_server_keys( request_headers=dict(request.headers), @@ -570,7 +570,7 @@ def target_list() -> Response: Fake implementation of https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#details-list """ - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, @@ -616,7 +616,7 @@ def update_target(target_id: str) -> Response: # We do not use ``request.get_json(force=True)`` because this only works # when the content type is given as ``application/json``. request_json = json.loads(s=request.data) - databases = get_all_databases() + databases = get_all_cloud_databases() database = get_database_matching_server_keys( request_headers=dict(request.headers), request_body=request.data, 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 8206a6d10..e2626a25a 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 @@ -122,7 +122,7 @@ def query(self, request: PreparedRequest) -> _ResponseType: request_headers=request.headers, request_body=_body_bytes(request=request), request_method=request.method or "", - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -132,7 +132,7 @@ def query(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, query_match_checker=self._query_match_checker, ) 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 8c0c770d6..bbd782c24 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 @@ -164,7 +164,7 @@ def add_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -174,7 +174,7 @@ def add_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) request_json: dict[str, Any] = json.loads(s=request.body or b"") @@ -239,7 +239,7 @@ def delete_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -249,7 +249,7 @@ def delete_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) target_id = request.path_url.split(sep="/")[-1] @@ -314,7 +314,7 @@ def generate_vumark_instance( request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) accept = dict(request.headers).get("Accept", "") @@ -360,7 +360,7 @@ def database_summary(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -370,7 +370,7 @@ def database_summary(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) date = email.utils.formatdate( @@ -421,7 +421,7 @@ def target_list(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -431,7 +431,7 @@ def target_list(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) date = email.utils.formatdate( @@ -478,7 +478,7 @@ def get_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -488,7 +488,7 @@ def get_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) target_id = request.path_url.split(sep="/")[-1] target = database.get_target(target_id=target_id) @@ -544,7 +544,7 @@ def get_duplicates(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -554,7 +554,7 @@ def get_duplicates(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) target_id = request.path_url.split(sep="/")[-1] target = database.get_target(target_id=target_id) @@ -615,7 +615,7 @@ def update_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -625,7 +625,7 @@ def update_target(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) target_id = request.path_url.split(sep="/")[-1] @@ -728,7 +728,7 @@ def target_summary(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) except ValidatorError as exc: return exc.status_code, exc.headers, exc.response_text @@ -738,7 +738,7 @@ def target_summary(self, request: PreparedRequest) -> _ResponseType: request_body=_body_bytes(request=request), request_method=request.method or "", request_path=request.path_url, - databases=self._target_manager.databases, + databases=self._target_manager.cloud_databases, ) target_id = request.path_url.split(sep="/")[-1] target = database.get_target(target_id=target_id) diff --git a/src/mock_vws/target_manager.py b/src/mock_vws/target_manager.py index 620564ba6..c304cd40a 100644 --- a/src/mock_vws/target_manager.py +++ b/src/mock_vws/target_manager.py @@ -47,7 +47,7 @@ def add_database(self, database: CloudDatabase) -> None: "All {key_name}s must be unique. " 'There is already a database with the {key_name} "{value}".' ) - for existing_db in self.databases: + for existing_db in self.cloud_databases: for existing, new, key_name in ( ( existing_db.server_access_key, @@ -82,6 +82,6 @@ def add_database(self, database: CloudDatabase) -> None: self._databases = {*self._databases, database} @property - def databases(self) -> set[CloudDatabase]: + def cloud_databases(self) -> set[CloudDatabase]: """All cloud databases.""" return set(self._databases) From e64dea78270dbeefb477b83053f6ca8da04efd62 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 20 Feb 2026 17:27:42 +0000 Subject: [PATCH 2/2] Fix docs endpoint reference after rename to create_cloud_database Update the autoflask directive in docker.rst to reference the renamed endpoint create_cloud_database instead of create_database. Co-Authored-By: Claude Haiku 4.5 --- docs/source/docker.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/docker.rst b/docs/source/docker.rst index e46c5d146..f77a811d6 100644 --- a/docs/source/docker.rst +++ b/docs/source/docker.rst @@ -54,7 +54,7 @@ To mimic this functionality, this mock provides a target manager container which To add a database, make a request to the following endpoint against the target manager container: .. autoflask:: mock_vws._flask_server.target_manager:TARGET_MANAGER_FLASK_APP - :endpoints: create_database + :endpoints: create_cloud_database For example, with the containers set up as in :ref:`creating-containers`, use ``curl``: