Skip to content

Commit a1dd46e

Browse files
authored
improve: some upload progress properties are required (#760)
1 parent 5d79955 commit a1dd46e

2 files changed

Lines changed: 31 additions & 22 deletions

File tree

mapillary_tools/upload.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -617,14 +617,15 @@ def _continue_or_fail(ex: Exception) -> Exception:
617617

618618

619619
def _gen_upload_zipfiles(
620-
mly_uploader: uploader.Uploader,
621-
zip_paths: T.Sequence[Path],
620+
mly_uploader: uploader.Uploader, zip_paths: T.Sequence[Path]
622621
) -> T.Generator[tuple[Path, uploader.UploadResult], None, None]:
623622
for idx, zip_path in enumerate(zip_paths):
624623
progress: uploader.SequenceProgress = {
625624
"total_sequence_count": len(zip_paths),
626625
"sequence_idx": idx,
627626
"import_path": str(zip_path),
627+
"file_type": types.FileType.ZIP.value,
628+
"sequence_md5sum": "", # Placeholder, will be set in upload_zipfile
628629
}
629630
try:
630631
cluster_id = uploader.ZipImageSequence.upload_zipfile(

mapillary_tools/uploader.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import logging
99
import os
1010
import struct
11+
import sys
1112
import tempfile
1213
import threading
1314
import time
@@ -17,6 +18,11 @@
1718
from contextlib import contextmanager
1819
from 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+
2026
import requests
2127

2228
from . 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

Comments
 (0)