geo-activity-playground 1.9.4__py3-none-any.whl → 1.10.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.
@@ -0,0 +1,32 @@
1
+ from typing import Sequence
2
+ from typing import Union
3
+
4
+ import sqlalchemy as sa
5
+ from alembic import op
6
+
7
+
8
+ # revision identifiers, used by Alembic.
9
+ revision: str = "10021d238ada"
10
+ down_revision: Union[str, None] = "85fe0348e8a2"
11
+ branch_labels: Union[str, Sequence[str], None] = None
12
+ depends_on: Union[str, Sequence[str], None] = None
13
+
14
+
15
+ def upgrade() -> None:
16
+ # ### commands auto generated by Alembic - please adjust! ###
17
+ op.create_table(
18
+ "explorer_tile_bookmarks",
19
+ sa.Column("id", sa.Integer(), nullable=False),
20
+ sa.Column("name", sa.String(), nullable=False),
21
+ sa.Column("zoom", sa.Integer(), nullable=False),
22
+ sa.Column("tile_x", sa.Integer(), nullable=False),
23
+ sa.Column("tile_y", sa.Integer(), nullable=False),
24
+ sa.PrimaryKeyConstraint("id"),
25
+ )
26
+ # ### end Alembic commands ###
27
+
28
+
29
+ def downgrade() -> None:
30
+ # ### commands auto generated by Alembic - please adjust! ###
31
+ op.drop_table("explorer_tile_bookmarks")
32
+ # ### end Alembic commands ###
@@ -497,3 +497,16 @@ class Photo(DB.Model):
497
497
  @property
498
498
  def path(self) -> pathlib.Path:
499
499
  return pathlib.Path(self.filename)
500
+
501
+
502
+ class ExplorerTileBookmark(DB.Model):
503
+ __tablename__ = "explorer_tile_bookmarks"
504
+ id: Mapped[int] = mapped_column(primary_key=True)
505
+
506
+ name: Mapped[str] = mapped_column(sa.String, nullable=False)
507
+ zoom: Mapped[int] = mapped_column(sa.Integer, nullable=False)
508
+ tile_x: Mapped[int] = mapped_column(sa.Integer, nullable=False)
509
+ tile_y: Mapped[int] = mapped_column(sa.Integer, nullable=False)
510
+
511
+ def __str__(self) -> str:
512
+ return f"{self.name} ({self.tile_x}, {self.tile_y}) @ {self.zoom}"
@@ -76,8 +76,13 @@ class TileHistoryRow(TypedDict):
76
76
  class TileEvolutionState:
77
77
  def __init__(self) -> None:
78
78
  self.num_neighbors: dict[tuple[int, int], int] = {}
79
+ "Mapping from tile to the number of its neighbors."
80
+
79
81
  self.memberships: dict[tuple[int, int], tuple[int, int]] = {}
82
+ "Mapping from tile to the representative tile."
80
83
  self.clusters: dict[tuple[int, int], list[tuple[int, int]]] = {}
84
+ "Mapping from representative tile to the list of all cluster members."
85
+
81
86
  self.cluster_evolution = pd.DataFrame()
82
87
  self.square_start = 0
83
88
  self.cluster_start = 0
@@ -4,6 +4,7 @@ import hashlib
4
4
  import io
5
5
  import logging
6
6
  from collections.abc import Iterable
7
+ from typing import Any
7
8
  from typing import Optional
8
9
  from typing import Union
9
10
 
@@ -13,6 +14,7 @@ import matplotlib
13
14
  import matplotlib.pyplot as pl
14
15
  import numpy as np
15
16
  import pandas as pd
17
+ import sqlalchemy
16
18
  from flask import Blueprint
17
19
  from flask import flash
18
20
  from flask import redirect
@@ -26,6 +28,7 @@ from ...core.config import ConfigAccessor
26
28
  from ...core.coordinates import Bounds
