Skip to content

Commit 14e6b38

Browse files
authored
Accumulate user_agent (#268)
* Accumulate user_agent User Agent is a property which can be prepended to by other packages such as datatrails-samples so that DataTrails-User-Agent is a list of agents. datatrails-samples will have its own copy of the Archivist class that will add its own user-agent. Likewise for avid-samples-service. AB#9572
1 parent 692b016 commit 14e6b38

14 files changed

+35
-34
lines changed

archivist/archivist.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,12 @@ def __init__(
109109
verify: bool = True,
110110
max_time: float = MAX_TIME,
111111
partner_id: str = "",
112-
user_agent: str = "",
113112
):
114113
super().__init__(
115114
fixtures=fixtures,
116115
verify=verify,
117116
max_time=max_time,
118117
partner_id=partner_id,
119-
user_agent=user_agent,
120118
)
121119

122120
if isinstance(auth, tuple):
@@ -205,22 +203,26 @@ def auth(self) -> "str | None":
205203
@property
206204
def Public(self) -> ArchivistPublic: # pylint: disable=invalid-name
207205
"""Get a Public instance"""
208-
return ArchivistPublic(
206+
arch = ArchivistPublic(
209207
fixtures=deepcopy(self._fixtures),
210208
verify=self._verify,
211209
max_time=self._max_time,
210+
partner_id=self._partner_id,
212211
)
212+
arch._user_agent = self._user_agent # pylint: disable=protected-access
213+
return arch
213214

214215
def __copy__(self) -> "Archivist":
215-
return Archivist(
216+
arch = Archivist(
216217
self._url,
217218
self.auth,
218219
fixtures=deepcopy(self._fixtures),
219220
verify=self._verify,
220221
max_time=self._max_time,
221222
partner_id=self._partner_id,
222-
user_agent=self._user_agent,
223223
)
224+
arch._user_agent = self._user_agent
225+
return arch
224226

225227
def _add_headers(self, headers: "dict[str,str]|None") -> "dict[str,Any]":
226228
newheaders = super()._add_headers(headers)

archivist/archivistpublic.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,14 @@ def __init__(
8787
verify: bool = True,
8888
max_time: float = MAX_TIME,
8989
partner_id: str = "",
90-
user_agent: str = "",
9190
):
9291
self._verify = verify
9392
self._response_ring_buffer = deque(maxlen=self.RING_BUFFER_MAX_LEN)
9493
self._session = None
9594
self._max_time = max_time
9695
self._fixtures = fixtures or {}
9796
self._partner_id = partner_id
98-
self._user_agent = user_agent
97+
self._user_agent = f"{USER_AGENT_PREFIX}{self.version}"
9998

10099
# Type hints for IDE autocomplete, keep in sync with CLIENTS map above
101100
self.assets: _AssetsPublic
@@ -171,9 +170,14 @@ def partner_id(self) -> str:
171170

172171
@property
173172
def user_agent(self) -> str:
174-
"""str: Returns partner id if set when initialising an instance of this class"""
173+
"""str: Returns user agent"""
175174
return self._user_agent
176175

176+
@user_agent.setter
177+
def user_agent(self, value):
178+
"""str: Prepends user agent to user_agent property"""
179+
self._user_agent = f"{value} {self.user_agent}"
180+
177181
@property
178182
def fixtures(self) -> "dict[str, Any]":
179183
"""dict: Contains predefined attributes for each endpoint"""
@@ -185,22 +189,18 @@ def fixtures(self, fixtures: "dict[str, Any]"):
185189
self._fixtures = _deepmerge(self._fixtures, fixtures)
186190

187191
def __copy__(self):
188-
return ArchivistPublic(
192+
arch = ArchivistPublic(
189193
fixtures=deepcopy(self._fixtures),
190194
verify=self._verify,
191195
max_time=self._max_time,
196+
partner_id=self.partner_id,
192197
)
198+
arch._user_agent = self._user_agent
199+
return arch
193200

194201
def _add_headers(self, headers: "dict[str, str]|None") -> "dict[str, str]":
195202
newheaders = {**headers} if headers is not None else {}
196-
u = self.user_agent
197-
if u:
198-
newheaders[USER_AGENT] = (
199-
f"{self.user_agent} "
200-
f"{USER_AGENT_PREFIX}{self.version}"
201-
)
202-
else:
203-
newheaders[USER_AGENT] = f"{USER_AGENT_PREFIX}{self.version}"
203+
newheaders[USER_AGENT] = self.user_agent
204204

205205
p = self.partner_id
206206
if p:

functests/execaccess_policies.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ def setUp(self):
125125
getenv("DATATRAILS_URL"),
126126
auth,
127127
partner_id=PARTNER_ID_VALUE,
128-
user_agent=USER_AGENT_VALUE,
129128
)
129+
self.arch.user_agent = USER_AGENT_VALUE
130130

131131
# these are for access_policies
132132
self.ac_props = deepcopy(PROPS)
@@ -311,8 +311,8 @@ def setUp(self):
311311
getenv("DATATRAILS_URL"),
312312
auth_2,
313313
partner_id=PARTNER_ID_VALUE,
314-
user_agent=USER_AGENT_VALUE,
315314
)
315+
self.arch.user_agent = USER_AGENT_VALUE
316316
# creates reciprocal subjects for arch 1 and arch 2.
317317
# subject 1 contains details of subject 2 to be shared
318318
self.subject_1, self.subject_2 = self.arch.subjects.share(

functests/execapplications.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ def setUp(self):
6262
getenv("DATATRAILS_URL"),
6363
auth,
6464
partner_id=PARTNER_ID_VALUE,
65-
user_agent=USER_AGENT_VALUE,
6665
)
66+
self.arch.user_agent = USER_AGENT_VALUE
6767
self.display_name = f"{DISPLAY_NAME} {uuid4()}"
6868

6969
def tearDown(self):

functests/execassets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ def setUp(self):
9696
auth,
9797
max_time=30,
9898
partner_id=PARTNER_ID_VALUE,
99-
user_agent=USER_AGENT_VALUE,
10099
)
100+
self.arch.user_agent = USER_AGENT_VALUE
101101
self.attrs = deepcopy(ATTRS)
102102
self.traffic_light = deepcopy(ATTRS)
103103
self.traffic_light["arc_display_type"] = "Traffic light with violation camera"
@@ -248,8 +248,8 @@ def setUp(self):
248248
auth,
249249
max_time=30,
250250
partner_id=PARTNER_ID_VALUE,
251-
user_agent=USER_AGENT_VALUE,
252251
)
252+
self.arch.user_agent = USER_AGENT_VALUE
253253

