mapillary-tools 0.14.0b1__py3-none-any.whl → 0.14.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mapillary_tools/__init__.py +1 -1
- mapillary_tools/api_v4.py +66 -263
- mapillary_tools/authenticate.py +46 -38
- mapillary_tools/commands/__main__.py +15 -16
- mapillary_tools/commands/upload.py +33 -4
- mapillary_tools/constants.py +127 -45
- mapillary_tools/exceptions.py +4 -0
- mapillary_tools/exif_read.py +2 -1
- mapillary_tools/exif_write.py +3 -1
- mapillary_tools/geo.py +16 -0
- mapillary_tools/geotag/base.py +6 -2
- mapillary_tools/geotag/factory.py +9 -1
- mapillary_tools/geotag/geotag_images_from_exiftool.py +1 -1
- mapillary_tools/geotag/geotag_images_from_gpx.py +0 -6
- mapillary_tools/geotag/geotag_videos_from_exiftool.py +30 -9
- mapillary_tools/geotag/utils.py +9 -12
- mapillary_tools/geotag/video_extractors/gpx.py +2 -1
- mapillary_tools/geotag/video_extractors/native.py +25 -0
- mapillary_tools/history.py +124 -7
- mapillary_tools/http.py +211 -0
- mapillary_tools/mp4/construct_mp4_parser.py +8 -2
- mapillary_tools/process_geotag_properties.py +31 -27
- mapillary_tools/process_sequence_properties.py +339 -322
- mapillary_tools/sample_video.py +1 -2
- mapillary_tools/serializer/description.py +56 -56
- mapillary_tools/serializer/gpx.py +1 -1
- mapillary_tools/upload.py +201 -205
- mapillary_tools/upload_api_v4.py +57 -47
- mapillary_tools/uploader.py +720 -285
- mapillary_tools/utils.py +57 -5
- {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.1.dist-info}/METADATA +7 -6
- {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.1.dist-info}/RECORD +36 -35
- {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.1.dist-info}/WHEEL +0 -0
- {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.1.dist-info}/entry_points.txt +0 -0
- {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.1.dist-info}/licenses/LICENSE +0 -0
- {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.1.dist-info}/top_level.txt +0 -0
mapillary_tools/utils.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import concurrent.futures
|
|
4
|
+
|
|
3
5
|
import hashlib
|
|
6
|
+
import logging
|
|
4
7
|
import os
|
|
5
8
|
import typing as T
|
|
6
|
-
from multiprocessing import Pool
|
|
7
9
|
from pathlib import Path
|
|
8
10
|
|
|
9
11
|
|
|
@@ -197,6 +199,13 @@ def get_file_size(path: Path) -> int:
|
|
|
197
199
|
return os.path.getsize(path)
|
|
198
200
|
|
|
199
201
|
|
|
202
|
+
def get_file_size_quietly(path: Path) -> int:
|
|
203
|
+
try:
|
|
204
|
+
return get_file_size(path)
|
|
205
|
+
except Exception:
|
|
206
|
+
return 0
|
|
207
|
+
|
|
208
|
+
|
|
200
209
|
TMapIn = T.TypeVar("TMapIn")
|
|
201
210
|
TMapOut = T.TypeVar("TMapOut")
|
|
202
211
|
|
|
@@ -207,14 +216,57 @@ def mp_map_maybe(
|
|
|
207
216
|
num_processes: int | None = None,
|
|
208
217
|
) -> T.Generator[TMapOut, None, None]:
|
|
209
218
|
if num_processes is None:
|
|
210
|
-
|
|
219
|
+
max_workers = None
|
|
211
220
|
disable_multiprocessing = False
|
|
212
221
|
else:
|
|
213
|
-
|
|
222
|
+
max_workers = max(num_processes, 1)
|
|
214
223
|
disable_multiprocessing = num_processes <= 0
|
|
215
224
|
|
|
216
225
|
if disable_multiprocessing:
|
|
217
226
|
yield from map(func, iterable)
|
|
218
227
|
else:
|
|
219
|
-
|
|
220
|
-
|
|
228
|
+
app_logger = logging.getLogger(get_app_name())
|
|
229
|
+
with concurrent.futures.ProcessPoolExecutor(
|
|
230
|
+
max_workers=max_workers,
|
|
231
|
+
initializer=configure_logger,
|
|
232
|
+
initargs=(None, app_logger.getEffectiveLevel()),
|
|
233
|
+
) as executor:
|
|
234
|
+
yield from executor.map(func, iterable)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def configure_logger(
|
|
238
|
+
logger: logging.Logger | None = None, level: int = logging.INFO
|
|
239
|
+
) -> logging.Logger:
|
|
240
|
+
"""Configure logging in each worker process"""
|
|
241
|
+
if logger is None:
|
|
242
|
+
# Root logger if app name is ""
|
|
243
|
+
logger = logging.getLogger(get_app_name())
|
|
244
|
+
|
|
245
|
+
logger.setLevel(level)
|
|
246
|
+
|
|
247
|
+
try:
|
|
248
|
+
# Disable globally for now. TODO Disable it in non-interactive mode only
|
|
249
|
+
raise ImportError
|
|
250
|
+
from rich.console import Console # type: ignore
|
|
251
|
+
from rich.logging import RichHandler # type: ignore
|
|
252
|
+
except ImportError:
|
|
253
|
+
formatter = logging.Formatter(
|
|
254
|
+
"%(asctime)s.%(msecs)03d - %(levelname)-7s - %(message)s",
|
|
255
|
+
datefmt="%H:%M:%S",
|
|
256
|
+
)
|
|
257
|
+
handler: logging.Handler = logging.StreamHandler()
|
|
258
|
+
handler.setFormatter(formatter)
|
|
259
|
+
else:
|
|
260
|
+
handler = RichHandler(console=Console(stderr=True), rich_tracebacks=True) # type: ignore
|
|
261
|
+
|
|
262
|
+
logger.addHandler(handler)
|
|
263
|
+
|
|
264
|
+
return logger
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def get_app_name() -> str:
|
|
268
|
+
if __name__:
|
|
269
|
+
return __name__.split(".")[0]
|
|
270
|
+
else:
|
|
271
|
+
# Rare case
|
|
272
|
+
return ""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mapillary_tools
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.1
|
|
4
4
|
Summary: Mapillary Image/Video Import Pipeline
|
|
5
5
|
Author-email: Mapillary <support@mapillary.com>
|
|
6
6
|
License: BSD
|
|
@@ -22,11 +22,12 @@ Requires-Python: >=3.9
|
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
Requires-Dist: appdirs<2.0.0,>=1.4.4
|
|
25
|
-
Requires-Dist: construct
|
|
26
|
-
Requires-Dist: exifread
|
|
27
|
-
Requires-Dist: gpxpy
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
25
|
+
Requires-Dist: construct~=2.10.0
|
|
26
|
+
Requires-Dist: exifread~=3.0
|
|
27
|
+
Requires-Dist: gpxpy~=1.6.0
|
|
28
|
+
Requires-Dist: humanize>=4.12.3
|
|
29
|
+
Requires-Dist: jsonschema~=4.17.0
|
|
30
|
+
Requires-Dist: piexif~=1.1
|
|
30
31
|
Requires-Dist: pynmea2<2.0.0,>=1.12.0
|
|
31
32
|
Requires-Dist: requests[socks]<3.0.0,>=2.20.0
|
|
32
33
|
Requires-Dist: tqdm<5.0,>=4.0
|
|
@@ -1,75 +1,76 @@
|
|
|
1
|
-
mapillary_tools/__init__.py,sha256=
|
|
2
|
-
mapillary_tools/api_v4.py,sha256=
|
|
3
|
-
mapillary_tools/authenticate.py,sha256=
|
|
1
|
+
mapillary_tools/__init__.py,sha256=91RNgd9bTuNlioixZy3CssJc8LG26WWwcNDinmjqx20,19
|
|
2
|
+
mapillary_tools/api_v4.py,sha256=bckAU_atUs0pSuqySeY4W0Rs011a21ClJHo_mbbcXXw,4864
|
|
3
|
+
mapillary_tools/authenticate.py,sha256=JXmoTPcAyv9difceKIupXz7vyuLcNZ_AnxLrUVdtPPs,11745
|
|
4
4
|
mapillary_tools/blackvue_parser.py,sha256=ea2JtU9MWU6yB0bQlF970_Of0bJVofSTRq1P30WKW-0,5623
|
|
5
5
|
mapillary_tools/config.py,sha256=97zsyPnZXGincEkM__c6UNWH25EMTtRKZGsp6vBpHy8,3326
|
|
6
|
-
mapillary_tools/constants.py,sha256=
|
|
7
|
-
mapillary_tools/exceptions.py,sha256=
|
|
8
|
-
mapillary_tools/exif_read.py,sha256=
|
|
9
|
-
mapillary_tools/exif_write.py,sha256=
|
|
6
|
+
mapillary_tools/constants.py,sha256=fk5HBczTBGyDOKQy-grzlf0SafiGwggdF8Ota13Rk0k,6235
|
|
7
|
+
mapillary_tools/exceptions.py,sha256=uxTgBEfXgGxT0XNGRIAZ5mjtdqsCYfP6gnaXAK_ewBM,2483
|
|
8
|
+
mapillary_tools/exif_read.py,sha256=nAbZDYAIBx3g4n6QIGKXX3s-A3SkfuvZQBInDrXMlKk,32220
|
|
9
|
+
mapillary_tools/exif_write.py,sha256=I9GSs8KRd28QyKPVNHuxesSVbBvahHqKBS3nw9HoLsg,8830
|
|
10
10
|
mapillary_tools/exiftool_read.py,sha256=5uatYE9mgbg2d9NAnPfX22nSRBjXhJ9ayMqNMd4QwGM,15779
|
|
11
11
|
mapillary_tools/exiftool_read_video.py,sha256=23O_bjUOVq6j7i3xMz6fY-XIEsjinsCejK_0nrbFyOM,16084
|
|
12
12
|
mapillary_tools/exiftool_runner.py,sha256=g4gSyqeh3D6EnMJ-c3s-RnO2EP_jD354Qkaz0Y-4D04,1658
|
|
13
13
|
mapillary_tools/ffmpeg.py,sha256=akpvvsjAR-Iiv-hOrUoJvPM9vUU3JqMQ5HJL1_NgwB8,22908
|
|
14
|
-
mapillary_tools/geo.py,sha256=
|
|
15
|
-
mapillary_tools/history.py,sha256=
|
|
14
|
+
mapillary_tools/geo.py,sha256=mWaESfDf_zHmyvnt5aVFro4FGrjiULNsuZ6HfGUWvSA,11009
|
|
15
|
+
mapillary_tools/history.py,sha256=LP6e0zEYVBwRGUbFaGoE_AaBIEdpB4XrZsg9qwJVvRI,5344
|
|
16
|
+
mapillary_tools/http.py,sha256=-df_oGyImO2AOmPnXcKMcztlL4LOZLArE6ki81NMGUA,6411
|
|
16
17
|
mapillary_tools/ipc.py,sha256=DwWQb9hNshx0bg0Fo5NjY0mXjs-FkbR6tIQmjMgMtmg,1089
|
|
17
|
-
mapillary_tools/process_geotag_properties.py,sha256=
|
|
18
|
-
mapillary_tools/process_sequence_properties.py,sha256=
|
|
19
|
-
mapillary_tools/sample_video.py,sha256=
|
|
18
|
+
mapillary_tools/process_geotag_properties.py,sha256=lF2Po83BAGWlLTtS5AFf6MLLTm-kiImD8SW-tWIbyZ0,14419
|
|
19
|
+
mapillary_tools/process_sequence_properties.py,sha256=n4VjQHrgVjksIr3WoBviRhrQIBBDHGXMClolfyz6tu4,24057
|
|
20
|
+
mapillary_tools/sample_video.py,sha256=pKSj1Vc8e5p1XGjykBuKY9XieTOskc-9L3F4L407jDM,13935
|
|
20
21
|
mapillary_tools/telemetry.py,sha256=lL6qQbtOZft4DZZrCNK3njlwHT_30zLyYS_YRN5pgHY,1568
|
|
21
22
|
mapillary_tools/types.py,sha256=pIU2wcxiOUWT5Pd05pgNzY9EVEDlwoldtlF2IIYYvE0,5909
|
|
22
|
-
mapillary_tools/upload.py,sha256=
|
|
23
|
-
mapillary_tools/upload_api_v4.py,sha256=
|
|
24
|
-
mapillary_tools/uploader.py,sha256=
|
|
25
|
-
mapillary_tools/utils.py,sha256=
|
|
23
|
+
mapillary_tools/upload.py,sha256=yLunE66mZqTOiefN47KwO6auuyL5augbODyf5EafKeA,24084
|
|
24
|
+
mapillary_tools/upload_api_v4.py,sha256=VgOf7RhfUuzmlSBUp5CpekKIJ0xQrC0r-r0Ds9-wU4I,7344
|
|
25
|
+
mapillary_tools/uploader.py,sha256=gsXMyNriaFPFzCmtw9wpFSh6tDe4nrYe1agzwiVVehE,39484
|
|
26
|
+
mapillary_tools/utils.py,sha256=cP9idKt4EJqfC0qqOGneSoPNpPiYhaW8VjQ9CLYjESc,8092
|
|
26
27
|
mapillary_tools/camm/camm_builder.py,sha256=ub6Z9ijep8zAo1NOlU51Gxk95kQ2vfN58YgVCLmNMRk,9211
|
|
27
28
|
mapillary_tools/camm/camm_parser.py,sha256=aNHP65hNXYQBWBTfhaj_S5XYzmAHhjwcAfGhbm83__o,18043
|
|
28
29
|
mapillary_tools/commands/__init__.py,sha256=41CFrPLGlG3566uhxssEF3TGAtSpADFPPcDMHbViU0E,171
|
|
29
|
-
mapillary_tools/commands/__main__.py,sha256=
|
|
30
|
+
mapillary_tools/commands/__main__.py,sha256=W4jMlCA1jekytKA9MMn3mhKie2jgRhc00ylOY2lCxiw,4835
|
|
30
31
|
mapillary_tools/commands/authenticate.py,sha256=yqtpHMYzkyBrrchj6MARxB0ywUTfqCEOPkMbkyaO9Ks,1344
|
|
31
32
|
mapillary_tools/commands/process.py,sha256=Japc6_P0B_8HzoM8_82P3_YAiyBBaQZXS9TZF46pbMM,9771
|
|
32
33
|
mapillary_tools/commands/process_and_upload.py,sha256=-RB_86a5xKfQ7Ye79dh6yyJQpZg2xnJZAWOJsUNbUtQ,1041
|
|
33
34
|
mapillary_tools/commands/sample_video.py,sha256=jtnrZrsqqv5eYV1chNTas7RhfbeKBqbAUDUNRFjF01w,3253
|
|
34
|
-
mapillary_tools/commands/upload.py,sha256=
|
|
35
|
+
mapillary_tools/commands/upload.py,sha256=Z06YJ_mZKiBQ1zLojGf6I5t1X4YBcK19sHD-9C0gdXM,3100
|
|
35
36
|
mapillary_tools/commands/video_process.py,sha256=-wQeeIwWXPmy81HQHam5A0huMLRHknkEFa_V1OwElU4,890
|
|
36
37
|
mapillary_tools/commands/video_process_and_upload.py,sha256=hOyq9L9TuD0JcqFSOOxdCdgsBA1iJ6fu1TtDbsUr8sI,1088
|
|
37
38
|
mapillary_tools/commands/zip.py,sha256=DVQuMLpbstwiy5o4pU_fBvM6eORuFjLeySd80AhHKU0,991
|
|
38
39
|
mapillary_tools/geotag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
-
mapillary_tools/geotag/base.py,sha256=
|
|
40
|
-
mapillary_tools/geotag/factory.py,sha256=
|
|
40
|
+
mapillary_tools/geotag/base.py,sha256=GVKorhJcTivvakcUfPzR6KMzRoIK1pxknDlLDqY2XUk,5166
|
|
41
|
+
mapillary_tools/geotag/factory.py,sha256=6CNQRTr9HTmOA65Iz09CVlGJCGdzOeS0sx5QZO_DXPY,10271
|
|
41
42
|
mapillary_tools/geotag/geotag_images_from_exif.py,sha256=a5fDOp4tlEoVNwrOCJBrvSPzu1LbyxL4RNrNDD0tPP0,608
|
|
42
|
-
mapillary_tools/geotag/geotag_images_from_exiftool.py,sha256=
|
|
43
|
-
mapillary_tools/geotag/geotag_images_from_gpx.py,sha256=
|
|
43
|
+
mapillary_tools/geotag/geotag_images_from_exiftool.py,sha256=T_IOWgvieqCpfDUdma7K3qmAilme-wdjYrD4lSOdAM4,5707
|
|
44
|
+
mapillary_tools/geotag/geotag_images_from_gpx.py,sha256=EyhJjpP1L_DPRCX926aKeTvuxFxD-eWVCWgELp0-pzY,6313
|
|
44
45
|
mapillary_tools/geotag/geotag_images_from_gpx_file.py,sha256=HYQkwak32YBDuRrTNiIZOmE3iImCRc22HWWb485WRS4,1121
|
|
45
46
|
mapillary_tools/geotag/geotag_images_from_nmea_file.py,sha256=J8xj6ch9bMPRubJtsRGeb3sb9LyB0ZYy65NPEOVkUe8,1597
|
|
46
47
|
mapillary_tools/geotag/geotag_images_from_video.py,sha256=3NV3-NfSkxT0n_n8Ajqjab24x29H2vL98DpwJqnIvT8,4411
|
|
47
|
-
mapillary_tools/geotag/geotag_videos_from_exiftool.py,sha256=
|
|
48
|
+
mapillary_tools/geotag/geotag_videos_from_exiftool.py,sha256=Splhtv21JvrbFPVuKycf5wen0wOJ0zqOWk8d4aSw-ys,5345
|
|
48
49
|
mapillary_tools/geotag/geotag_videos_from_gpx.py,sha256=IoV7asxl7dojF1lftvohm1jK_LboFg_mBz25GiV_CsY,1653
|
|
49
50
|
mapillary_tools/geotag/geotag_videos_from_video.py,sha256=T8XS4lVF2Wz4eDXNi5Vt076M5dxjxJXibVrWhqVvErs,863
|
|
50
51
|
mapillary_tools/geotag/options.py,sha256=0CSQUuhVE-WdAVQXWXjwMtxujW1yB6yxRkFmVKH8LkQ,5092
|
|
51
|
-
mapillary_tools/geotag/utils.py,sha256=
|
|
52
|
+
mapillary_tools/geotag/utils.py,sha256=tixXiN3uda2HuMnuXVu4xapgoSzZ86kNlJJQ66QERk0,1588
|
|
52
53
|
mapillary_tools/geotag/image_extractors/base.py,sha256=XoNrLCbJtd-MN-snbhv6zyr6zBfJRoJkntV0ptrh6qg,358
|
|
53
54
|
mapillary_tools/geotag/image_extractors/exif.py,sha256=cCUegbFqWxjAP4oOP1nZmwoJISWeKgjGO8h_t7nucHs,2079
|
|
54
55
|
mapillary_tools/geotag/image_extractors/exiftool.py,sha256=zokJmf-D2rPvASRJs3dZzEu7j82igpMOr4SE6Z1nsVg,497
|
|
55
56
|
mapillary_tools/geotag/video_extractors/base.py,sha256=KxyKxoh_mV-XBnJq3dSzNEt2rQqZAKjmS3GazsdYbnc,350
|
|
56
57
|
mapillary_tools/geotag/video_extractors/exiftool.py,sha256=mH9arsWBaArYhNMxnrRpoEa3YrMjSpCiZaz-baJRMCo,2305
|
|
57
|
-
mapillary_tools/geotag/video_extractors/gpx.py,sha256=
|
|
58
|
-
mapillary_tools/geotag/video_extractors/native.py,sha256=
|
|
58
|
+
mapillary_tools/geotag/video_extractors/gpx.py,sha256=1JDuGLgp3wpaAqfq3ln4DMsVt820dK5HZ3VfJnok98c,3823
|
|
59
|
+
mapillary_tools/geotag/video_extractors/native.py,sha256=_xmTQ6nrvdwkadMmIxrhw6rvGTGwQVmrdSkYLhhV1SM,5786
|
|
59
60
|
mapillary_tools/gpmf/gpmf_gps_filter.py,sha256=7cg8wEjC1DrujKY76FZguXsaPqTRkG9-t32OeuOJQIc,2755
|
|
60
61
|
mapillary_tools/gpmf/gpmf_parser.py,sha256=uOVXkwJxC3Y2YfTdzUDpt7Bh0pdVqa5u0WUuv7pEJEs,24670
|
|
61
62
|
mapillary_tools/gpmf/gps_filter.py,sha256=zhXkuvr0Dd1bxGTYBwvk6P7xasY_RLuWjHaX7CdBayc,3796
|
|
62
63
|
mapillary_tools/mp4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
|
-
mapillary_tools/mp4/construct_mp4_parser.py,sha256=
|
|
64
|
+
mapillary_tools/mp4/construct_mp4_parser.py,sha256=jS8fOgSByqieXA6C5ZqobaI0bK17U_YAkiWEUK_8j4E,17286
|
|
64
65
|
mapillary_tools/mp4/io_utils.py,sha256=KZaJTlgFS27Oh3pcA5MKXYFoCifqgFaEZJyU6lb1jc4,5416
|
|
65
66
|
mapillary_tools/mp4/mp4_sample_parser.py,sha256=0ILTq8M6mXFTI3agKgljpvO9uYa7HXGUGZpdHT8a6ac,11547
|
|
66
67
|
mapillary_tools/mp4/simple_mp4_builder.py,sha256=9TUGk1hzI6mQFN1P30jwHL3dCYz3Zz7rsm8UBvMAqMc,12734
|
|
67
68
|
mapillary_tools/mp4/simple_mp4_parser.py,sha256=g3vvPhBoNu7anhVzC5_XQCV7IwfRWro1vJ6d6GyDkHE,6315
|
|
68
|
-
mapillary_tools/serializer/description.py,sha256=
|
|
69
|
-
mapillary_tools/serializer/gpx.py,sha256=
|
|
70
|
-
mapillary_tools-0.14.
|
|
71
|
-
mapillary_tools-0.14.
|
|
72
|
-
mapillary_tools-0.14.
|
|
73
|
-
mapillary_tools-0.14.
|
|
74
|
-
mapillary_tools-0.14.
|
|
75
|
-
mapillary_tools-0.14.
|
|
69
|
+
mapillary_tools/serializer/description.py,sha256=FB-DawgHVW5M2e81Uo921bY7DQv9fogXF3QMilpmEhQ,18473
|
|
70
|
+
mapillary_tools/serializer/gpx.py,sha256=_xx6gHjaWHrlXaUpB5GGBrbRKzbExFyIzWWAH-CvksI,4383
|
|
71
|
+
mapillary_tools-0.14.1.dist-info/licenses/LICENSE,sha256=l2D8cKfFmmJq_wcVq_JElPJrlvWQOzNWx7gMLINucxc,1292
|
|
72
|
+
mapillary_tools-0.14.1.dist-info/METADATA,sha256=NmnszTprFtSwwR7VYc2kwUl3SYOiE9ClmQ5TWMPyA80,22200
|
|
73
|
+
mapillary_tools-0.14.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
74
|
+
mapillary_tools-0.14.1.dist-info/entry_points.txt,sha256=A3f3LP-BO_P-U8Y29QfpT4jx6Mjk3sXjTi2Yew4bvj8,75
|
|
75
|
+
mapillary_tools-0.14.1.dist-info/top_level.txt,sha256=FbDkMgOrt1S70ho1WSBrOwzKOSkJFDwwqFOoY5-527s,16
|
|
76
|
+
mapillary_tools-0.14.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|