99import dataclasses
1010import datetime
1111import email .utils
12+ import json
1213import uuid
1314from collections .abc import Callable
1415from http import HTTPMethod , HTTPStatus
15- from typing import SupportsFloat
16+ from typing import Any , SupportsFloat
1617from zoneinfo import ZoneInfo
1718
19+ from requests import Request , Response
20+ from requests .models import PreparedRequest
21+
1822from mock_vws ._constants import ResultCodes , TargetStatuses
1923from mock_vws ._database_matchers import get_database_matching_server_keys
2024from mock_vws ._mock_common import Route , json_dump
@@ -125,7 +129,7 @@ def __init__(
125129 path_pattern = "/targets" ,
126130 http_methods = {HTTPMethod .POST },
127131 )
128- def add_target (self , request : "Request" , context : "Context" ) -> str :
132+ def add_target (self , request : PreparedRequest ) -> Response :
129133 """
130134 Add a target.
131135
@@ -137,7 +141,7 @@ def add_target(self, request: "Request", context: "Context") -> str:
137141 request_headers = request .headers ,
138142 request_body = _body_bytes (request = request ),
139143 request_method = request .method ,
140- request_path = request .path ,
144+ request_path = request .path_url ,
141145 databases = self ._target_manager .databases ,
142146 )
143147 except ValidatorError as exc :
@@ -149,23 +153,23 @@ def add_target(self, request: "Request", context: "Context") -> str:
149153 request_headers = request .headers ,
150154 request_body = _body_bytes (request = request ),
151155 request_method = request .method ,
152- request_path = request .path ,
156+ request_path = request .path_url ,
153157 databases = self ._target_manager .databases ,
154158 )
155159
156- given_active_flag = request . json () .get ("active_flag" )
160+ given_active_flag = request_json .get ("active_flag" )
157161 active_flag = {
158162 None : True ,
159163 True : True ,
160164 False : False ,
161165 }[given_active_flag ]
162166
163- application_metadata = request . json () .get ("application_metadata" )
167+ application_metadata = request_json .get ("application_metadata" )
164168
165169 new_target = Target (
166- name = request . json () ["name" ],
167- width = request . json () ["width" ],
168- image_value = base64 .b64decode (s = request . json () ["image" ]),
170+ name = request_json ["name" ],
171+ width = request_json ["width" ],
172+ image_value = base64 .b64decode (s = request_json ["image" ]),
169173 active_flag = active_flag ,
170174 processing_time_seconds = self ._processing_time_seconds ,
171175 application_metadata = application_metadata ,
@@ -202,7 +206,7 @@ def add_target(self, request: "Request", context: "Context") -> str:
202206 path_pattern = f"/targets/{ _TARGET_ID_PATTERN } " ,
203207 http_methods = {HTTPMethod .DELETE },
204208 )
205- def delete_target (self , request : "Request" , context : "Context" ) -> str :
209+ def delete_target (self , request : PreparedRequest ) -> Response :
206210 """
207211 Delete a target.
208212
@@ -214,7 +218,7 @@ def delete_target(self, request: "Request", context: "Context") -> str:
214218 request_headers = request .headers ,
215219 request_body = _body_bytes (request = request ),
216220 request_method = request .method ,
217- request_path = request .path ,
221+ request_path = request .path_url ,
218222 databases = self ._target_manager .databases ,
219223 )
220224 except ValidatorError as exc :
@@ -227,7 +231,7 @@ def delete_target(self, request: "Request", context: "Context") -> str:
227231 request_headers = request .headers ,
228232 request_body = _body_bytes (request = request ),
229233 request_method = request .method ,
230- request_path = request .path ,
234+ request_path = request .path_url ,
231235 databases = self ._target_manager .databases ,
232236 )
233237
@@ -269,19 +273,20 @@ def delete_target(self, request: "Request", context: "Context") -> str:
269273 return body_json
270274
271275 @route (path_pattern = "/summary" , http_methods = {HTTPMethod .GET })
272- def database_summary (self , request : "Request" , context : "Context" ) -> str :
276+ def database_summary (self , request : "Request" ) -> str :
273277 """
274278 Get a database summary report.
275279
276280 Fake implementation of
277281 https://developer.vuforia.com/library/web-api/cloud-targets-web-services-api#summary-report
278282 """
283+ breakpoint ()
279284 try :
280285 run_services_validators (
281286 request_headers = request .headers ,
282287 request_body = _body_bytes (request = request ),
283288 request_method = request .method ,
284- request_path = request .path ,
289+ request_path = request .path_url ,
285290 databases = self ._target_manager .databases ,
286291 )
287292 except ValidatorError as exc :
@@ -295,7 +300,7 @@ def database_summary(self, request: "Request", context: "Context") -> str:
295300 request_headers = request .headers ,
296301 request_body = _body_bytes (request = request ),
297302 request_method = request .method ,
298- request_path = request .path ,
303+ request_path = request .path_url ,
299304 databases = self ._target_manager .databases ,
300305 )
301306
@@ -335,7 +340,7 @@ def database_summary(self, request: "Request", context: "Context") -> str:
335340 return body_json
336341
337342 @route (path_pattern = "/targets" , http_methods = {HTTPMethod .GET })
338- def target_list (self , request : "Request" , context : "Context" ) -> str :
343+ def target_list (self , request : PreparedRequest ) -> Response :
339344 """
340345 Get a list of all targets.
341346
@@ -347,7 +352,7 @@ def target_list(self, request: "Request", context: "Context") -> str:
347352 request_headers = request .headers ,
348353 request_body = _body_bytes (request = request ),
349354 request_method = request .method ,
350- request_path = request .path ,
355+ request_path = request .path_url ,
351356 databases = self ._target_manager .databases ,
352357 )
353358 except ValidatorError as exc :
@@ -359,7 +364,7 @@ def target_list(self, request: "Request", context: "Context") -> str:
359364 request_headers = request .headers ,
360365 request_body = _body_bytes (request = request ),
361366 request_method = request .method ,
362- request_path = request .path ,
367+ request_path = request .path_url ,
363368 databases = self ._target_manager .databases ,
364369 )
365370
@@ -395,7 +400,7 @@ def target_list(self, request: "Request", context: "Context") -> str:
395400 path_pattern = f"/targets/{ _TARGET_ID_PATTERN } " ,
396401 http_methods = {HTTPMethod .GET },
397402 )
398- def get_target (self , request : "Request" , context : "Context" ) -> str :
403+ def get_target (self , request : PreparedRequest ) -> Response :
399404 """
400405 Get details of a target.
401406
@@ -407,7 +412,7 @@ def get_target(self, request: "Request", context: "Context") -> str:
407412 request_headers = request .headers ,
408413 request_body = _body_bytes (request = request ),
409414 request_method = request .method ,
410- request_path = request .path ,
415+ request_path = request .path_url ,
411416 databases = self ._target_manager .databases ,
412417 )
413418 except ValidatorError as exc :
@@ -419,7 +424,7 @@ def get_target(self, request: "Request", context: "Context") -> str:
419424 request_headers = request .headers ,
420425 request_body = _body_bytes (request = request ),
421426 request_method = request .method ,
422- request_path = request .path ,
427+ request_path = request .path_url ,
423428 databases = self ._target_manager .databases ,
424429 )
425430 target_id = request .path .split (sep = "/" )[- 1 ]
@@ -463,7 +468,7 @@ def get_target(self, request: "Request", context: "Context") -> str:
463468 path_pattern = f"/duplicates/{ _TARGET_ID_PATTERN } " ,
464469 http_methods = {HTTPMethod .GET },
465470 )
466- def get_duplicates (self , request : "Request" , context : "Context" ) -> str :
471+ def get_duplicates (self , request : PreparedRequest ) -> Response :
467472 """
468473 Get targets which may be considered duplicates of a given target.
469474
@@ -475,7 +480,7 @@ def get_duplicates(self, request: "Request", context: "Context") -> str:
475480 request_headers = request .headers ,
476481 request_body = _body_bytes (request = request ),
477482 request_method = request .method ,
478- request_path = request .path ,
483+ request_path = request .path_url ,
479484 databases = self ._target_manager .databases ,
480485 )
481486 except ValidatorError as exc :
@@ -487,7 +492,7 @@ def get_duplicates(self, request: "Request", context: "Context") -> str:
487492 request_headers = request .headers ,
488493 request_body = _body_bytes (request = request ),
489494 request_method = request .method ,
490- request_path = request .path ,
495+ request_path = request .path_url ,
491496 databases = self ._target_manager .databases ,
492497 )
493498 target_id = request .path .split (sep = "/" )[- 1 ]
@@ -537,7 +542,7 @@ def get_duplicates(self, request: "Request", context: "Context") -> str:
537542 path_pattern = f"/targets/{ _TARGET_ID_PATTERN } " ,
538543 http_methods = {HTTPMethod .PUT },
539544 )
540- def update_target (self , request : "Request" , context : "Context" ) -> str :
545+ def update_target (self , request : PreparedRequest ) -> Response :
541546 """
542547 Update a target.
543548
@@ -548,20 +553,20 @@ def update_target(self, request: "Request", context: "Context") -> str:
548553 run_services_validators (
549554 request_headers = request .headers ,
550555 request_body = _body_bytes (request = request ),
551- request_method = request .method ,
552- request_path = request .path ,
556+ request_method = request .method or "" ,
557+ request_path = request .path_url ,
553558 databases = self ._target_manager .databases ,
554559 )
555560 except ValidatorError as exc :
556- context .headers = exc .headers
561+ request .headers = exc .headers
557562 context .status_code = exc .status_code
558563 return exc .response_text
559564
560565 database = get_database_matching_server_keys (
561566 request_headers = request .headers ,
562567 request_body = _body_bytes (request = request ),
563568 request_method = request .method ,
564- request_path = request .path ,
569+ request_path = request .path_url ,
565570 databases = self ._target_manager .databases ,
566571 )
567572
@@ -581,26 +586,27 @@ def update_target(self, request: "Request", context: "Context") -> str:
581586 context .status_code = exception .status_code
582587 return exception .response_text
583588
584- width = request .json ().get ("width" , target .width )
585- name = request .json ().get ("name" , target .name )
586- active_flag = request .json ().get ("active_flag" , target .active_flag )
587- application_metadata = request .json ().get (
589+ request_json : dict [str , Any ] = json .loads (s = request .body or b"" )
590+ width = request_json .get ("width" , target .width )
591+ name = request_json .get ("name" , target .name )
592+ active_flag = request_json .get ("active_flag" , target .active_flag )
593+ application_metadata = request_json .get (
588594 "application_metadata" ,
589595 target .application_metadata ,
590596 )
591597
592598 image_value = target .image_value
593- if "image" in request . json () :
594- image_value = base64 .b64decode (s = request . json () ["image" ])
599+ if "image" in request_json :
600+ image_value = base64 .b64decode (s = request_json ["image" ])
595601
596- if "active_flag" in request . json () and active_flag is None :
602+ if "active_flag" in request_json and active_flag is None :
597603 fail_exception = FailError (status_code = HTTPStatus .BAD_REQUEST )
598604 context .headers = fail_exception .headers
599605 context .status_code = fail_exception .status_code
600606 return fail_exception .response_text
601607
602608 if (
603- "application_metadata" in request . json ()
609+ "application_metadata" in request_json
604610 and application_metadata is None
605611 ):
606612 fail_exception = FailError (status_code = HTTPStatus .BAD_REQUEST )
@@ -646,7 +652,7 @@ def update_target(self, request: "Request", context: "Context") -> str:
646652 path_pattern = f"/summary/{ _TARGET_ID_PATTERN } " ,
647653 http_methods = {HTTPMethod .GET },
648654 )
649- def target_summary (self , request : "Request" , context : "Context" ) -> str :
655+ def target_summary (self , request : PreparedRequest ) -> Response :
650656 """
651657 Get a summary report for a target.
652658
@@ -658,7 +664,7 @@ def target_summary(self, request: "Request", context: "Context") -> str:
658664 request_headers = request .headers ,
659665 request_body = _body_bytes (request = request ),
660666 request_method = request .method ,
661- request_path = request .path ,
667+ request_path = request .path_url ,
662668 databases = self ._target_manager .databases ,
663669 )
664670 except ValidatorError as exc :
@@ -670,7 +676,7 @@ def target_summary(self, request: "Request", context: "Context") -> str:
670676 request_headers = request .headers ,
671677 request_body = _body_bytes (request = request ),
672678 request_method = request .method ,
673- request_path = request .path ,
679+ request_path = request .path_url ,
674680 databases = self ._target_manager .databases ,
675681 )
676682 target_id = request .path .split (sep = "/" )[- 1 ]
0 commit comments