geo-activity-playground 1.5.1__py3-none-any.whl → 1.6.0__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.
@@ -13,7 +13,7 @@ from .datamodel import Activity
13
13
  from .datamodel import DB
14
14
  from .missing_values import some
15
15
  from .tiles import compute_tile_float
16
- from .time_conversion import get_country_timezone
16
+ from .time_conversion import get_timezone
17
17
 
18
18
  logger = logging.getLogger(__name__)
19
19
 
@@ -26,9 +26,7 @@ def enrichment_set_timezone(
26
26
  ), f"You cannot import an activity without points. {activity=}"
27
27
  latitude, longitude = time_series[["latitude", "longitude"]].iloc[0].to_list()
28
28
  if activity.iana_timezone is None or activity.start_country is None:
29
- country, tz_str = get_country_timezone(latitude, longitude)
30
- activity.iana_timezone = tz_str
31
- activity.start_country = country
29
+ activity.iana_timezone = get_timezone(latitude, longitude)
32
30
  return True
33
31
  else:
34
32
  return False
@@ -23,10 +23,14 @@ def get_metadata_from_image(path: pathlib.Path) -> dict:
23
23
  except KeyError:
24
24
  pass
25
25
  try:
26
- metadata["time"] = dateutil.parser.parse(
27
- str(tags["EXIF DateTimeOriginal"])
28
- + str(tags.get("EXIF OffsetTime", "+00:00"))
26
+ date_time_original = str(tags["EXIF DateTimeOriginal"]) + str(
27
+ tags.get("EXIF OffsetTime", "+00:00")
28
+ ).replace(":", "")
29
+ print(f"Extracted date: {date_time_original}")
30
+ metadata["time"] = datetime.datetime.strptime(
31
+ date_time_original, "%Y:%m:%d %H:%M:%S%z"
29
32
  ).astimezone(zoneinfo.ZoneInfo("UTC"))
33
+
30
34
  except KeyError:
31
35
  pass
32
36
 
@@ -1,7 +1,13 @@
1
1
  from .time_conversion import get_country_timezone
2
+ from .time_conversion import get_timezone
2
3
 
3
4
 
4
5
  def test_time_zone_from_location() -> None:
5
6
  country, iana_timezone = get_country_timezone(50, 7)
6
7
  assert country == "Germany"
7
8
  assert iana_timezone == "Europe/Berlin"
9
+
10
+
11
+ def test_timezone_finder() -> None:
12
+ iana_timezone = get_timezone(50, 7)
13
+ assert iana_timezone == "Europe/Berlin"
@@ -2,8 +2,10 @@ import datetime
2
2
  import json
3
3
  import logging
4
4
  import zoneinfo
5
+ from typing import Optional
5
6
 
6
7
  import requests
8
+ import timezonefinder
7
9
 
8
10
  from .paths import USER_CACHE_DIR
9
11
 
@@ -40,3 +42,8 @@ def get_country_timezone(latitude: float, longitude: float) -> tuple[str, str]:
40
42
  with open(cache_file, "w") as f:
41
43
  json.dump(data, f)
42
44
  return data["location"], data["iana_timezone"]
45
+
46
+
47
+ def get_timezone(latitude: float, longitude: float) -> Optional[str]:
48
+ tf = timezonefinder.TimezoneFinder() # reuse
49
+ return tf.timezone_at(lng=longitude, lat=latitude)
@@ -4,6 +4,7 @@ import itertools
4
4
  import logging
5
5
  import pathlib
6
6
  import pickle
7
+ import zoneinfo
7
8
  from typing import Iterator
8
9
  from typing import Optional
9
10
  from typing import TypedDict
@@ -272,6 +273,10 @@ def _process_activity(
272
273
  def _tiles_from_points(
273
274
  time_series: pd.DataFrame, zoom: int
274
275
  ) -> Iterator[tuple[datetime.datetime, int, int]]:
276
+ # Some people haven't localized their time series yet. This breaks the tile history part. Just assume that it is UTC, should be good enough for tiles.
277
+ if time_series["time"].dt.tz is None:
278
+ time_series = time_series.copy()
279
+ time_series["time"].dt.tz_localize(zoneinfo.ZoneInfo("UTC"))
275
280
  xf = time_series["x"] * 2**zoom
276
281
  yf = time_series["y"] * 2**zoom
277
282
  for t1, x1, y1, x2, y2, s1, s2 in zip(
@@ -138,10 +138,9 @@ def read_fit_activity(path: pathlib.Path, open) -> tuple[Activity, pd.DataFrame]
138
138
  try:
139
139
  row["speed"] = values["enhanced_speed"] * factor
140
140
  except TypeError as e:
141
- # https://github.com/martin-ueding/geo-activity-playground/issues/301
142
- raise ActivityParseError(
141
+ logger.warning(
143
142
  f'Cannot work with {values["enhanced_speed"]!r}, {factor!r}'
144
- ) from e
143
+ )
145
144
  if "grade" in fields:
146
145
  row["grade"] = values["grade"]
147
146
  if "temperature" in fields:
@@ -4,6 +4,7 @@ import re
4
4
  import traceback
5
5
 
6
6
  import sqlalchemy
7
+ from tqdm import tqdm
7
8
 
8
9
  from ..core.activities import ActivityRepository
9
10
  from ..core.config import Config
@@ -37,8 +38,22 @@ def import_from_directory(
37
38
  and not path.stem.startswith(".")
38
39
  and not path.suffix in config.ignore_suffixes
39
40
  ]
41
+ activity_paths.sort()
40
42
 
41
- for i, activity_path in enumerate(activity_paths):
43
+ paths_to_import = [
44
+ activity_path
45
+ for activity_path in tqdm(
46
+ activity_paths, desc="Scanning for new files", delay=1
47
+ )
48
+ if DB.session.scalar(
49
+ sqlalchemy.select(Activity).filter(Activity.path == str(activity_path))
50
+ )
51
+ is None
52
+ ]
53
+
54
+ for i, activity_path in enumerate(
55
+ tqdm(paths_to_import, desc="Importing activity files", delay=0)
56
+ ):
42
57
  with DB.session.no_autoflush:
43
58
  activity = DB.session.scalar(
44
59
  sqlalchemy.select(Activity).filter(Activity.path == str(activity_path))
@@ -198,6 +198,8 @@ def import_from_strava_checkout(config: Config) -> None:
198
198
 
199
199
  activity_file = checkout_path / row["Filename"]
200
200
 
201
+ logger.info(f"Importing '{activity_file}' …")
202
+
201
203
  try:
202
204
  activity, time_series = read_activity(activity_file)
203
205
  except ActivityParseError as e:
@@ -307,7 +307,7 @@ def make_explorer_blueprint(
307
307
  if color is None:
308
308
  result = grayscale
309
309
  else:
310
- result = np.broadcast_to(color, grayscale.shape)
310
+ result = np.broadcast_to(color, grayscale.shape).copy()
311
311
 
312
312
  if x % factor == 0:
313
313
  result[:, 0, :] = 0.5
@@ -0,0 +1,39 @@
1
+ var map = L.map('activity-map', {
2
+ fullscreenControl: true
3
+ });
4
+ L.tileLayer('/tile/pastel/{z}/{x}/{y}.png', {
5
+ maxZoom: 19,
6
+ attribution: map_tile_attribution
7
+ }).addTo(map);
8
+
9
+ let copy_to_input = function (value, input) {
10
+ document.getElementById(input).value = value;
11
+ }
12
+
13
+ let layer = L.geoJSON(color_line_geojson, {
14
+ pointToLayer: function (feature, lat_lon) {
15
+ let p = feature.properties
16
+
17
+ let marker = null
18
+ if (p.markerType == "circle") {
19
+ marker = L.circleMarker(lat_lon, p.markerStyle)
20
+ } else {
21
+ marker = L.marker(lat_lon)
22
+ }
23
+
24
+ let text = ''
25
+ if (p.name) {
26
+ text += `<button class="btn btn-primary" onclick="copy_to_input(${p.name}, 'begin')">Use as Begin</button>`
27
+ text += ' '
28
+ text += `<button class="btn btn-primary" onclick="copy_to_input(${p.name}+1, 'end')">Use as End</button>`
29
+ }
30
+ if (text) {
31
+ marker = marker.bindPopup(text)
32
+ }
33
+
34
+ return marker
35
+ }
36
+ })
37
+
38
+ layer.addTo(map)
39
+ map.fitBounds(layer.getBounds());
@@ -9,47 +9,12 @@
9
9
 
10
10
  <a href="{{ url_for('.show', id=activity['id']) }}" class="btn btn-primary btn-small">Back</a>
11
11
 
12
-
13
12
  <div id="activity-map" style="height: 600px;" class="mb-3"></div>
14
13
  <script>
15
- var map = L.map('activity-map', {
16
- fullscreenControl: true
17
- });
18
- L.tileLayer('/tile/pastel/{z}/{x}/{y}.png', {
19
- maxZoom: 19,
20
- attribution: '{{ map_tile_attribution|safe }}'
21
- }).addTo(map);
22
-
23
-
24
- let layer = L.geoJSON({{ color_line_geojson| safe }}, {
25
- pointToLayer: function (feature, lat_lon) {
26
- let p = feature.properties
27
-
28
- let marker = null
29
- if (p.markerType == "circle") {
30
- marker = L.circleMarker(lat_lon, p.markerStyle)
31
- } else {
32
- marker = L.marker(lat_lon)
33
- }
34
-
35
- let text = ''
36
- if (p.name) {
37
- text += `<p><b>${p.name}</b></p>`
38
- }
39
- if (p.description) {
40
- text += p.description
41
- }
42
- if (text) {
43
- marker = marker.bindPopup(text)
44
- }
45
-
46
- return marker
47
- }
48
- })
49
-
50
- layer.addTo(map)
51
- map.fitBounds(layer.getBounds());
14
+ var map_tile_attribution = '{{ map_tile_attribution }}';
15
+ var color_line_geojson = {{ color_line_geojson | safe }};
52
16
  </script>
17
+ <script src="/static/activity-trim.js"></script>
53
18
 
54
19
  <form method="POST">
55
20
  <div class="mb-3">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geo-activity-playground
3
- Version: 1.5.1
3
+ Version: 1.6.0
4
4
  Summary: Analysis of geo data activities like rides, runs or hikes.
5
5
  License: MIT
6
6
  Author: Martin Ueding
@@ -37,6 +37,7 @@ Requires-Dist: shapely (>=2.0.5,<3.0.0)
37
37
  Requires-Dist: sqlalchemy (>=2.0.40,<3.0.0)
38
38
  Requires-Dist: stravalib (>=2.0,<3.0)
39
39
  Requires-Dist: tcxreader (>=0.4.5,<0.5.0)
40
+ Requires-Dist: timezonefinder (>=6.5.9,<7.0.0)
40
41
  Requires-Dist: tomli (>=2.0.1,<3.0.0) ; python_version < "3.11"
41
42
  Requires-Dist: tqdm (>=4.64.0,<5.0.0)
42
43
  Requires-Dist: vegafusion-python-embed (>=1.4.3,<2.0.0)
@@ -22,14 +22,14 @@ geo_activity_playground/core/config.py,sha256=mmdMQ5iCLNGnAlriT1ETEVS-gM6Aq_9sg2
22
22
  geo_activity_playground/core/coordinates.py,sha256=rW_OmMRpTUyIsQwrT6mgT9Y6uPGuwqTo5XDDMS7mGuo,1140
23
23
  geo_activity_playground/core/copernicus_dem.py,sha256=t6Bc9fsyGyx1awdePXvlN-Zc-tiT2eGSJ80SV5B1Z9A,2944
24
24
  geo_activity_playground/core/datamodel.py,sha256=PRqxKlExXxRXkHYIJeNsRr1DZQmdzAwa3PLyivJoix8,15983
25
- geo_activity_playground/core/enrichment.py,sha256=pw9VEyDAtdNbjQ1HOPYyXCXT8SLL5i3Cp6KWjKK7puM,8708
25
+ geo_activity_playground/core/enrichment.py,sha256=b27E_KK30xjq8MuGFZyIpKzz8fO2LwLVaGGTP0mb5N0,8618
26
26
  geo_activity_playground/core/export.py,sha256=ayOmhWL72263oP9NLIZRYCg_Db0GLUFhgNIL_MCrV-E,4435
27
27
  geo_activity_playground/core/heart_rate.py,sha256=-S3WAhS7AOywrw_Lk5jfuo_fu6zvZQ1VtjwEKSycWpU,1542
28
28
  geo_activity_playground/core/meta_search.py,sha256=nyvCuR7v0pd6KjA8W5Kr71bBafRdE_ol7uSFRJs4eAM,6662
29
29
  geo_activity_playground/core/missing_values.py,sha256=HjonaLV0PFMICnuMrbdUNnK9uy_8PBh_RxI5GuEMQK0,250
30
30
  geo_activity_playground/core/parametric_plot.py,sha256=8CKB8dey7EmZtQnl6IOgBhpxkw0UCpQPWeiBw5PqW8k,5737
31
31
  geo_activity_playground/core/paths.py,sha256=qQ4ujaIHmsxTGEWzf-76XS8FclEI2RC5COTUeuLEbDI,2938
32
- geo_activity_playground/core/photos.py,sha256=pUnEfVesEKESlew6_KkYAF582ejLupnWTqs_RcvnRsA,1070
32
+ geo_activity_playground/core/photos.py,sha256=pHdVUpgKfbyrTddZL_mgmsXQJ3k_IHKf70jtcIjjcCA,1229
33
33
  geo_activity_playground/core/privacy_zones.py,sha256=4TumHsVUN1uW6RG3ArqTXDykPVipF98DCxVBe7YNdO8,512
34
34
  geo_activity_playground/core/raster_map.py,sha256=y7maiC_bmUwXsULC_XCZ1m8nGgU2jFe47QFB7TpC_V4,8257
35
35
  geo_activity_playground/core/similarity.py,sha256=L2de3DPRdDeDY5AxZwLDcH7FjHWRWklr41VNU06q9kQ,3117
@@ -41,22 +41,22 @@ geo_activity_playground/core/test_missing_values.py,sha256=7yvg6dUu7p8PR_rxUxgFa
41
41
  geo_activity_playground/core/test_pandas_timezone.py,sha256=-MDiLoLG5tDMqkI0iKno24kFn9X3tslh9ZpoDYLWNJU,771
42
42
  geo_activity_playground/core/test_summary_stats.py,sha256=qH_45mPRFD2H-Rr0Ku-RYc67vhC7qKxbPr7J2F36uV8,3081
43
43
  geo_activity_playground/core/test_tiles.py,sha256=zce1FxNfsSpOQt66jMehdQRVoNdl-oiFydx6iVBHZXM,764
44
- geo_activity_playground/core/test_time_zone_from_location.py,sha256=PKxDysm8D0FJjyuc4Kzrv65UxzP-ogUtFHQZ7mGKZQw,229
44
+ geo_activity_playground/core/test_time_zone_from_location.py,sha256=frL5QHV7-Tuwo2Igx2kIEyTPbW2t3lusCc4Sl5xWlz0,393
45
45
  geo_activity_playground/core/test_time_zone_import.py,sha256=1CAJyGTHYPoxabBNVRfLhaRNbvvWcAYjJyDR-qvbRjg,3349
46
46
  geo_activity_playground/core/test_timezone_sqlalchemy.py,sha256=OXjdowGXM-DsM4-Mpab8c3j3AtdW_yXp2NgI-B_cbvA,1172
47
47
  geo_activity_playground/core/tiles.py,sha256=LBn2V6WAvMxZeXSIQ8ruZL71iyvOXoFZMz7PZgNUf7M,2189
48
- geo_activity_playground/core/time_conversion.py,sha256=F-vQ-MdbTOqPTAELplDjT5m7kdaf1RsqBXELfsR5eOU,1329
48
+ geo_activity_playground/core/time_conversion.py,sha256=f5CByqyWSthCplrbXZThSFbt3eY-t1g-2H5lkfBlgc0,1556
49
49
  geo_activity_playground/explorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  geo_activity_playground/explorer/grid_file.py,sha256=YNL_c4O1-kxaajATJwj4ZLywCL5Hpj9qy2h-F7rk8Yg,3260
51
- geo_activity_playground/explorer/tile_visits.py,sha256=NUzC4jNb_vQExAIALrO2H1MiNs5JJKsOQKGietAcATE,16271
51
+ geo_activity_playground/explorer/tile_visits.py,sha256=7B8c9xf7jJFVjXD3SNEgoQb707dHFa4JN0hUdn5z-xQ,16594
52
52
  geo_activity_playground/explorer/video.py,sha256=7j6Qv3HG6On7Tn7xh7Olwrx_fbQnfzS7CeRg3TEApHg,4397
53
53
  geo_activity_playground/heatmap_video.py,sha256=I8i1uVvbbPUXVtvLAROaLy58nQoUPnuMCZkERWNkQjg,3318
54
54
  geo_activity_playground/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- geo_activity_playground/importers/activity_parsers.py,sha256=kL0PcS5eIjRokphQqkWs3ETNj-xdFkYLP7kdQW8y23o,11430
55
+ geo_activity_playground/importers/activity_parsers.py,sha256=MJIsBi2SH5y8Q5D-w9djB4ZFnKxCsoNx5qpynqrubhw,11311
56
56
  geo_activity_playground/importers/csv_parser.py,sha256=O1pP5GLhWhnWcy2Lsrr9g17Zspuibpt-GtZ3ZS5eZF4,2143
57
- geo_activity_playground/importers/directory.py,sha256=ucnB5sPBvXzLdaza2v8GVU75ArfGG4E7d5OXrCgoFq4,3562
57
+ geo_activity_playground/importers/directory.py,sha256=sHcLIi0DOPEATt4wiE_vp00h89fO940wUQyJZUzzpnw,3978
58
58
  geo_activity_playground/importers/strava_api.py,sha256=Fiqlc-VeuzsvgDcWt71JoPMri221cMjkeL4SH80gC5s,8426
59
- geo_activity_playground/importers/strava_checkout.py,sha256=Pugtv0nbgfuVzBDC5e5Tfv1jShUYmMcDbpCQp2ULXow,9232
59
+ geo_activity_playground/importers/strava_checkout.py,sha256=joJI_uic9fYtu7E5Odh6GUq_LyiLqQ72Ucy_Mbjr-X0,9289
60
60
  geo_activity_playground/importers/test_csv_parser.py,sha256=nOTVTdlzIY0TDcbWp7xNyNaIO6Mkeu55hVziVl22QE4,1092
61
61
  geo_activity_playground/importers/test_directory.py,sha256=_fn_-y98ZyElbG0BRxAmGFdtGobUShPU86SdEOpuv-A,691
62
62
  geo_activity_playground/importers/test_strava_api.py,sha256=7b8bl5Rh2BctCmvTPEhCadxtUOq3mfzuadD6F5XxRio,398
@@ -71,7 +71,7 @@ geo_activity_playground/webui/blueprints/calendar_blueprint.py,sha256=SmOu5AfNNo
71
71
  geo_activity_playground/webui/blueprints/eddington_blueprints.py,sha256=Ya5GJxfVESwmRlgMTYe9g75g8JHHTAAvYFmSD-3Uz4Q,8987
72
72
  geo_activity_playground/webui/blueprints/entry_views.py,sha256=SDCzpUSb1FAb84tM0SnmrZQvtaTlO-Rqdj94hyIMDSc,2936
73
73
  geo_activity_playground/webui/blueprints/equipment_blueprint.py,sha256=8L_7NZGErvu4jyigi2gg7HN_gegZRdsSFahUH7Dz6Lw,5727
74
- geo_activity_playground/webui/blueprints/explorer_blueprint.py,sha256=4sJcSwqyh5WxOU22IxpxkGTNWyq5MCgNeUKrCgotRcU,20828
74
+ geo_activity_playground/webui/blueprints/explorer_blueprint.py,sha256=6ldVAKhYLNSnkI4X_NbuKtnV_Pm9t_Bm5UZOJoiLN_s,20835
75
75
  geo_activity_playground/webui/blueprints/export_blueprint.py,sha256=C9yFH5gEJs2YtWE-EhcGDEyGwwaLgC1umybgIRi6duE,1036
76
76
  geo_activity_playground/webui/blueprints/hall_of_fame_blueprint.py,sha256=9CfcXE7v-p6IDR4L6ccBmSXlt89xTwitYetSF8xxI9g,3138
77
77
  geo_activity_playground/webui/blueprints/heatmap_blueprint.py,sha256=5LlYKMeOMIE7c3xGRZ52ld4Jxtdc3GNcb6lvt3v7NVA,8435
@@ -88,6 +88,7 @@ geo_activity_playground/webui/columns.py,sha256=FP0YfX-WFQk1JEXhrywv3NUEVq-x7Hv0
88
88
  geo_activity_playground/webui/flasher.py,sha256=Covc1D9cO_jjokRWnvyiXCc2tfp3aZ8XkNqFdA1AXtk,500
89
89
  geo_activity_playground/webui/plot_util.py,sha256=5Uesjj-xcMskQX2z9viDZYHSxLGrH2a5dHA1ogsJW9U,261
90
90
  geo_activity_playground/webui/search_util.py,sha256=gH2cOM1FTAozZUlSQ4C1dR1xlV-8e82pD1PPi_pPBNY,2647
91
+ geo_activity_playground/webui/static/activity-trim.js,sha256=TVU32IGVweK9KfcMIXbtEo8IeQ36mS--_D8gjBXqBz0,1076
91
92
  geo_activity_playground/webui/static/bootstrap/bootstrap-dark-mode.js,sha256=XfyhxIFgjDc6aEj0kYgKpG5zjS5gvyhWCJmNfUG4HJY,2622
92
93
  geo_activity_playground/webui/static/bootstrap/bootstrap.bundle.min.js,sha256=gvZPYrsDwbwYJLD5yeBfcNujPhRoGOY831wwbIzz3t0,80663
93
94
  geo_activity_playground/webui/static/bootstrap/bootstrap.min.css,sha256=MBffSnbbXwHCuZtgPYiwMQbfE7z-GOZ7fBPCNB06Z98,232948
@@ -130,7 +131,7 @@ geo_activity_playground/webui/templates/activity/edit.html.j2,sha256=r979JPqaZi_
130
131
  geo_activity_playground/webui/templates/activity/lines.html.j2,sha256=_ZDg1ruW-9UMJfOudy1-uY_-IcSSaagq7tPCih5Bb8g,1079
131
132
  geo_activity_playground/webui/templates/activity/name.html.j2,sha256=RYbNGzPexa4gRUWRjw-C9nWvp5lI7agAZZCS3Du7nAs,2661
132
133
  geo_activity_playground/webui/templates/activity/show.html.j2,sha256=gE4RraLi-h63KvHO4oXLDWPcXN1FB6wqMxVKB75Zn0k,10974
133
- geo_activity_playground/webui/templates/activity/trim.html.j2,sha256=3oAXQab6QqWjGBC9KCvWNOVn8uRmxoDLj3hx_O63TXc,1836
134
+ geo_activity_playground/webui/templates/activity/trim.html.j2,sha256=4ALQ6ZruhGfK4gAyCzVFl4jEHC-3w9iWjmigsunCe7s,1022
134
135
  geo_activity_playground/webui/templates/auth/index.html.j2,sha256=wzA0uxpiT1ktDadgnjvFXc9iUGMFm9GhjDkavl3S1h4,646
135
136
  geo_activity_playground/webui/templates/bubble_chart/index.html.j2,sha256=yd7lWjtxxVmJZqCiXb0Y1gMEOQ7LQYJXEdpE7JB1OZY,1616
136
137
  geo_activity_playground/webui/templates/calendar/index.html.j2,sha256=8dV9yeDwfv0Mm81mhiPHN5r3hdPUWl1Yye03x0Rqbo8,1601
@@ -174,8 +175,8 @@ geo_activity_playground/webui/templates/summary/vega-chart.html.j2,sha256=mw8Hti
174
175
  geo_activity_playground/webui/templates/time_zone_fixer/index.html.j2,sha256=s9r6BJMXmd7kLSyjkvH4xLi6e01S5bpGRcMgMMJyCAE,1760
175
176
  geo_activity_playground/webui/templates/upload/index.html.j2,sha256=I1Ix8tDS3YBdi-HdaNfjkzYXVVCjfUTe5PFTnap1ydc,775
176
177
  geo_activity_playground/webui/templates/upload/reload.html.j2,sha256=YZWX5eDeNyqKJdQAywDBcU8DZBm22rRBbZqFjrFrCvQ,556
177
- geo_activity_playground-1.5.1.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
178
- geo_activity_playground-1.5.1.dist-info/METADATA,sha256=xrB1_Ang0OELXJlnj1VnI69mgmNXDPESp1gf5btX0U0,1890
179
- geo_activity_playground-1.5.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
180
- geo_activity_playground-1.5.1.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
181
- geo_activity_playground-1.5.1.dist-info/RECORD,,
178
+ geo_activity_playground-1.6.0.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
179
+ geo_activity_playground-1.6.0.dist-info/METADATA,sha256=gj1svTD4GNI5A8Y8-ZXacM2oDOdvtY7Gk8SM3aENH2A,1937
180
+ geo_activity_playground-1.6.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
181
+ geo_activity_playground-1.6.0.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
182
+ geo_activity_playground-1.6.0.dist-info/RECORD,,