Skip to content

Commit 450205c

Browse files
Merge pull request #600 from VWS-Python/database-dataclass
Use dataclasses for Vuforia Database
2 parents 75b125a + f2ef2db commit 450205c

File tree

2 files changed

+57
-70
lines changed

2 files changed

+57
-70
lines changed

src/mock_vws/database.py

Lines changed: 17 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,73 +3,30 @@
33
"""
44

55
import uuid
6-
from typing import Optional, Set
6+
from dataclasses import dataclass, field
7+
from typing import Set
78

89
from .states import States
910
from .target import Target
1011

1112

12-
class VuforiaDatabase:
13+
def _random_hex() -> str:
1314
"""
14-
Credentials for VWS APIs.
15+
Return a random hex value.
1516
"""
17+
return uuid.uuid4().hex
1618

17-
database_name: str
18-
server_access_key: str
19-
server_secret_key: str
20-
client_access_key: str
21-
client_secret_key: str
22-
targets: Set[Target]
23-
state: States
24-
25-
def __init__(
26-
self,
27-
server_access_key: Optional[str] = None,
28-
server_secret_key: Optional[str] = None,
29-
client_access_key: Optional[str] = None,
30-
client_secret_key: Optional[str] = None,
31-
database_name: Optional[str] = None,
32-
state: States = States.WORKING,
33-
) -> None:
34-
"""
35-
Args:
36-
database_name: The name of a VWS target manager database name.
37-
server_access_key: A VWS server access key.
38-
server_secret_key: A VWS server secret key.
39-
client_access_key: A VWS client access key.
40-
client_secret_key: A VWS client secret key.
41-
state: The state of the database.
42-
43-
Attributes:
44-
database_name (str): The name of a VWS target manager database.
45-
server_access_key (bytes): A VWS server access key.
46-
server_secret_key (bytes): A VWS server secret key.
47-
client_access_key (bytes): A VWS client access key.
48-
client_secret_key (bytes): A VWS client secret key.
49-
targets (typing.Set[Target]): The
50-
:class:`~mock_vws.target.Target` s in the database.
51-
state (States): The state of the database.
52-
"""
53-
54-
if database_name is None:
55-
database_name = uuid.uuid4().hex
56-
57-
if server_access_key is None:
58-
server_access_key = uuid.uuid4().hex
5919

60-
if server_secret_key is None:
61-
server_secret_key = uuid.uuid4().hex
62-
63-
if client_access_key is None:
64-
client_access_key = uuid.uuid4().hex
65-
66-
if client_secret_key is None:
67-
client_secret_key = uuid.uuid4().hex
20+
@dataclass(eq=True, frozen=True)
21+
class VuforiaDatabase:
22+
"""
23+
Credentials for VWS APIs.
24+
"""
6825

69-
self.server_access_key = server_access_key
70-
self.server_secret_key = server_secret_key
71-
self.client_access_key = client_access_key
72-
self.client_secret_key = client_secret_key
73-
self.database_name = database_name
74-
self.targets: Set[Target] = set([])
75-
self.state = state
26+
database_name: str = field(default_factory=_random_hex)
27+
server_access_key: str = field(default_factory=_random_hex)
28+
server_secret_key: str = field(default_factory=_random_hex)
29+
client_access_key: str = field(default_factory=_random_hex)
30+
client_secret_key: str = field(default_factory=_random_hex)
31+
targets: Set[Target] = field(default_factory=set, hash=False)
32+
state: States = States.WORKING

tests/mock_vws/test_authorization_header.py

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,18 @@ def test_bad_access_key_services(
181181
vuforia_database: VuforiaDatabase,
182182
) -> None:
183183
"""
184-
If the server access key given does not match any database, a
185-
``Fail`` response is returned.
184+
If the server access key given does not match any database, a ``Fail``
185+
response is returned.
186186
"""
187-
keys = vuforia_database
188-
keys.server_access_key = 'example'
187+
keys = VuforiaDatabase(
188+
database_name=vuforia_database.database_name,
189+
server_access_key='example',
190+
server_secret_key=vuforia_database.server_secret_key,
191+
client_access_key=vuforia_database.client_access_key,
192+
client_secret_key=vuforia_database.client_secret_key,
193+
targets=vuforia_database.targets,
194+
state=vuforia_database.state,
195+
)
189196
response = get_vws_target(
190197
target_id=uuid.uuid4().hex,
191198
vuforia_database=keys,
@@ -206,12 +213,20 @@ def test_bad_access_key_query(
206213
If the client access key given is incorrect, an
207214
``UNAUTHORIZED`` response is returned.
208215
"""
209-
vuforia_database.client_access_key = 'example'
216+
keys = VuforiaDatabase(
217+
database_name=vuforia_database.database_name,
218+
server_access_key=vuforia_database.server_access_key,
219+
server_secret_key=vuforia_database.server_secret_key,
220+
client_access_key='example',
221+
client_secret_key=vuforia_database.client_secret_key,
222+
targets=vuforia_database.targets,
223+
state=vuforia_database.state,
224+
)
210225
image_content = high_quality_image.getvalue()
211226
body = {'image': ('image.jpeg', image_content, 'image/jpeg')}
212227

213228
response = query(
214-
vuforia_database=vuforia_database,
229+
vuforia_database=keys,
215230
body=body,
216231
)
217232

@@ -244,8 +259,15 @@ def test_bad_secret_key_services(
244259
If the server secret key given is incorrect, an
245260
``AuthenticationFailure`` response is returned.
246261
"""
247-
keys = vuforia_database
248-
keys.server_secret_key = 'example'
262+
keys = VuforiaDatabase(
263+
database_name=vuforia_database.database_name,
264+
server_access_key=vuforia_database.server_access_key,
265+
server_secret_key='example',
266+
client_access_key=vuforia_database.client_access_key,
267+
client_secret_key=vuforia_database.client_secret_key,
268+
targets=vuforia_database.targets,
269+
state=vuforia_database.state,
270+
)
249271
response = get_vws_target(
250272
target_id=uuid.uuid4().hex,
251273
vuforia_database=keys,
@@ -266,12 +288,20 @@ def test_bad_secret_key_query(
266288
If the client secret key given is incorrect, an
267289
``UNAUTHORIZED`` response is returned.
268290
"""
269-
vuforia_database.client_secret_key = 'example'
291+
keys = VuforiaDatabase(
292+
database_name=vuforia_database.database_name,
293+
server_access_key=vuforia_database.server_access_key,
294+
server_secret_key=vuforia_database.server_secret_key,
295+
client_access_key=vuforia_database.client_access_key,
296+
client_secret_key='example',
297+
targets=vuforia_database.targets,
298+
state=vuforia_database.state,
299+
)
270300
image_content = high_quality_image.getvalue()
271301
body = {'image': ('image.jpeg', image_content, 'image/jpeg')}
272302

273303
response = query(
274-
vuforia_database=vuforia_database,
304+
vuforia_database=keys,
275305
body=body,
276306
)
277307

0 commit comments

Comments
 (0)