1515from mock_vws .database import VuforiaDatabase
1616from mock_vws .database_type import DatabaseType
1717from mock_vws .states import States
18- from mock_vws .target import Target
19- from mock_vws .target_type import TargetType
18+ from mock_vws .target import ImageTarget , VuMarkTarget
2019from mock_vws .target_manager import TargetManager
2120from mock_vws .target_raters import (
2221 BrisqueTargetTrackingRater ,
@@ -205,25 +204,29 @@ def create_target(database_name: str) -> Response:
205204 if database .database_name == database_name
206205 )
207206 request_json = json .loads (s = request .data )
208- image_base64 = request_json ["image_base64" ]
209- image_bytes = base64 .b64decode (s = image_base64 )
210207 settings = TargetManagerSettings .model_validate (obj = {})
211- target_tracking_rater = settings .target_rater .to_target_rater ()
212-
213- target_type = TargetType [
214- request_json .get ("target_type_name" , TargetType .IMAGE .name )
215- ]
216- target = Target (
217- name = request_json ["name" ],
218- width = request_json ["width" ],
219- image_value = image_bytes ,
220- active_flag = request_json ["active_flag" ],
221- processing_time_seconds = request_json ["processing_time_seconds" ],
222- application_metadata = request_json ["application_metadata" ],
223- target_id = request_json ["target_id" ],
224- target_tracking_rater = target_tracking_rater ,
225- target_type = target_type ,
226- )
208+
209+ target_type_name = request_json .get ("target_type_name" , "IMAGE" )
210+ if target_type_name == "VUMARK_TEMPLATE" :
211+ target : ImageTarget | VuMarkTarget = VuMarkTarget (
212+ name = request_json ["name" ],
213+ active_flag = request_json ["active_flag" ],
214+ processing_time_seconds = request_json ["processing_time_seconds" ],
215+ target_id = request_json ["target_id" ],
216+ )
217+ else :
218+ image_bytes = base64 .b64decode (s = request_json ["image_base64" ])
219+ target_tracking_rater = settings .target_rater .to_target_rater ()
220+ target = ImageTarget (
221+ name = request_json ["name" ],
222+ width = request_json ["width" ],
223+ image_value = image_bytes ,
224+ active_flag = request_json ["active_flag" ],
225+ processing_time_seconds = request_json ["processing_time_seconds" ],
226+ application_metadata = request_json ["application_metadata" ],
227+ target_id = request_json ["target_id" ],
228+ target_tracking_rater = target_tracking_rater ,
229+ )
227230 database .targets .add (target )
228231
229232 return Response (
@@ -247,7 +250,7 @@ def delete_target(database_name: str, target_id: str) -> Response:
247250 target = database .get_target (target_id = target_id )
248251 now = datetime .datetime .now (tz = target .upload_date .tzinfo )
249252 # See https://github.com/facebook/pyrefly/issues/1897
250- new_target = copy .replace (
253+ new_target : ImageTarget | VuMarkTarget = copy .replace ( # type: ignore[assignment]
251254 target , # pyrefly: ignore[bad-argument-type]
252255 delete_date = now ,
253256 )
@@ -273,32 +276,39 @@ def update_target(database_name: str, target_id: str) -> Response:
273276 target = database .get_target (target_id = target_id )
274277
275278 request_json = json .loads (s = request .data )
276- width = request_json .get ("width" , target .width )
277279 name = request_json .get ("name" , target .name )
278280 active_flag = request_json .get ("active_flag" , target .active_flag )
279- application_metadata = request_json .get (
280- "application_metadata" ,
281- target .application_metadata ,
282- )
283-
284- image_value = target .image_value
285- request_json = json .loads (s = request .data )
286- if "image" in request_json :
287- image_value = base64 .b64decode (s = request_json ["image" ])
288281
289282 gmt = ZoneInfo (key = "GMT" )
290283 last_modified_date = datetime .datetime .now (tz = gmt )
291284
292- # See https://github.com/facebook/pyrefly/issues/1897
293- new_target = copy .replace (
294- target , # pyrefly: ignore[bad-argument-type]
295- name = name ,
296- width = width ,
297- active_flag = active_flag ,
298- application_metadata = application_metadata ,
299- image_value = image_value ,
300- last_modified_date = last_modified_date ,
301- )
285+ if isinstance (target , ImageTarget ):
286+ width = request_json .get ("width" , target .width )
287+ application_metadata = request_json .get (
288+ "application_metadata" ,
289+ target .application_metadata ,
290+ )
291+ image_value = target .image_value
292+ if "image" in request_json :
293+ image_value = base64 .b64decode (s = request_json ["image" ])
294+ # See https://github.com/facebook/pyrefly/issues/1897
295+ new_target : ImageTarget | VuMarkTarget = copy .replace (
296+ target , # pyrefly: ignore[bad-argument-type]
297+ name = name ,
298+ width = width ,
299+ active_flag = active_flag ,
300+ application_metadata = application_metadata ,
301+ image_value = image_value ,
302+ last_modified_date = last_modified_date ,
303+ )
304+ else :
305+ # See https://github.com/facebook/pyrefly/issues/1897
306+ new_target = copy .replace (
307+ target , # pyrefly: ignore[bad-argument-type]
308+ name = name ,
309+ active_flag = active_flag ,
310+ last_modified_date = last_modified_date ,
311+ )
302312
303313 database .targets .remove (target )
304314 database .targets .add (new_target )
0 commit comments