88import logging
99import os
1010import struct
11+ import sys
1112import tempfile
1213import threading
1314import time
1718from contextlib import contextmanager
1819from pathlib import Path
1920
21+ if sys .version_info >= (3 , 11 ):
22+ from typing import Required
23+ else :
24+ from typing_extensions import Required
25+
2026import requests
2127
2228from . import api_v4 , config , constants , exif_write , types , upload_api_v4 , utils
@@ -65,20 +71,20 @@ class SequenceProgress(T.TypedDict, total=False):
6571 """Progress data at sequence level"""
6672
6773 # Used to check if it is uploaded or not
68- sequence_md5sum : str
74+ sequence_md5sum : Required [ str ]
6975
7076 # Used to resume from the previous upload,
7177 # so it has to an unique identifier (hash) of the upload content
7278 upload_md5sum : str
7379
7480 # File type
75- file_type : str
81+ file_type : Required [ str ]
7682
7783 # How many sequences in total. It's always 1 when uploading Zipfile/BlackVue/CAMM
78- total_sequence_count : int
84+ total_sequence_count : Required [ int ]
7985
8086 # 0-based nth sequence. It is always 0 when uploading Zipfile/BlackVue/CAMM
81- sequence_idx : int
87+ sequence_idx : Required [ int ]
8288
8389 # How many images in the sequence. It's available only when uploading directories/Zipfiles
8490 sequence_image_count : int
@@ -291,20 +297,23 @@ def upload_zipfile(
291297 with zip_path .open ("rb" ) as zip_fp :
292298 sequence_md5sum = cls .extract_sequence_md5sum (zip_fp )
293299
294- sequence_progress : SequenceProgress = {
300+ # Send the copy of the input progress to each upload session, to avoid modifying the original one
301+ mutable_progress : SequenceProgress = {
302+ ** T .cast (SequenceProgress , progress ),
295303 "sequence_image_count" : len (namelist ),
296- "file_type" : types .FileType .ZIP .value ,
297304 "sequence_md5sum" : sequence_md5sum ,
305+ "file_type" : types .FileType .ZIP .value ,
298306 }
299307
300- # Send the copy of the input progress to each upload session, to avoid modifying the original one
301- mutable_progress : dict [str , T .Any ] = {** progress , ** sequence_progress }
302-
303308 with zip_path .open ("rb" ) as zip_fp :
304- file_handle = uploader .upload_stream (zip_fp , progress = mutable_progress )
309+ file_handle = uploader .upload_stream (
310+ zip_fp , progress = T .cast (T .Dict [str , T .Any ], mutable_progress )
311+ )
305312
306313 cluster_id = uploader .finish_upload (
307- file_handle , api_v4 .ClusterFileType .ZIP , progress = mutable_progress
314+ file_handle ,
315+ api_v4 .ClusterFileType .ZIP ,
316+ progress = T .cast (T .Dict [str , T .Any ], mutable_progress ),
308317 )
309318
310319 return cluster_id
@@ -322,14 +331,6 @@ def zip_images_and_upload(
322331 sequences = types .group_and_sort_images (image_metadatas )
323332
324333 for sequence_idx , (sequence_uuid , sequence ) in enumerate (sequences .items ()):
325- sequence_progress : SequenceProgress = {
326- "sequence_idx" : sequence_idx ,
327- "total_sequence_count" : len (sequences ),
328- "sequence_image_count" : len (sequence ),
329- "sequence_uuid" : sequence_uuid ,
330- "file_type" : types .FileType .ZIP .value ,
331- }
332-
333334 try :
334335 _validate_metadatas (sequence )
335336 except Exception as ex :
@@ -343,7 +344,14 @@ def zip_images_and_upload(
343344 yield sequence_uuid , UploadResult (error = ex )
344345 continue
345346
346- sequence_progress ["sequence_md5sum" ] = sequence_md5sum
347+ sequence_progress : SequenceProgress = {
348+ "sequence_idx" : sequence_idx ,
349+ "total_sequence_count" : len (sequences ),
350+ "sequence_image_count" : len (sequence ),
351+ "sequence_uuid" : sequence_uuid ,
352+ "file_type" : types .FileType .ZIP .value ,
353+ "sequence_md5sum" : sequence_md5sum ,
354+ }
347355
348356 mutable_progress : dict [str , T .Any ] = {** progress , ** sequence_progress }
349357
0 commit comments