mapillary-tools 0.14.0b1__py3-none-any.whl → 0.14.2__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.
Files changed (38) hide show
  1. mapillary_tools/__init__.py +1 -1
  2. mapillary_tools/api_v4.py +66 -263
  3. mapillary_tools/authenticate.py +47 -39
  4. mapillary_tools/commands/__main__.py +15 -16
  5. mapillary_tools/commands/upload.py +33 -4
  6. mapillary_tools/config.py +5 -0
  7. mapillary_tools/constants.py +127 -45
  8. mapillary_tools/exceptions.py +4 -0
  9. mapillary_tools/exif_read.py +2 -1
  10. mapillary_tools/exif_write.py +3 -1
  11. mapillary_tools/geo.py +16 -0
  12. mapillary_tools/geotag/base.py +6 -2
  13. mapillary_tools/geotag/factory.py +9 -1
  14. mapillary_tools/geotag/geotag_images_from_exiftool.py +1 -1
  15. mapillary_tools/geotag/geotag_images_from_gpx.py +0 -6
  16. mapillary_tools/geotag/geotag_videos_from_exiftool.py +30 -9
  17. mapillary_tools/geotag/options.py +4 -1
  18. mapillary_tools/geotag/utils.py +9 -12
  19. mapillary_tools/geotag/video_extractors/gpx.py +2 -1
  20. mapillary_tools/geotag/video_extractors/native.py +25 -0
  21. mapillary_tools/history.py +124 -7
  22. mapillary_tools/http.py +211 -0
  23. mapillary_tools/mp4/construct_mp4_parser.py +8 -2
  24. mapillary_tools/process_geotag_properties.py +35 -38
  25. mapillary_tools/process_sequence_properties.py +339 -322
  26. mapillary_tools/sample_video.py +1 -2
  27. mapillary_tools/serializer/description.py +68 -58
  28. mapillary_tools/serializer/gpx.py +1 -1
  29. mapillary_tools/upload.py +202 -207
  30. mapillary_tools/upload_api_v4.py +57 -47
  31. mapillary_tools/uploader.py +728 -285
  32. mapillary_tools/utils.py +57 -5
  33. {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.2.dist-info}/METADATA +7 -6
  34. {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.2.dist-info}/RECORD +38 -37
  35. {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.2.dist-info}/WHEEL +0 -0
  36. {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.2.dist-info}/entry_points.txt +0 -0
  37. {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.2.dist-info}/licenses/LICENSE +0 -0
  38. {mapillary_tools-0.14.0b1.dist-info → mapillary_tools-0.14.2.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
- pool_num_processes = None
219
+ max_workers = None
211
220
  disable_multiprocessing = False
212
221
  else:
213
- pool_num_processes = max(num_processes, 1)
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
- with Pool(processes=pool_num_processes) as pool:
220
- yield from pool.imap(func, iterable)
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.0b1
3
+ Version: 0.14.2
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<3.0.0,>=2.10.0
26
- Requires-Dist: exifread==2.3.2
27
- Requires-Dist: gpxpy<1.6.0,>=1.5.0
28
- Requires-Dist: jsonschema~=4.17.3
29
- Requires-Dist: piexif==1.1.3
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=BXYNPTo5QIOW_UpAqv3arB1SDKpH8qZZAzzNEEAG4Io,21
2
- mapillary_tools/api_v4.py,sha256=2Xb72FcddR0KEohH_zulRlHaGzb1BgqYt84r0IiHr4c,10139
3
- mapillary_tools/authenticate.py,sha256=rO39j--CSGTXnYWOKOgkXKvK7l7p7Nnh1bnbihDyQ_U,11094
1
+ mapillary_tools/__init__.py,sha256=qdi1NvyXrEYAkFGfNSU2jMM-Ua-ehuWizcwvW341obw,19
2
+ mapillary_tools/api_v4.py,sha256=bckAU_atUs0pSuqySeY4W0Rs011a21ClJHo_mbbcXXw,4864
3
+ mapillary_tools/authenticate.py,sha256=mmaOwjQ444DcX4lRw2ms3naBg5Y_xwIJAIWeVdsQfqM,11742
4
4
  mapillary_tools/blackvue_parser.py,sha256=ea2JtU9MWU6yB0bQlF970_Of0bJVofSTRq1P30WKW-0,5623
5
- mapillary_tools/config.py,sha256=97zsyPnZXGincEkM__c6UNWH25EMTtRKZGsp6vBpHy8,3326
6
- mapillary_tools/constants.py,sha256=KvTizvc4PLQhU7RDB3Eabgr2B4cIvRfV4mCM05YeB9Y,3859
7
- mapillary_tools/exceptions.py,sha256=P8vEh3pfOqyzJgOiQiRAcWsZTrcawjic7i4v3k335tM,2411
8
- mapillary_tools/exif_read.py,sha256=gagyRv06RkZPRHQhyV-5-uQzxHgxOsVqUX2aC8QmCyM,32145
9
- mapillary_tools/exif_write.py,sha256=Ue0ngLKCfuLQM7X4h5ETjSInUDcyEBWOR6v8ko7DJ1o,8769
5
+ mapillary_tools/config.py,sha256=LDxQoL2StjLGPefCN0y67nhIDN3xSE6Qn8G-tWC-oGA,3421
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=MSfkjSAgTAeuBqncQ8-QXvDuJ7ar7bTt5P_e9HDIgVs,10604
15
- mapillary_tools/history.py,sha256=5Zk4iXSXny9kImzOKrnZmZ3sDjXtCcnJC5pzqHcf-Vk,1753
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=ND4Mz8NIIhbiD0aFk4Eo33WRpt3VYwCBbOBaxmP-rbU,14246
18
- mapillary_tools/process_sequence_properties.py,sha256=XqddHPsj5EjIKbu8omqPcufWdEbrMS_MNf8se5DXL1M,23480
19
- mapillary_tools/sample_video.py,sha256=gViQQ4CSHihzk42kGq_Rx4sr9sBPsGvPXXx2Bgj5grU,13980
18
+ mapillary_tools/process_geotag_properties.py,sha256=3EaVvjfKB-O38OjopBcxeEdP6qI5IPIxqmO6isjcXKM,14205
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=s29bRwYuaZuTuy3TIBspgCwA8ueYN-RiDvOFkWI-kfY,24411
23
- mapillary_tools/upload_api_v4.py,sha256=4aw0uMkKL-zhQ-jPv0GgDvnYSX1DA8zRk4TOFyU9EJA,7753
24
- mapillary_tools/uploader.py,sha256=KUEwHdIZ8xN2JMUvUG--T_S_VgREJuvARqNWsnPpKsk,23202
25
- mapillary_tools/utils.py,sha256=ft-TrqgwWq1a-HpQqnCWIortZbjjTOywllPi8HBA3FU,6642
23
+ mapillary_tools/upload.py,sha256=XejAgmVW4Y33MiQ2g-shvHZA_zXTekEsOUHUHNx2AE4,24047
24
+ mapillary_tools/upload_api_v4.py,sha256=VgOf7RhfUuzmlSBUp5CpekKIJ0xQrC0r-r0Ds9-wU4I,7344
25
+ mapillary_tools/uploader.py,sha256=Rw-1AkxE4TnddJNU6EW--9wmKYRqHbcTeheujdaluiM,39813
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=5gwngScbvrSNF2S1CA5w_qZgxW_kFevu5NQ89U9u1ZE,5046
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=YnA1iSvNcFeV7kMs1p4TdaPBUWUFYb7X-vFhQeSz0eI,2005
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=19-3P5nbFehOxacTT042nQUITzGnXndgnW_mXLO5q9s,4948
40
- mapillary_tools/geotag/factory.py,sha256=Yn8bf0_uA_ukF1Od_yrFIkBYnO0EFq-uvsVrbO2FUrM,9967
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=TTJb9tq1kYSPn_gwDDAcviueYwoUIbIEoLl-abAB8T8,5716
43
- mapillary_tools/geotag/geotag_images_from_gpx.py,sha256=xh7lqQT-e3PMIisdRIkkfbWP-GrCRZF0KAo03V0ixEI,6401
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=ge29zKj9jLQFLmmzb0IyE69wenuwJ3XGmMyANT0UIAI,4288
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
- mapillary_tools/geotag/options.py,sha256=0CSQUuhVE-WdAVQXWXjwMtxujW1yB6yxRkFmVKH8LkQ,5092
51
- mapillary_tools/geotag/utils.py,sha256=0DenLVCLP-GZdk0rCFP0V1tjMGK4XAvYro3I_1RKgCA,1733
51
+ mapillary_tools/geotag/options.py,sha256=AgINCSBlxT9Etfu05zuzunWgcCHVWdFjWVL7oBduL4g,5166
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=jE3UQs6rTzIElPBvS7eKgR83JAZnbteXM1V5TbNCdyY,3753
58
- mapillary_tools/geotag/video_extractors/native.py,sha256=4I0Vjo3xCaYuJktxUGHalEv-eW5h-4fHzgwhjImEuWs,4572
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=ArJ5C8iWJhHNPFkN048DXh6EwQ8LMfnTMwoNlKV9NoI,17191
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=ZYg68FoA1oA6PPXRMx9RyxUCoCh3mKpG7cYTlcO3xKk,18368
69
- mapillary_tools/serializer/gpx.py,sha256=fwnJ0KF8d8IWRoIGM70NrYDmS89akC3tyRnY3fYc-R8,4344
70
- mapillary_tools-0.14.0b1.dist-info/licenses/LICENSE,sha256=l2D8cKfFmmJq_wcVq_JElPJrlvWQOzNWx7gMLINucxc,1292
71
- mapillary_tools-0.14.0b1.dist-info/METADATA,sha256=jz6asGlxY7OFZbmqSHQ1_SxATrzJWMnPsElBl618HkE,22188
72
- mapillary_tools-0.14.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
73
- mapillary_tools-0.14.0b1.dist-info/entry_points.txt,sha256=A3f3LP-BO_P-U8Y29QfpT4jx6Mjk3sXjTi2Yew4bvj8,75
74
- mapillary_tools-0.14.0b1.dist-info/top_level.txt,sha256=FbDkMgOrt1S70ho1WSBrOwzKOSkJFDwwqFOoY5-527s,16
75
- mapillary_tools-0.14.0b1.dist-info/RECORD,,
69
+ mapillary_tools/serializer/description.py,sha256=ECnQxC-1LOgkAKE5qFi9Y2KuCeH8KPUjjNFDiwebjvo,18647
70
+ mapillary_tools/serializer/gpx.py,sha256=_xx6gHjaWHrlXaUpB5GGBrbRKzbExFyIzWWAH-CvksI,4383
71
+ mapillary_tools-0.14.2.dist-info/licenses/LICENSE,sha256=l2D8cKfFmmJq_wcVq_JElPJrlvWQOzNWx7gMLINucxc,1292
72
+ mapillary_tools-0.14.2.dist-info/METADATA,sha256=rEmF5Twbh9m-zYNF1klQjGLOIrmiv5mCAQnbOb1Z8GE,22200
73
+ mapillary_tools-0.14.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
74
+ mapillary_tools-0.14.2.dist-info/entry_points.txt,sha256=A3f3LP-BO_P-U8Y29QfpT4jx6Mjk3sXjTi2Yew4bvj8,75
75
+ mapillary_tools-0.14.2.dist-info/top_level.txt,sha256=FbDkMgOrt1S70ho1WSBrOwzKOSkJFDwwqFOoY5-527s,16
76
+ mapillary_tools-0.14.2.dist-info/RECORD,,