254254
def tearDown(self):
255255
self.arch.close()

functests/execattachments.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ def setUp(self):
5454
getenv("DATATRAILS_URL"),
5555
auth,
5656
partner_id=PARTNER_ID_VALUE,
57-
user_agent=USER_AGENT_VALUE,
5857
)
58+
self.arch.user_agent = USER_AGENT_VALUE
5959
self.file_uuid: str = ""
6060

6161
with suppress(FileNotFoundError):
@@ -221,8 +221,8 @@ def setUp(self):
221221
getenv("DATATRAILS_URL"),
222222
auth,
223223
partner_id=PARTNER_ID_VALUE,
224-
user_agent=USER_AGENT_VALUE,
225224
)
225+
self.arch.user_agent = USER_AGENT_VALUE
226226

227227
def tearDown(self):
228228
self.arch.close()

functests/execcompliance_policies.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ def setUp(self):
107107
getenv("DATATRAILS_URL"),
108108
auth,
109109
partner_id=PARTNER_ID_VALUE,
110-
user_agent=USER_AGENT_VALUE,
111110
)
111+
self.arch.user_agent = USER_AGENT_VALUE
112112
self.identities = []
113113

114114
def tearDown(self):

functests/execnotebooks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ def setUp(self):
4545
self.url,
4646
(self.client_id, self.client_secret),
4747
partner_id=PARTNER_ID_VALUE,
48-
user_agent=USER_AGENT_VALUE,
4948
)
49+
self.arch.user_agent = USER_AGENT_VALUE
5050

5151
def tearDown(self):
5252
self.arch.close()

functests/execpublicassets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ def setUp(self):
9393
auth,
9494
max_time=30,
9595
partner_id=PARTNER_ID_VALUE,
96-
user_agent=USER_AGENT_VALUE,
9796
)
97+
self.arch.user_agent = USER_AGENT_VALUE
9898
self.attrs = deepcopy(ATTRS)
9999
self.traffic_light = deepcopy(ATTRS)
100100
self.traffic_light["arc_display_type"] = "Traffic light with violation camera"

functests/execrunner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ def setUp(self):
4848
auth,
4949
max_time=30,
5050
partner_id=PARTNER_ID_VALUE,
51-
user_agent=USER_AGENT_VALUE,
5251
)
52+
self.arch.user_agent = USER_AGENT_VALUE
5353

5454
def tearDown(self):
5555
self.arch.close()

0 commit comments

Comments
 (0)