Skip to content

Commit 5d2bb0c

Browse files
Rename database methods and endpoints to cloud_databases (#2970)
Clarify that database-related methods, endpoints, and variables refer to cloud databases rather than generic databases. This lays the groundwork for supporting additional database types in the future. Changes: - Rename Flask endpoints from /databases to /cloud_databases - Rename TargetManager methods: add_database → add_cloud_database, remove_database → remove_cloud_database - Rename MockVWS.add_database → add_cloud_database - Update all callers, tests, documentation, and error messages accordingly Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 703a1e3 commit 5d2bb0c

13 files changed

Lines changed: 119 additions & 107 deletions

File tree

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ This requires Python |minimum-python-version|\+.
3030
3131
with MockVWS() as mock:
3232
database = CloudDatabase()
33-
mock.add_database(database=database)
33+
mock.add_cloud_database(cloud_database=database)
3434
# This will use the Vuforia mock.
3535
requests.get(url="https://vws.vuforia.com/summary", timeout=30)
3636

docs/source/basic-example.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Using the mock redirects requests to Vuforia made with `requests`_ to an in-memo
1111
1212
with MockVWS() as mock:
1313
database = CloudDatabase()
14-
mock.add_database(database=database)
14+
mock.add_cloud_database(cloud_database=database)
1515
# This will use the Vuforia mock.
1616
requests.get(url="https://vws.vuforia.com/summary", timeout=30)
1717

docs/source/docker.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ For example, with the containers set up as in :ref:`creating-containers`, use ``
6363
$ curl --request POST \
6464
--header "Content-Type: application/json" \
6565
--data '{}' \
66-
'127.0.0.1:5005/databases'
66+
'127.0.0.1:5005/cloud_databases'
6767
{
6868
"client_access_key": "2d61c1d17bb94694bee77c1f1f41e5d9",
6969
"client_secret_key": "b73f8170cf7d42728fa8ce66221ad147",
@@ -80,7 +80,7 @@ Deleting a database
8080
To delete a database use the following endpoint:
8181

8282
.. autoflask:: mock_vws._flask_server.target_manager:TARGET_MANAGER_FLASK_APP
83-
:endpoints: delete_database
83+
:endpoints: delete_cloud_database
8484

8585

8686
.. _Target Manager: https://developer.vuforia.com/target-manager

src/mock_vws/_flask_server/target_manager.py

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ class TargetManagerSettings(BaseSettings):
5858

5959

6060
@TARGET_MANAGER_FLASK_APP.route(
61-
rule="/databases/<string:database_name>",
61+
rule="/cloud_databases/<string:database_name>",
6262
methods=[HTTPMethod.DELETE],
6363
)
6464
@beartype
65-
def delete_database(database_name: str) -> Response:
66-
"""Delete a database.
65+
def delete_cloud_database(database_name: str) -> Response:
66+
"""Delete a cloud database.
6767
68-
:status 200: The database has been deleted.
68+
:status 200: The cloud database has been deleted.
6969
"""
7070
try:
7171
(matching_database,) = {
@@ -76,14 +76,16 @@ def delete_database(database_name: str) -> Response:
7676
except ValueError:
7777
return Response(response="", status=HTTPStatus.NOT_FOUND)
7878

79-
TARGET_MANAGER.remove_database(database=matching_database)
79+
TARGET_MANAGER.remove_cloud_database(cloud_database=matching_database)
8080
return Response(response="", status=HTTPStatus.OK)
8181

8282

83-
@TARGET_MANAGER_FLASK_APP.route(rule="/databases", methods=[HTTPMethod.GET])
83+
@TARGET_MANAGER_FLASK_APP.route(
84+
rule="/cloud_databases", methods=[HTTPMethod.GET]
85+
)
8486
@beartype
8587
def get_cloud_databases() -> Response:
86-
"""Return a list of all databases."""
88+
"""Return a list of all cloud databases."""
8789
databases = [
8890
database.to_dict() for database in TARGET_MANAGER.cloud_databases
8991
]
@@ -93,47 +95,53 @@ def get_cloud_databases() -> Response:
9395
)
9496

9597

96-
@TARGET_MANAGER_FLASK_APP.route(rule="/databases", methods=[HTTPMethod.POST])
98+
@TARGET_MANAGER_FLASK_APP.route(
99+
rule="/cloud_databases", methods=[HTTPMethod.POST]
100+
)
97101
@beartype
98102
def create_cloud_database() -> Response:
99-
"""Create a new database.
103+
"""Create a new cloud database.
100104
101105
:reqheader Content-Type: application/json
102106
:resheader Content-Type: application/json
103107
104108
:reqjson string client_access_key: (Optional) The client access key for the
105-
database.
109+
cloud database.
106110
107111
:reqjson string client_secret_key: (Optional) The client secret key for the
108-
database.
112+
cloud database.
109113
110-
:reqjson string database_name: (Optional) The name of the database.
114+
:reqjson string database_name: (Optional) The name of the cloud database.
111115
112116
:reqjson string server_access_key: (Optional) The server access key for the
113-
database.
117+
cloud database.
114118
115119
:reqjson string server_secret_key: (Optional) The server secret key for the
116-
database.
120+
cloud database.
117121
118-
:reqjson string state_name: (Optional) The state of the database. This can
119-
be "WORKING" or "PROJECT_INACTIVE". This defaults to "WORKING".
122+
:reqjson string state_name: (Optional) The state of the cloud database.
123+
This can be "WORKING" or "PROJECT_INACTIVE". This defaults to "WORKING".
120124
121-
:resjson string client_access_key: The client access key for the database.
125+
:resjson string client_access_key: The client access key for the cloud
126+
database.
122127
123-
:resjson string client_secret_key: The client secret key for the database.
128+
:resjson string client_secret_key: The client secret key for the cloud
129+
database.
124130
125-
:resjson string database_name: The database name.
131+
:resjson string database_name: The cloud database name.
126132
127-
:resjson string server_access_key: The server access key for the database.
133+
:resjson string server_access_key: The server access key for the cloud
134+
database.
128135
129-
:resjson string server_secret_key: The server secret key for the database.
136+
:resjson string server_secret_key: The server secret key for the cloud
137+
database.
130138
131-
:resjson string state_name: The database state. This will be "WORKING" or
132-
"PROJECT_INACTIVE".
139+
:resjson string state_name: The cloud database state. This will be
140+
"WORKING" or "PROJECT_INACTIVE".
133141
134-
:reqjsonarr targets: The targets in the database.
142+
:reqjsonarr targets: The targets in the cloud database.
135143
136-
:status 201: The database has been successfully created.
144+
:status 201: The cloud database has been successfully created.
137145
"""
138146
random_database = CloudDatabase()
139147
request_json = json.loads(s=request.data)
@@ -173,7 +181,7 @@ def create_cloud_database() -> Response:
173181
state=state,
174182
)
175183
try:
176-
TARGET_MANAGER.add_database(database=database)
184+
TARGET_MANAGER.add_cloud_database(cloud_database=database)
177185
except ValueError as exc:
178186
return Response(
179187
response=str(object=exc),
@@ -187,12 +195,12 @@ def create_cloud_database() -> Response:
187195

188196

189197
@TARGET_MANAGER_FLASK_APP.route(
190-
rule="/databases/<string:database_name>/targets",
198+
rule="/cloud_databases/<string:database_name>/targets",
191199
methods=[HTTPMethod.POST],
192200
)
193201
@beartype
194202
def create_target(database_name: str) -> Response:
195-
"""Create a new target in a given database."""
203+
"""Create a new target in a given cloud database."""
196204
(database,) = (
197205
database
198206
for database in TARGET_MANAGER.cloud_databases
@@ -223,7 +231,7 @@ def create_target(database_name: str) -> Response:
223231

224232

225233
@TARGET_MANAGER_FLASK_APP.route(
226-
rule="/databases/<string:database_name>/targets/<string:target_id>",
234+
rule="/cloud_databases/<string:database_name>/targets/<string:target_id>",
227235
methods={HTTPMethod.DELETE},
228236
)
229237
@beartype
@@ -250,7 +258,7 @@ def delete_target(database_name: str, target_id: str) -> Response:
250258

251259

252260
@TARGET_MANAGER_FLASK_APP.route(
253-
rule="/databases/<string:database_name>/targets/<string:target_id>",
261+
rule="/cloud_databases/<string:database_name>/targets/<string:target_id>",
254262
methods=[HTTPMethod.PUT],
255263
)
256264
def update_target(database_name: str, target_id: str) -> Response:

src/mock_vws/_flask_server/vwq.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def get_all_cloud_databases() -> set[CloudDatabase]:
6767
"""Get all database objects from the target manager back-end."""
6868
settings = VWQSettings.model_validate(obj={})
6969
response = requests.get(
70-
url=f"{settings.target_manager_base_url}/databases",
70+
url=f"{settings.target_manager_base_url}/cloud_databases",
7171
timeout=30,
7272
)
7373
return {

src/mock_vws/_flask_server/vws.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def get_all_cloud_databases() -> set[CloudDatabase]:
9191
settings = VWSSettings.model_validate(obj={})
9292
timeout_seconds = 30
9393
response = requests.get(
94-
url=f"{settings.target_manager_base_url}/databases",
94+
url=f"{settings.target_manager_base_url}/cloud_databases",
9595
timeout=timeout_seconds,
9696
)
9797
return {
@@ -202,7 +202,7 @@ def add_target() -> Response:
202202
target_tracking_rater=target_tracking_rater,
203203
)
204204

205-
databases_url = f"{settings.target_manager_base_url}/databases"
205+
databases_url = f"{settings.target_manager_base_url}/cloud_databases"
206206
timeout_seconds = 30
207207
requests.post(
208208
url=f"{databases_url}/{database.database_name}/targets",
@@ -318,7 +318,7 @@ def delete_target(target_id: str) -> Response:
318318
if target.status == TargetStatuses.PROCESSING.value:
319319
raise TargetStatusProcessingError
320320

321-
databases_url = f"{settings.target_manager_base_url}/databases"
321+
databases_url = f"{settings.target_manager_base_url}/cloud_databases"
322322
requests.delete(
323323
url=f"{databases_url}/{database.database_name}/targets/{target_id}",
324324
timeout=30,
@@ -669,7 +669,7 @@ def update_target(target_id: str) -> Response:
669669
update_values["image"] = image
670670

671671
put_url = (
672-
f"{settings.target_manager_base_url}/databases/"
672+
f"{settings.target_manager_base_url}/cloud_databases/"
673673
f"{database.database_name}/targets/{target_id}"
674674
)
675675
requests.put(url=put_url, json=update_values, timeout=30)

src/mock_vws/_requests_mock_server/decorators.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,19 @@ def __init__(
126126
query_match_checker=query_match_checker,
127127
)
128128

129-
def add_database(self, database: CloudDatabase) -> None:
129+
def add_cloud_database(self, cloud_database: CloudDatabase) -> None:
130130
"""Add a cloud database.
131131
132132
Args:
133-
database: The database to add.
133+
cloud_database: The cloud database to add.
134134
135135
Raises:
136-
ValueError: One of the given database keys matches a key for an
137-
existing database.
136+
ValueError: One of the given cloud database keys matches a key for
137+
an existing cloud database.
138138
"""
139-
self._target_manager.add_database(database=database)
139+
self._target_manager.add_cloud_database(
140+
cloud_database=cloud_database,
141+
)
140142

141143
@staticmethod
142144
def _wrap_callback(

src/mock_vws/target_manager.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,69 +19,71 @@ class TargetManager:
1919
"""
2020

2121
def __init__(self) -> None:
22-
"""Create a target manager with no databases."""
23-
self._databases: Iterable[CloudDatabase] = set()
22+
"""Create a target manager with no cloud databases."""
23+
self._cloud_databases: Iterable[CloudDatabase] = set()
2424

25-
def remove_database(self, database: CloudDatabase) -> None:
25+
def remove_cloud_database(self, cloud_database: CloudDatabase) -> None:
2626
"""Remove a cloud database.
2727
2828
Args:
29-
database: The database to add.
29+
cloud_database: The cloud database to remove.
3030
3131
Raises:
32-
KeyError: The database is not in the target manager.
32+
KeyError: The cloud database is not in the target manager.
3333
"""
34-
self._databases = {db for db in self._databases if db != database}
34+
self._cloud_databases = {
35+
db for db in self._cloud_databases if db != cloud_database
36+
}
3537

36-
def add_database(self, database: CloudDatabase) -> None:
38+
def add_cloud_database(self, cloud_database: CloudDatabase) -> None:
3739
"""Add a cloud database.
3840
3941
Args:
40-
database: The database to add.
42+
cloud_database: The cloud database to add.
4143
4244
Raises:
43-
ValueError: One of the given database keys matches a key for an
44-
existing database.
45+
ValueError: One of the given cloud database keys matches a key for
46+
an existing cloud database.
4547
"""
4648
message_fmt = (
4749
"All {key_name}s must be unique. "
48-
'There is already a database with the {key_name} "{value}".'
50+
'There is already a cloud database with the {key_name} "{value}".'
4951
)
5052
for existing_db in self.cloud_databases:
5153
for existing, new, key_name in (
5254
(
5355
existing_db.server_access_key,
54-
database.server_access_key,
56+
cloud_database.server_access_key,
5557
"server access key",
5658
),
5759
(
5860
existing_db.server_secret_key,
59-
database.server_secret_key,
61+
cloud_database.server_secret_key,
6062
"server secret key",
6163
),
6264
(
6365
existing_db.client_access_key,
64-
database.client_access_key,
66+
cloud_database.client_access_key,
6567
"client access key",
6668
),
6769
(
6870
existing_db.client_secret_key,
69-
database.client_secret_key,
71+
cloud_database.client_secret_key,
7072
"client secret key",
7173
),
7274
(
7375
existing_db.database_name,
74-
database.database_name,
76+
cloud_database.database_name,
7577
"name",
7678
),
7779
):
7880
if existing == new:
7981
message = message_fmt.format(key_name=key_name, value=new)
8082
raise ValueError(message)
8183

82-
self._databases = {*self._databases, database}
84+
self._cloud_databases = {*self._cloud_databases, cloud_database}
8385

8486
@property
8587
def cloud_databases(self) -> set[CloudDatabase]:
8688
"""All cloud databases."""
87-
return set(self._databases)
89+
return set(self._cloud_databases)

tests/mock_vws/fixtures/vuforia_backends.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,9 @@ def _enable_use_mock_vuforia(
137137
)
138138

139139
with MockVWS() as mock:
140-
mock.add_database(database=working_database)
141-
mock.add_database(database=inactive_database)
142-
mock.add_database(database=vumark_database)
140+
mock.add_cloud_database(cloud_database=working_database)
141+
mock.add_cloud_database(cloud_database=inactive_database)
142+
mock.add_cloud_database(cloud_database=vumark_database)
143143
yield
144144

145145

@@ -196,7 +196,7 @@ def _enable_use_docker_in_memory(
196196
base_url=target_manager_base_url,
197197
)
198198

199-
databases_url = target_manager_base_url + "/databases"
199+
databases_url = target_manager_base_url + "/cloud_databases"
200200
databases = requests.get(url=databases_url, timeout=30).json()
201201
for database in databases:
202202
database_name = database["database_name"]

tests/mock_vws/test_database_summary.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def test_processing_images(
246246
)
247247

248248
with MockVWS() as mock:
249-
mock.add_database(database=database)
249+
mock.add_cloud_database(cloud_database=database)
250250
vws_client.add_target(
251251
name=uuid.uuid4().hex,
252252
width=1,

0 commit comments

Comments
 (0)