Skip to content

Commit b7d4bbc

Browse files
committed
Progress towards responses switch
1 parent 4d9e389 commit b7d4bbc

File tree

1 file changed

+63
-60
lines changed

1 file changed

+63
-60
lines changed

src/mock_vws/_requests_mock_server/mock_web_services_api.py

Lines changed: 63 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from typing import Any, SupportsFloat
1717
from zoneinfo import ZoneInfo
1818

19-
from requests import Request, Response
2019
from requests.models import PreparedRequest
2120

2221
from mock_vws._constants import ResultCodes, TargetStatuses
@@ -77,7 +76,7 @@ def decorator(method: Callable[..., str]) -> Callable[..., str]:
7776
return decorator
7877

7978

80-
def _body_bytes(request: Request) -> bytes:
79+
def _body_bytes(request: PreparedRequest) -> bytes:
8180
"""
8281
Return the body of a request as bytes.
8382
"""
@@ -129,7 +128,9 @@ def __init__(
129128
path_pattern="/targets",
130129
http_methods={HTTPMethod.POST},
131130
)
132-
def add_target(self, request: PreparedRequest) -> Response:
131+
def add_target(
132+
self, request: PreparedRequest
133+
) -> tuple[int, dict[str, str], str]:
133134
"""
134135
Add a target.
135136
@@ -140,23 +141,22 @@ def add_target(self, request: PreparedRequest) -> Response:
140141
run_services_validators(
141142
request_headers=request.headers,
142143
request_body=_body_bytes(request=request),
143-
request_method=request.method,
144+
request_method=request.method or "",
144145
request_path=request.path_url,
145146
databases=self._target_manager.databases,
146147
)
147148
except ValidatorError as exc:
148-
context.headers = exc.headers
149-
context.status_code = exc.status_code
150-
return exc.response_text
149+
return exc.status_code, exc.headers, exc.response_text
151150

152151
database = get_database_matching_server_keys(
153152
request_headers=request.headers,
154153
request_body=_body_bytes(request=request),
155-
request_method=request.method,
154+
request_method=request.method or "",
156155
request_path=request.path_url,
157156
databases=self._target_manager.databases,
158157
)
159158

159+
request_json: dict[str, Any] = json.loads(s=request.body or b"")
160160
given_active_flag = request_json.get("active_flag")
161161
active_flag = {
162162
None: True,
@@ -206,7 +206,9 @@ def add_target(self, request: PreparedRequest) -> Response:
206206
path_pattern=f"/targets/{_TARGET_ID_PATTERN}",
207207
http_methods={HTTPMethod.DELETE},
208208
)
209-
def delete_target(self, request: PreparedRequest) -> Response:
209+
def delete_target(
210+
self, request: PreparedRequest
211+
) -> tuple[int, dict[str, str], str]:
210212
"""
211213
Delete a target.
212214
@@ -217,25 +219,23 @@ def delete_target(self, request: PreparedRequest) -> Response:
217219
run_services_validators(
218220
request_headers=request.headers,
219221
request_body=_body_bytes(request=request),
220-
request_method=request.method,
222+
request_method=request.method or "",
221223
request_path=request.path_url,
222224
databases=self._target_manager.databases,
223225
)
224226
except ValidatorError as exc:
225-
context.headers = exc.headers
226-
context.status_code = exc.status_code
227-
return exc.response_text
227+
return exc.status_code, exc.headers, exc.response_text
228228

229229
body: dict[str, str] = {}
230230
database = get_database_matching_server_keys(
231231
request_headers=request.headers,
232232
request_body=_body_bytes(request=request),
233-
request_method=request.method,
233+
request_method=request.method or "",
234234
request_path=request.path_url,
235235
databases=self._target_manager.databases,
236236
)
237237

238-
target_id = request.path.split(sep="/")[-1]
238+
target_id = request.path_url.split(sep="/")[-1]
239239
target = database.get_target(target_id=target_id)
240240