27
29
  from ...core.datamodel import Activity
28
30
  from ...core.datamodel import DB
31
+ from ...core.datamodel import ExplorerTileBookmark
29
32
  from ...core.raster_map import ImageTransform
30
33
  from ...core.raster_map import OSM_TILE_SIZE
31
34
  from ...core.raster_map import TileGetter
@@ -237,6 +240,27 @@ def make_explorer_blueprint(
237
240
  medians["tile_x"], medians["tile_y"], zoom
238
241
  )
239
242
 
243
+ bookmarks: list[dict[str, Any]] = []
244
+ for bookmark in DB.session.scalars(
245
+ sqlalchemy.select(ExplorerTileBookmark).where(
246
+ ExplorerTileBookmark.zoom == zoom
247
+ )
248
+ ).all():
249
+ tile = (bookmark.tile_x, bookmark.tile_y)
250
+ representative = tile_evolution_state.memberships.get(tile, None)
251
+ if not representative:
252
+ continue
253
+ cluster = tile_evolution_state.clusters.get(representative, None)
254
+ if not cluster:
255
+ continue
256
+ bookmarks.append(
257
+ {
258
+ "name": bookmark.name,
259
+ "bbox": geojson_bounding_box_for_tile_collection(cluster, zoom),
260
+ "size": len(cluster),
261
+ }
262
+ )
263
+
240
264
  context = {
241
265
  "center": {
242
266
  "latitude": median_lat,
@@ -263,6 +287,7 @@ def make_explorer_blueprint(
263
287
  "square_y": tile_evolution_state.square_y,
264
288
  "square_size": tile_evolution_state.max_square_size,
265
289
  "max_cluster_size": max(map(len, tile_evolution_state.clusters.values())),
290
+ "bookmarks": bookmarks,
266
291
  }
267
292
  return render_template("explorer/server-side.html.j2", **context)
268
293
 
@@ -450,6 +475,12 @@ def make_explorer_blueprint(
450
475
  evolution_state.memberships.get(tile_xy, None), []
451
476
  )
452
477
  ),
478
+ "new_bookmark_url": url_for(
479
+ "settings.cluster_bookmark_new",
480
+ zoom=zoom,
481
+ tile_x=tile_xy[0],
482
+ tile_y=tile_xy[1],
483
+ ),
453
484
  }
454
485
  else:
455
486
  result = {}
@@ -462,10 +493,16 @@ def bounding_box_for_biggest_cluster(
462
493
  clusters: Iterable[list[tuple[int, int]]], zoom: int
463
494
  ) -> str:
464
495
  biggest_cluster = max(clusters, key=lambda members: len(members))
465
- min_x = min(x for x, y in biggest_cluster)
466
- max_x = max(x for x, y in biggest_cluster)
467
- min_y = min(y for x, y in biggest_cluster)
468
- max_y = max(y for x, y in biggest_cluster)
496
+ return geojson_bounding_box_for_tile_collection(biggest_cluster, zoom)
497
+
498
+
499
+ def geojson_bounding_box_for_tile_collection(
500
+ tiles: list[tuple[int, int]], zoom: int
501
+ ) -> str:
502
+ min_x = min(x for x, y in tiles)
503
+ max_x = max(x for x, y in tiles)
504
+ min_y = min(y for x, y in tiles)
505
+ max_y = max(y for x, y in tiles)
469
506
  lat_max, lon_min = get_tile_upper_left_lat_lon(min_x, min_y, zoom)
470
507
  lat_min, lon_max = get_tile_upper_left_lat_lon(max_x, max_y, zoom)
471
508
  return geojson.dumps(
@@ -18,6 +18,7 @@ from ...core.config import ConfigAccessor
18
18
  from ...core.datamodel import Activity
19
19
  from ...core.datamodel import DB
20
20
  from ...core.datamodel import Equipment
21
+ from ...core.datamodel import ExplorerTileBookmark
21
22
  from ...core.datamodel import Kind
22
23
  from ...core.datamodel import Tag
23
24
  from ...core.enrichment import update_and_commit
@@ -110,6 +111,29 @@ def make_settings_blueprint(
110
111
  )
111
112
  )