241241
if target.status == TargetStatuses.PROCESSING.value:
@@ -259,7 +259,7 @@ def delete_target(self, request: PreparedRequest) -> Response:
259259
"result_code": ResultCodes.SUCCESS.value,
260260
}
261261
body_json = json_dump(body=body)
262-
context.headers = {
262+
headers = {
263263
"Connection": "keep-alive",
264264
"Content-Length": str(len(body_json)),
265265
"Content-Type": "application/json",
@@ -270,10 +270,13 @@ def delete_target(self, request: PreparedRequest) -> Response:
270270
"x-aws-region": "us-east-2, us-west-2",
271271
"x-content-type-options": "nosniff",
272272
}
273-
return body_json
273+
return HTTPStatus.OK, headers, body_json
274274

275275
@route(path_pattern="/summary", http_methods={HTTPMethod.GET})
276-
def database_summary(self, request: "Request") -> str:
276+
def database_summary(
277+
self,
278+
request: PreparedRequest,
279+
) -> tuple[int, dict[str, str], str]:
277280
"""
278281
Get a database summary report.
279282
@@ -285,21 +288,19 @@ def database_summary(self, request: "Request") -> str:
285288
run_services_validators(
286289
request_headers=request.headers,
287290
request_body=_body_bytes(request=request),
288-
request_method=request.method,
291+
request_method=request.method or "",
289292
request_path=request.path_url,
290293
databases=self._target_manager.databases,
291294
)
292295
except ValidatorError as exc:
293-
context.headers = exc.headers
294-
context.status_code = exc.status_code
295-
return exc.response_text
296+
return exc.status_code, exc.headers, exc.response_text
296297

297298
body: dict[str, str | int] = {}
298299

299300
database = get_database_matching_server_keys(
300301
request_headers=request.headers,
301302
request_body=_body_bytes(request=request),
302-
request_method=request.method,
303+
request_method=request.method or "",
303304
request_path=request.path_url,
304305
databases=self._target_manager.databases,
305306
)
@@ -326,7 +327,7 @@ def database_summary(self, request: "Request") -> str:
326327
"request_usage": 0,
327328
}
328329
body_json = json_dump(body=body)
329-
context.headers = {
330+
headers = {
330331
"Connection": "keep-alive",
331332
"Content-Length": str(len(body_json)),
332333
"Content-Type": "application/json",
@@ -337,10 +338,12 @@ def database_summary(self, request: "Request") -> str:
337338
"x-aws-region": "us-east-2, us-west-2",
338339
"x-content-type-options": "nosniff",
339340
}
340-
return body_json
341+
return HTTPStatus.OK, headers, body_json
341342

342343
@route(path_pattern="/targets", http_methods={HTTPMethod.GET})
343-
def target_list(self, request: PreparedRequest) -> Response:
344+
def target_list(
345+
self, request: PreparedRequest
346+
) -> tuple[int, dict[str, str], str]:
344347
"""
345348
Get a list of all targets.
346349
@@ -351,19 +354,17 @@ def target_list(self, request: PreparedRequest) -> Response:
351354
run_services_validators(
352355
request_headers=request.headers,
353356
request_body=_body_bytes(request=request),
354-
request_method=request.method,
357+
request_method=request.method or "",
355358
request_path=request.path_url,
356359
databases=self._target_manager.databases,
357360
)
358361
except ValidatorError as exc:
359-
context.headers = exc.headers
360-
context.status_code = exc.status_code
361-
return exc.response_text
362+
return exc.status_code, exc.headers, exc.response_text
362363

363364
database = get_database_matching_server_keys(
364365
request_headers=request.headers,
365366
request_body=_body_bytes(request=request),
366-
request_method=request.method,
367+
request_method=request.method or "",
367368
request_path=request.path_url,
368369
databases=self._target_manager.databases,
369370
)
@@ -383,7 +384,7 @@ def target_list(self, request: PreparedRequest) -> Response:
383384
"results": response_results,
384385
}
385386
body_json = json_dump(body=body)
386-
context.headers = {
387+
headers = {
387388
"Connection": "keep-alive",
388389
"Content-Length": str(len(body_json)),
389390
"Content-Type": "application/json",
@@ -394,13 +395,15 @@ def target_list(self, request: PreparedRequest) -> Response:
394395
"x-aws-region": "us-east-2, us-west-2",
395396
"x-content-type-options": "nosniff",
396397
}
397-
return body_json
398+
return HTTPStatus.OK, headers, body_json
398399

399400
@route(
400401
path_pattern=f"/targets/{_TARGET_ID_PATTERN}",
401402
http_methods={HTTPMethod.GET},
402403
)
403-
def get_target(self, request: PreparedRequest) -> Response:
404+
def get_target(
405+
self, request: PreparedRequest
406+
) -> tuple[int, dict[str, str], str]:
404407
"""
405408
Get details of a target.
406409
@@ -411,23 +414,21 @@ def get_target(self, request: PreparedRequest) -> Response:
411414
run_services_validators(
412415
request_headers=request.headers,
413416
request_body=_body_bytes(request=request),
414-
request_method=request.method,
417+
request_method=request.method or "",
415418
request_path=request.path_url,
416419
databases=self._target_manager.databases,
417420
)
418421
except ValidatorError as exc:
419-
context.headers = exc.headers
420-
context.status_code = exc.status_code
421-
return exc.response_text
422+
return exc.status_code, exc.headers, exc.response_text
422423

423424
database = get_database_matching_server_keys(
424425
request_headers=request.headers,
425426
request_body=_body_bytes(request=request),
426-
request_method=request.method,
427+
request_method=request.method or "",
427428
request_path=request.path_url,
428429
databases=self._target_manager.databases,
429430
)
430-
target_id = request.path.split(sep="/")[-1]
431+
target_id = request.path_url.split(sep="/")[-1]
431432
target = database.get_target(target_id=target_id)
432433

433434
target_record = {
@@ -451,7 +452,7 @@ def get_target(self, request: PreparedRequest) -> Response:
451452
"status": target.status,
452453
}
453454
body_json = json_dump(body=body)
454-
context.headers = {
455+
headers = {
455456
"Connection": "keep-alive",
456457
"Content-Length": str(len(body_json)),
457458
"Content-Type": "application/json",
@@ -462,13 +463,15 @@ def get_target(self, request: PreparedRequest) -> Response:
462463
"x-aws-region": "us-east-2, us-west-2",
463464
"x-content-type-options": "nosniff",
464465
}
465-
return body_json
466+
return HTTPStatus.OK, headers, body_json
466467

467468
@route(
468469
path_pattern=f"/duplicates/{_TARGET_ID_PATTERN}",
469470
http_methods={HTTPMethod.GET},
470471
)
471-
def get_duplicates(self, request: PreparedRequest) -> Response:
472+
def get_duplicates(
473+
self, request: PreparedRequest
474+
) -> tuple[int, dict[str, str], str]:
472475
"""
473476
Get targets which may be considered duplicates of a given target.
474477
@@ -479,23 +482,21 @@ def get_duplicates(self, request: PreparedRequest) -> Response:
479482
run_services_validators(
480483
request_headers=request.headers,
481484
request_body=_body_bytes(request=request),
482-
request_method=request.method,
485+
request_method=request.method or "",
483486
request_path=request.path_url,
484487
databases=self._target_manager.databases,
485488
)
486489
except ValidatorError as exc:
487-
context.headers = exc.headers
488-
context.status_code = exc.status_code
489-
return exc.response_text
490+
return exc.status_code, exc.headers, exc.response_text
490491

491492
database = get_database_matching_server_keys(
492493
request_headers=request.headers,
493494
request_body=_body_bytes(request=request),
494-
request_method=request.method,
495+
request_method=request.method or "",
495496
request_path=request.path_url,
496497
databases=self._target_manager.databases,
497498
)
498-
target_id = request.path.split(sep="/")[-1]
499+
target_id = request.path_url.split(sep="/")[-1]
499500
target = database.get_target(target_id=target_id)
500501

501502
other_targets = database.targets - {target}
@@ -542,7 +543,9 @@ def get_duplicates(self, request: PreparedRequest) -> Response:
542543
path_pattern=f"/targets/{_TARGET_ID_PATTERN}",
543544
http_methods={HTTPMethod.PUT},
544545
)
545-
def update_target(self, request: PreparedRequest) -> Response:
546+
def update_target(
547+
self, request: PreparedRequest
548+
) -> tuple[int, dict[str, str], str]:
546549
"""
547550
Update a target.
548551
@@ -558,19 +561,17 @@ def update_target(self, request: PreparedRequest) -> Response:
558561
databases=self._target_manager.databases,
559562
)
560563
except ValidatorError as exc:
561-
request.headers = exc.headers
562-
context.status_code = exc.status_code
563-
return exc.response_text
564+
return exc.status_code, exc.headers, exc.response_text
564565

565566
database = get_database_matching_server_keys(
566567
request_headers=request.headers,
567568
request_body=_body_bytes(request=request),
568-
request_method=request.method,
569+
request_method=request.method or "",
569570
request_path=request.path_url,
570571
databases=self._target_manager.databases,
571572
)
572573

573-
target_id = request.path.split(sep="/")[-1]
574+
target_id = request.path_url.split(sep="/")[-1]
574575
target = database.get_target(target_id=target_id)
575576
body: dict[str, str] = {}
576577

@@ -635,7 +636,7 @@ def update_target(self, request: PreparedRequest) -> Response:
635636
"transaction_id": uuid.uuid4().hex,
636637
}
637638
body_json = json_dump(body=body)
638-
context.headers = {
639+
headers = {
639640
"Connection": "keep-alive",
640641
"Content-Type": "application/json",
641642
"server": "envoy",
@@ -652,7 +653,9 @@ def update_target(self, request: PreparedRequest) -> Response:
652653
path_pattern=f"/summary/{_TARGET_ID_PATTERN}",
653654
http_methods={HTTPMethod.GET},
654655
)
655-
def target_summary(self, request: PreparedRequest) -> Response:
656+
def target_summary(
657+
self, request: PreparedRequest
658+
) -> tuple[int, dict[str, str], str]:
656659
"""
657660
Get a summary report for a target.
658661
@@ -663,7 +666,7 @@ def target_summary(self, request: PreparedRequest) -> Response:
663666
run_services_validators(
664667
request_headers=request.headers,
665668
request_body=_body_bytes(request=request),
666-
request_method=request.method,
669+
request_method=request.method or "",
667670
request_path=request.path_url,
668671
databases=self._target_manager.databases,
669672
)
@@ -675,11 +678,11 @@ def target_summary(self, request: PreparedRequest) -> Response:
675678
database = get_database_matching_server_keys(
676679
request_headers=request.headers,
677680
request_body=_body_bytes(request=request),
678-
request_method=request.method,
681+
request_method=request.method or "",
679682
request_path=request.path_url,
680683
databases=self._target_manager.databases,
681684
)
682-
target_id = request.path.split(sep="/")[-1]
685+
target_id = request.path_url.split(sep="/")[-1]
683686
target = database.get_target(target_id=target_id)
684687

685688
date = email.utils.formatdate(

0 commit comments

Comments
 (0)