112
113
 
114
+ @blueprint.route("/cluster-bookmarks/new", methods=["GET", "POST"])
115
+ @needs_authentication(authenticator)
116
+ def cluster_bookmark_new():
117
+ if request.method == "POST":
118
+ bm = ExplorerTileBookmark(
119
+ name=request.form["name"],
120
+ zoom=int(request.form["zoom"]),
121
+ tile_x=int(request.form["tile_x"]),
122
+ tile_y=int(request.form["tile_y"]),
123
+ )
124
+ DB.session.add(bm)
125
+ DB.session.commit()
126
+ return redirect(
127
+ url_for("explorer.server_side", zoom=int(request.form["zoom"]))
128
+ )
129
+ else:
130
+ return render_template(
131
+ "settings/cluster-bookmarks-new.html.j2",
132
+ zoom=request.args["zoom"],
133
+ tile_x=request.args["tile_x"],
134
+ tile_y=request.args["tile_y"],
135
+ )
136
+
113
137
  @blueprint.route("/color-schemes", methods=["GET", "POST"])
114
138
  @needs_authentication(authenticator)
115
139
  def color_schemes():
@@ -84,6 +84,7 @@ map.on('click', e => {
84
84
  ]
85
85
  if (data.this_cluster_size) {
86
86
  lines.push(`<dt>This cluster size</dt><dd>${data.this_cluster_size}</dd>`)
87
+ lines.push(`<dt>Bookmark</dt><dd><a href="${data.new_bookmark_url}">Create cluster bookmark</a></dd>`)
87
88
  }
88
89
 
89
90
  L.popup()
@@ -97,4 +98,8 @@ map.on('click', e => {
97
98
  function downloadAs(suffix) {
98
99
  bounds = map.getBounds();
99
100
  window.location.href = `/explorer/${zoom}/${bounds.getNorth()}/${bounds.getEast()}/${bounds.getSouth()}/${bounds.getWest()}/${suffix}`
100
- }
101
+ }
102
+
103
+ function centerOn(bbox) {
104
+ map.fitBounds(L.geoJSON(bbox).getBounds())
105
+ }
@@ -24,6 +24,17 @@
24
24
  </div>
25
25
  </div>
26
26
 
27
+ {% if bookmarks %}
28
+ <div class="btn-group mb-3" role="group" aria-label="Cluster bookmarks">
29
+ <button type="button" class="btn btn-primary" onclick='centerOn({{ center.bbox | safe }})'>Biggest ({{
30
+ max_cluster_size }})</button>
31
+ {% for bookmark in bookmarks %}
32
+ <button type="button" class="btn btn-primary" onclick='centerOn({{ bookmark.bbox | safe }})'>{{ bookmark.name }} ({{
33
+ bookmark.size }})</button>
34
+ {% endfor %}
35
+ </div>
36
+ {% endif %}
37
+
27
38
  <div class="row mb-3">
28
39
  <div class="col">
29
40
  <div id="explorer-map" class="mb-1" style="height: 800px;"></div>
@@ -0,0 +1,29 @@
1
+ {% extends "page.html.j2" %}
2
+
3
+ {% block container %}
4
+
5
+ <h1 class="mb-3">Create Explorer Tile Cluster Bookmark</h1>
6
+
7
+ <form method="POST">
8
+ <div class="mb-3">
9
+ <label for="name" class="form-label">Name</label>
10
+ <input type="text" class="form-control" id="name" name="name" />
11
+ </div>
12
+ <div class="mb-3">
13
+ <label for="zoom" class="form-label">Zoom</label>
14
+ <input type="number" class="form-control" id="zoom" name="zoom" value="{{ zoom }}" />
15
+ </div>
16
+ <div class="mb-3">
17
+ <label for="tile_x" class="form-label">Tile X</label>
18
+ <input type="number" class="form-control" id="tile_x" name="tile_x" value="{{ tile_x }}" />
19
+ </div>
20
+ <div class="mb-3">
21
+ <label for="tile_y" class="form-label">Tile Y</label>
22
+ <input type="number" class="form-control" id="tile_y" name="tile_y" value="{{ tile_y }}" />
23
+ </div>
24
+
25
+ <button type="submit" class="btn btn-primary">Create</button>
26
+ </form>
27
+
28
+
29
+ {% endblock %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geo-activity-playground
3
- Version: 1.9.4
3
+ Version: 1.10.0
4
4
  Summary: Analysis of geo data activities like rides, runs or hikes.
5
5
  License: MIT
6
6
  Author: Martin Ueding
@@ -4,6 +4,7 @@ geo_activity_playground/alembic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkE
4
4
  geo_activity_playground/alembic/env.py,sha256=46oMzwSROaAsYuYWTd46txFdRLD3adm_SCn01A_ex8Q,2081
5
5
  geo_activity_playground/alembic/script.py.mako,sha256=g1k4U3D8y4PPYRzW3DH7GEu6yN4EiAr62GgCu6cRpBo,524
6
6
  geo_activity_playground/alembic/versions/0f02b92c4f94_add_tag_color.py,sha256=gWcRPLIo1jH3X_x0hh1rMRuiz2wtS10MEIsG6voBCX4,827
7
+ geo_activity_playground/alembic/versions/10021d238ada_add_explorer_tile_bookmarks.py,sha256=WhN9zGDAxqqwY1tIX4S6hPXF0IB1uo1CpQEvK5xg80U,1015
7
8
  geo_activity_playground/alembic/versions/38882503dc7c_add_tags_to_activities.py,sha256=HmvYgHlVodHB7xyigg7zHkFXSi1znWqKfOHcd6y9sZE,3157
8
9
  geo_activity_playground/alembic/versions/451e7836b53d_add_square_planner_bookmark.py,sha256=WrmlDllnJECg6cSOeS05wYCa977_SXbJUV5khDSzntw,1082
9
10
  geo_activity_playground/alembic/versions/63d3b7f6f93c_initial_version.py,sha256=YTnnENkQ8WqLz7PFof7tUWNkWcoHGkAfAM52x1N9umo,3029
@@ -21,7 +22,7 @@ geo_activity_playground/core/activities.py,sha256=-Sgf981kG0QfDNZc0c1hB4StZJd_ON
21
22
  geo_activity_playground/core/config.py,sha256=mmdMQ5iCLNGnAlriT1ETEVS-gM6Aq_9sg22QECHj4n8,5358
22
23
  geo_activity_playground/core/coordinates.py,sha256=rW_OmMRpTUyIsQwrT6mgT9Y6uPGuwqTo5XDDMS7mGuo,1140
23
24
  geo_activity_playground/core/copernicus_dem.py,sha256=t6Bc9fsyGyx1awdePXvlN-Zc-tiT2eGSJ80SV5B1Z9A,2944
24
- geo_activity_playground/core/datamodel.py,sha256=yuq3XCynetp1OlMr3fpSlXBArElgzdfejbqnJJX-xC4,16728
25
+ geo_activity_playground/core/datamodel.py,sha256=JXyXg0szPOk4dn7DSrJTbX-RScZIrOe9aDGT-Tw7d_E,17242
25
26
  geo_activity_playground/core/enrichment.py,sha256=NmbeIIPhSbT_J60el_areAnBtiLJs7aGf_vNGWp_9Sk,8888
26
27
  geo_activity_playground/core/export.py,sha256=ayOmhWL72263oP9NLIZRYCg_Db0GLUFhgNIL_MCrV-E,4435
27
28
  geo_activity_playground/core/heart_rate.py,sha256=-S3WAhS7AOywrw_Lk5jfuo_fu6zvZQ1VtjwEKSycWpU,1542
@@ -48,7 +49,7 @@ geo_activity_playground/core/tiles.py,sha256=LBn2V6WAvMxZeXSIQ8ruZL71iyvOXoFZMz7
48
49
  geo_activity_playground/core/time_conversion.py,sha256=f5CByqyWSthCplrbXZThSFbt3eY-t1g-2H5lkfBlgc0,1556
49
50
  geo_activity_playground/explorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
51
  geo_activity_playground/explorer/grid_file.py,sha256=YNL_c4O1-kxaajATJwj4ZLywCL5Hpj9qy2h-F7rk8Yg,3260
51
- geo_activity_playground/explorer/tile_visits.py,sha256=DzAmZmyLSeGe8mIg6-Kx1gXtCf5Bj8YjfNFD_imJyjE,17296
52
+ geo_activity_playground/explorer/tile_visits.py,sha256=Pq6c-Nuw-wyLBNbCit49wNMsuHMa-8_-XkEZeFp8mZ4,17493
52
53
  geo_activity_playground/explorer/video.py,sha256=7j6Qv3HG6On7Tn7xh7Olwrx_fbQnfzS7CeRg3TEApHg,4397
53
54
  geo_activity_playground/heatmap_video.py,sha256=I8i1uVvbbPUXVtvLAROaLy58nQoUPnuMCZkERWNkQjg,3318
54
55
  geo_activity_playground/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -71,14 +72,14 @@ geo_activity_playground/webui/blueprints/calendar_blueprint.py,sha256=rJTJGKn68E
71
72
  geo_activity_playground/webui/blueprints/eddington_blueprints.py,sha256=s5o_U1rqGE4wrE9my7quDyMeUpGu-R5Nuc1cf1seSeM,8521
72
73
  geo_activity_playground/webui/blueprints/entry_views.py,sha256=slGyYokGattdG-e5Ef9s_ys4ohVVAkFLFclEQS5fEr4,2954
73
74
  geo_activity_playground/webui/blueprints/equipment_blueprint.py,sha256=6u81Hestr4FP6mix_avQp9jaK0In4WNdYaSwKL5cJDs,5757
74
- geo_activity_playground/webui/blueprints/explorer_blueprint.py,sha256=fe4ZNROmpks-nP4Wsw2vc9t5_X508-6Xi1dv07O_NfQ,20979
75
+ geo_activity_playground/webui/blueprints/explorer_blueprint.py,sha256=cxA6H8xIRKuWtyOzjtsw4Z26tgY9LrTCps4ZhYIceRk,22273
75
76
  geo_activity_playground/webui/blueprints/export_blueprint.py,sha256=Rppuyk_TkP1GeDplxgKnRkyujDR-hGhD3oWRnNNCEjc,1102
76
77
  geo_activity_playground/webui/blueprints/hall_of_fame_blueprint.py,sha256=NGVk8Xgwpt-YNX5_zgGWTMRctN_N4NCnMq10DSDteVg,3121
77
78
  geo_activity_playground/webui/blueprints/heatmap_blueprint.py,sha256=prERVBOxq2xvmgyH_dwtLwMMMFILeu-6yZE9h9U_T9g,8418
78
79
  geo_activity_playground/webui/blueprints/photo_blueprint.py,sha256=i4-AS9icK6pDypTdl-coTZyKldXtpukGiNbKsihfpl0,7299
79
80
  geo_activity_playground/webui/blueprints/plot_builder_blueprint.py,sha256=SttkVghm4msPmEbSmxZj3e1Q-e2-YdhH6zjZGaiYEQg,3844
80
81
  geo_activity_playground/webui/blueprints/search_blueprint.py,sha256=hY3hfGTip24AEf7NVTPtQt2hj7MEAcG3gbJd42NY3Ic,2258
81
- geo_activity_playground/webui/blueprints/settings_blueprint.py,sha256=cwes3QmRrC_HMP1g-Yc-x2BJycF4jF3StJl75v9acWo,20377
82
+ geo_activity_playground/webui/blueprints/settings_blueprint.py,sha256=CcyrUKa7BanmsZ5EYCX2Kvf1REGKRVX3747FuuVgWjM,21304
82
83
  geo_activity_playground/webui/blueprints/square_planner_blueprint.py,sha256=xVaxJxmt8Dysl3UL9f2y__LVLtTH2Np1Ust4OSXKRAk,4746
83
84
  geo_activity_playground/webui/blueprints/summary_blueprint.py,sha256=giVLJttJ2myJ6n5Xg5aq3hFvfu7MPo1euyYZGVAaBBk,6746
84
85
  geo_activity_playground/webui/blueprints/tile_blueprint.py,sha256=YzZf9OrNdjhc1_j4MtO1DMcw1uCv29ueNsYd-mWqgbg,837
@@ -121,7 +122,7 @@ geo_activity_playground/webui/static/leaflet/leaflet.css,sha256=p4NxAoJBhIIN-hmN
121
122
  geo_activity_playground/webui/static/leaflet/leaflet.fullscreen.css,sha256=YTbhDGEH5amI_JfotPMN7IByFpsN9e4tCBnv5oNdvHU,994
122
123
  geo_activity_playground/webui/static/leaflet/leaflet.js,sha256=20nQCchB9co0qIjJZRGuk2_Z9VM-kNiyxNV1lvTlZBo,147552
123
124
  geo_activity_playground/webui/static/leaflet/leaflet.markercluster.js,sha256=WL6HHfYfbFEkZOFdsJQeY7lJG_E5airjvqbznghUzRw,33724
124
- geo_activity_playground/webui/static/server-side-explorer.js,sha256=AZ1ikH0NrVWcf6QBwPp2NC6LkIY2T8T0HKVhyVrtT-A,3426
125
+ geo_activity_playground/webui/static/server-side-explorer.js,sha256=grLBpPbM17Hkv5sn4TuvqU6m1SHPGg3Z7I3898d7DVc,3622
125
126
  geo_activity_playground/webui/static/table-sort.min.js,sha256=sFeDrgkXTePr2ciJU9_mLh-Z8qtYhPIQMgOZtj0LwBY,8506
126
127
  geo_activity_playground/webui/static/vega/vega-embed@6.js,sha256=EtAqz74-xZ75o33UgiouBOKWG1u7Zxu-Zh0iIXFbmdo,60630
127
128
  geo_activity_playground/webui/static/vega/vega-lite@4.js,sha256=roXmcY9bUF91uB9V-eSEUHEgfwoXe6B1xoDPuIe5ou8,267999
@@ -140,7 +141,7 @@ geo_activity_playground/webui/templates/eddington/distance.html.j2,sha256=9cLlIr
140
141
  geo_activity_playground/webui/templates/eddington/elevation_gain.html.j2,sha256=h2mI1Uc1-P7rN_SeCVP_uadpQqX09ZpBG3Z6N8QWNLw,4723
141
142
  geo_activity_playground/webui/templates/elevation_eddington/index.html.j2,sha256=WjquRFWaMzIZrvByhRIuhJbSCUW2HTfMck6THQHZI-I,4743
142
143
  geo_activity_playground/webui/templates/equipment/index.html.j2,sha256=6pzSCJACMXA1fKgsO_KrCTvpumAKlelzj5f9dReey14,1742
143
- geo_activity_playground/webui/templates/explorer/server-side.html.j2,sha256=jQHJBSqWp5iZpO0cw8fArpca_Ec9cyDFqvN1r5mxt8E,4173
144
+ geo_activity_playground/webui/templates/explorer/server-side.html.j2,sha256=RQrb8_DOSCNL_3-LYyKKOzGtgyrvomV3puBkt_OCTEw,4639
144
145
  geo_activity_playground/webui/templates/export/index.html.j2,sha256=vxqpAm9KnT405Qz7q0_td-HZ4mCjcPR4Lp6EnIEWisg,1652
145
146
  geo_activity_playground/webui/templates/hall_of_fame/index.html.j2,sha256=P15fVPjXf0Wf6K_hd_lCMuw6-Q8_qfNqsBOWNpMfoXw,1804
146
147
  geo_activity_playground/webui/templates/heatmap/index.html.j2,sha256=Q99v4LP5EnuvDYKayL52qujWaIroLsD89ly2cM2YvTI,1420
@@ -155,6 +156,7 @@ geo_activity_playground/webui/templates/plot_builder/index.html.j2,sha256=ERWPyu
155
156
  geo_activity_playground/webui/templates/search/index.html.j2,sha256=ZcM17XPXV25qbLymUyLkerXtmAjvZmgo-YRBTr78m4Q,1359
156
157
  geo_activity_playground/webui/templates/search_form.html.j2,sha256=BBxT2aAUlOZ41d2hE9EKX0Jcr0FKLCp_9cgWYyrVtE8,8261
157
158
  geo_activity_playground/webui/templates/settings/admin-password.html.j2,sha256=VYwddpObD1RpeTH5Dm4y7VtmT7kwURDCIjxyzJeq08c,495
159
+ geo_activity_playground/webui/templates/settings/cluster-bookmarks-new.html.j2,sha256=aV2tulI3GpGUG1SCxx0itKd4uyNsjD5--ijKqVLsMA0,969
158
160
  geo_activity_playground/webui/templates/settings/color-schemes.html.j2,sha256=iR91Wxd2_TMuIo9dBDZBrWSUGHNwTwzC6O8oNH-XBt4,1653
159
161
  geo_activity_playground/webui/templates/settings/heart-rate.html.j2,sha256=UPT3MegRgSeff36lhCo0l3ZwhqNSIg5gM6h2s32GkCY,4255
160
162
  geo_activity_playground/webui/templates/settings/index.html.j2,sha256=mapSC1TTS_cFg7K0eNuTbENTMg2EFb1atPdIj14xU_c,5468
@@ -175,8 +177,8 @@ geo_activity_playground/webui/templates/summary/vega-chart.html.j2,sha256=mw8Hti
175
177
  geo_activity_playground/webui/templates/time_zone_fixer/index.html.j2,sha256=s9r6BJMXmd7kLSyjkvH4xLi6e01S5bpGRcMgMMJyCAE,1760
176
178
  geo_activity_playground/webui/templates/upload/index.html.j2,sha256=5W2gpm4eSvidOyJOCSZZbvTZaTkSWNrOWux3-oIm0zI,784
177
179
  geo_activity_playground/webui/templates/upload/reload.html.j2,sha256=YZWX5eDeNyqKJdQAywDBcU8DZBm22rRBbZqFjrFrCvQ,556
178
- geo_activity_playground-1.9.4.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
179
- geo_activity_playground-1.9.4.dist-info/METADATA,sha256=TWDOnevm__CRkjcmlnfI73azWUZey8R5clp-0w3kgi8,1937
180
- geo_activity_playground-1.9.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
181
- geo_activity_playground-1.9.4.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
182
- geo_activity_playground-1.9.4.dist-info/RECORD,,
180
+ geo_activity_playground-1.10.0.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
181
+ geo_activity_playground-1.10.0.dist-info/METADATA,sha256=ydclds6VDvgh14IFL1yX_oEEsgSi07V-zw_VoNhFSD0,1938
182
+ geo_activity_playground-1.10.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
183
+ geo_activity_playground-1.10.0.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
184
+ geo_activity_playground-1.10.0.dist-info/RECORD,,