geo-activity-playground 0.29.2__py3-none-any.whl → 0.30.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.
Files changed (32) hide show
  1. geo_activity_playground/core/config.py +2 -0
  2. geo_activity_playground/core/enrichment.py +18 -7
  3. geo_activity_playground/core/paths.py +0 -2
  4. geo_activity_playground/importers/strava_api.py +1 -1
  5. geo_activity_playground/webui/activity/controller.py +16 -0
  6. geo_activity_playground/webui/activity/templates/activity/day.html.j2 +1 -1
  7. geo_activity_playground/webui/activity/templates/activity/name.html.j2 +2 -2
  8. geo_activity_playground/webui/activity/templates/activity/show.html.j2 +13 -2
  9. geo_activity_playground/webui/equipment/templates/equipment/index.html.j2 +1 -1
  10. geo_activity_playground/webui/search/blueprint.py +87 -6
  11. geo_activity_playground/webui/search/templates/search/index.html.j2 +66 -13
  12. geo_activity_playground/webui/settings/blueprint.py +44 -0
  13. geo_activity_playground/webui/settings/templates/settings/index.html.j2 +18 -0
  14. geo_activity_playground/webui/settings/templates/settings/kind-renames.html.j2 +25 -0
  15. geo_activity_playground/webui/settings/templates/settings/segmentation.html.j2 +27 -0
  16. geo_activity_playground/webui/static/apple-touch-icon.png +0 -0
  17. geo_activity_playground/webui/static/favicon-48x48.png +0 -0
  18. geo_activity_playground/webui/static/favicon.ico +0 -0
  19. geo_activity_playground/webui/static/favicon.svg +3 -0
  20. geo_activity_playground/webui/static/site.webmanifest +20 -18
  21. geo_activity_playground/webui/static/web-app-manifest-192x192.png +0 -0
  22. geo_activity_playground/webui/static/web-app-manifest-512x512.png +0 -0
  23. geo_activity_playground/webui/summary/templates/summary/index.html.j2 +1 -1
  24. geo_activity_playground/webui/templates/home.html.j2 +1 -8
  25. geo_activity_playground/webui/templates/page.html.j2 +3 -3
  26. {geo_activity_playground-0.29.2.dist-info → geo_activity_playground-0.30.0.dist-info}/METADATA +1 -1
  27. {geo_activity_playground-0.29.2.dist-info → geo_activity_playground-0.30.0.dist-info}/RECORD +30 -26
  28. geo_activity_playground/webui/static/android-chrome-384x384.png +0 -0
  29. geo_activity_playground/webui/static/safari-pinned-tab.svg +0 -121
  30. {geo_activity_playground-0.29.2.dist-info → geo_activity_playground-0.30.0.dist-info}/LICENSE +0 -0
  31. {geo_activity_playground-0.29.2.dist-info → geo_activity_playground-0.30.0.dist-info}/WHEEL +0 -0
  32. {geo_activity_playground-0.29.2.dist-info → geo_activity_playground-0.30.0.dist-info}/entry_points.txt +0 -0
@@ -29,6 +29,7 @@ class Config:
29
29
  )
30
30
  heart_rate_resting: int = 0
31
31
  heart_rate_maximum: Optional[int] = None
32
+ kind_renames: dict[str, str] = dataclasses.field(default_factory=dict)
32
33
  kinds_without_achievements: list[str] = dataclasses.field(default_factory=list)
33
34
  metadata_extraction_regexes: list[str] = dataclasses.field(default_factory=list)
34
35
  num_processes: Optional[int] = 1
@@ -39,6 +40,7 @@ class Config:
39
40
  strava_client_id: int = 131693
40
41
  strava_client_secret: str = "0ccc0100a2c218512a7ef0cea3b0e322fb4b4365"
41
42
  strava_client_code: Optional[str] = None
43
+ time_diff_threshold_seconds: Optional[int] = 30
42
44
  upload_password: Optional[str] = None
43
45
 
44
46
 
@@ -82,11 +82,15 @@ def enrich_activities(config: Config) -> None:
82
82
  )
83
83
  continue
84
84
 
85
+ # Rename kinds if needed.
86
+ if metadata["kind"] in config.kind_renames:
87
+ metadata["kind"] = config.kind_renames[metadata["kind"]]
88
+
85
89
  # Enrich time series.
86
90
  if metadata["kind"] in config.kinds_without_achievements:
87
91
  metadata["consider_for_achievements"] = False
88
92
  time_series = _embellish_single_time_series(
89
- time_series, metadata.get("start", None)
93
+ time_series, metadata.get("start", None), config.time_diff_threshold_seconds
90
94
  )
91
95
  metadata.update(_get_metadata_from_timeseries(time_series))
92
96
 
@@ -131,7 +135,9 @@ def _compute_moving_time(time_series: pd.DataFrame) -> datetime.timedelta:
131
135
 
132
136
 
133
137
  def _embellish_single_time_series(
134
- timeseries: pd.DataFrame, start: Optional[datetime.datetime] = None
138
+ timeseries: pd.DataFrame,
139
+ start: Optional[datetime.datetime],
140
+ time_diff_threshold_seconds: int,
135
141
  ) -> pd.DataFrame:
136
142
  if start is not None and pd.api.types.is_dtype_equal(
137
143
  timeseries["time"].dtype, "int64"
@@ -153,10 +159,12 @@ def _embellish_single_time_series(
153
159
  timeseries["latitude"],
154
160
  timeseries["longitude"],
155
161
  ).fillna(0.0)
156
- time_diff_threshold_seconds = 30
157
- time_diff = (timeseries["time"] - timeseries["time"].shift(1)).dt.total_seconds()
158
- jump_indices = time_diff >= time_diff_threshold_seconds
159
- distances.loc[jump_indices] = 0.0
162
+ if time_diff_threshold_seconds:
163
+ time_diff = (
164
+ timeseries["time"] - timeseries["time"].shift(1)
165
+ ).dt.total_seconds()
166
+ jump_indices = time_diff >= time_diff_threshold_seconds
167
+ distances.loc[jump_indices] = 0.0
160
168
 
161
169
  if "distance_km" not in timeseries.columns:
162
170
  timeseries["distance_km"] = pd.Series(np.cumsum(distances)) / 1000
@@ -173,7 +181,10 @@ def _embellish_single_time_series(
173
181
  timeseries = timeseries.loc[~potential_jumps].copy()
174
182
 
175
183
  if "segment_id" not in timeseries.columns:
176
- timeseries["segment_id"] = np.cumsum(jump_indices)
184
+ if time_diff_threshold_seconds:
185
+ timeseries["segment_id"] = np.cumsum(jump_indices)
186
+ else:
187
+ timeseries["segment_id"] = 0
177
188
 
178
189
  if "x" not in timeseries.columns:
179
190
  x, y = compute_tile_float(timeseries["latitude"], timeseries["longitude"], 0)
@@ -8,7 +8,6 @@ import typing
8
8
 
9
9
 
10
10
  def dir_wrapper(path: pathlib.Path) -> typing.Callable[[], pathlib.Path]:
11
- @functools.cache
12
11
  def wrapper() -> pathlib.Path:
13
12
  path.mkdir(exist_ok=True, parents=True)
14
13
  return path
@@ -17,7 +16,6 @@ def dir_wrapper(path: pathlib.Path) -> typing.Callable[[], pathlib.Path]:
17
16
 
18
17
 
19
18
  def file_wrapper(path: pathlib.Path) -> typing.Callable[[], pathlib.Path]:
20
- @functools.cache
21
19
  def wrapper() -> pathlib.Path:
22
20
  path.parent.mkdir(exist_ok=True, parents=True)
23
21
  return path
@@ -139,7 +139,7 @@ def try_import_strava(config: Config) -> bool:
139
139
  "commute": activity.commute,
140
140
  "distance_km": activity.distance / 1000,
141
141
  "name": activity.name,
142
- "kind": str(activity.type),
142
+ "kind": str(activity.type.root),
143
143
  "start": convert_to_datetime_ns(activity.start_date),
144
144
  "elapsed_time": activity.elapsed_time,
145
145
  "equipment": gear_names[activity.gear_id],
@@ -115,6 +115,8 @@ class ActivityController:
115
115
  result["altitude_time_plot"] = altitude_time_plot(time_series)
116
116
  if "heartrate" in time_series.columns:
117
117
  result["heartrate_time_plot"] = heart_rate_time_plot(time_series)
118
+ if "cadence" in time_series.columns:
119
+ result["cadence_time_plot"] = cadence_time_plot(time_series)
118
120
  return result
119
121
 
120
122
  def render_sharepic(self, id: int) -> bytes:
@@ -324,6 +326,20 @@ def heart_rate_time_plot(time_series: pd.DataFrame) -> str:
324
326
  )
325
327
 
326
328
 
329
+ def cadence_time_plot(time_series: pd.DataFrame) -> str:
330
+ return (
331
+ alt.Chart(time_series, title="Cadence")
332
+ .mark_line()
333
+ .encode(
334
+ alt.X("time", title="Time"),
335
+ alt.Y("cadence", title="Cadence"),
336
+ alt.Color("segment_id:N", title="Segment"),
337
+ )
338
+ .interactive(bind_y=False)
339
+ .to_json(format="vega")
340
+ )
341
+
342
+
327
343
  def heart_rate_zone_plot(heart_zones: pd.DataFrame) -> str:
328
344
  return (
329
345
  alt.Chart(heart_zones, title="Heart Rate Zones")
@@ -41,7 +41,7 @@
41
41
  <div class="col">
42
42
  <h2>Activities</h2>
43
43
 
44
- <table class="table">
44
+ <table class="table table-sort table-arrows">
45
45
  <thead>
46
46
  <tr>
47
47
  <th>Name</th>
@@ -50,12 +50,12 @@
50
50
  <div class="col">
51
51
  <h2>Activities</h2>
52
52
 
53
- <table class="table">
53
+ <table class="table table-sort table-arrows">
54
54
  <thead>
55
55
  <tr>
56
56
  <th>Name</th>
57
57
  <th>Date</th>
58
- <th>Distance / km</th>
58
+ <th class="numeric-sort">Distance / km</th>
59
59
  <th>Elapsed time</th>
60
60
  <th>Equipment</th>
61
61
  <th>Kind</th>
@@ -129,6 +129,17 @@
129
129
  </div>
130
130
  {% endif %}
131
131
 
132
+ {% if cadence_time_plot is defined %}
133
+ <h2>Cadence</h2>
134
+
135
+ <div class="row mb-3">
136
+ <div class="col-md-4">
137
+ {{ vega_direct("cadence_time_plot", cadence_time_plot) }}
138
+ </div>
139
+ </div>
140
+ {% endif %}
141
+
142
+
132
143
  <h2>Share picture</h2>
133
144
 
134
145
  <p><img src="{{ url_for('.sharepic', id=activity.id) }}" /></p>
@@ -177,11 +188,11 @@
177
188
 
178
189
  <p><a href="{{ url_for('.name', name=activity['name']) }}">Overview over these activities</a></p>
179
190
 
180
- <table class="table">
191
+ <table class="table table-sort table-arrows">
181
192
  <thead>
182
193
  <tr>
183
194
  <th>Date</th>
184
- <th>Distance / km</th>
195
+ <th class="numeric-sort">Distance / km</th>
185
196
  <th>Elapsed time</th>
186
197
  <th>Equipment</th>
187
198
  <th>Kind</th>
@@ -9,7 +9,7 @@
9
9
 
10
10
  <div class="row mb-3">
11
11
  <div class="col">
12
- <table class="table">
12
+ <table class="table table-sort table-arrows">
13
13
  <thead>
14
14
  <tr>
15
15
  <th>Equipment</th>
@@ -1,4 +1,8 @@
1
+ from functools import reduce
2
+
3
+ import dateutil.parser
1
4
  from flask import Blueprint
5
+ from flask import flash
2
6
  from flask import render_template
3
7
  from flask import request
4
8
  from flask import Response
@@ -6,15 +10,92 @@ from flask import Response
6
10
  from ...core.activities import ActivityRepository
7
11
 
8
12
 
13
+ def reduce_or(selections):
14
+ return reduce(lambda a, b: a | b, selections)
15
+
16
+
17
+ def reduce_and(selections):
18
+ return reduce(lambda a, b: a & b, selections)
19
+
20
+
9
21
  def make_search_blueprint(repository: ActivityRepository) -> Blueprint:
10
22
  blueprint = Blueprint("search", __name__, template_folder="templates")
11
23
 
12
- @blueprint.route("/", methods=["POST"])
24
+ @blueprint.route("/")
13
25
  def index():
14
- activities = []
15
- for _, row in repository.meta.iterrows():
16
- if request.form["name"] in row["name"]:
17
- activities.append(row)
18
- return render_template("search/index.html.j2", activities=activities)
26
+ kinds_avail = repository.meta["kind"].unique()
27
+ equipments_avail = repository.meta["equipment"].unique()
28
+
29
+ print(request.args)
30
+
31
+ activities = repository.meta
32
+
33
+ if equipments := request.args.getlist("equipment"):
34
+ selection = reduce_or(
35
+ activities["equipment"] == equipment for equipment in equipments
36
+ )
37
+ activities = activities.loc[selection]
38
+
39
+ if kinds := request.args.getlist("kind"):
40
+ selection = reduce_or(activities["kind"] == kind for kind in kinds)
41
+ activities = activities.loc[selection]
42
+
43
+ name_exact = bool(request.args.get("name_exact", False))
44
+ name_casing = bool(request.args.get("name_casing", False))
45
+ if name := request.args.get("name", ""):
46
+ if name_casing:
47
+ haystack = activities["name"]
48
+ needle = name
49
+ else:
50
+ haystack = activities["name"].str.lower()
51
+ needle = name.lower()
52
+ if name_exact:
53
+ selection = haystack == needle
54
+ else:
55
+ selection = [needle in an for an in haystack]
56
+ activities = activities.loc[selection]
57
+
58
+ begin = request.args.get("begin", "")
59
+ end = request.args.get("end", "")
60
+
61
+ if begin:
62
+ try:
63
+ begin_dt = dateutil.parser.parse(begin)
64
+ except ValueError:
65
+ flash(
66
+ f"Cannot parse date `{begin}`, please use a different format.",
67
+ category="danger",
68
+ )
69
+ else:
70
+ selection = begin_dt <= activities["start"]
71
+ activities = activities.loc[selection]
72
+
73
+ if end:
74
+ try:
75
+ end_dt = dateutil.parser.parse(end)
76
+ except ValueError:
77
+ flash(
78
+ f"Cannot parse date `{end}`, please use a different format.",
79
+ category="danger",
80
+ )
81
+ else:
82
+ selection = activities["start"] < end_dt
83
+ activities = activities.loc[selection]
84
+
85
+ activities = activities.sort_values("start", ascending=False)
86
+
87
+ return render_template(
88
+ "search/index.html.j2",
89
+ activities=list(activities.iterrows()),
90
+ equipments=request.args.getlist("equipment"),
91
+ equipments_avail=sorted(equipments_avail),
92
+ kinds=request.args.getlist("kind"),
93
+ kinds_avail=sorted(kinds_avail),
94
+ name=name,
95
+ name_exact=name_exact,
96
+ name_casing=name_casing,
97
+ begin=begin,
98
+ end=end,
99
+ )
19
100
 
20
101
  return blueprint
@@ -1,34 +1,87 @@
1
1
  {% extends "page.html.j2" %}
2
2
 
3
3
  {% block container %}
4
+
5
+ <h1 class="row mb-3">Activities Overview & Search</h1>
6
+
4
7
  <div class="row mb-3">
5
- <div class="col">
6
- <h1>Search Results</h1>
8
+ <div class="col-md-2">
9
+ <form>
10
+ <div class="mb-3">
11
+ <label for="name" class="form-label">Name</label>
12
+ <input type="text" class="form-control" id="name" name="name" value="{{ name }}">
13
+ <div class="form-check">
14
+ <input class="form-check-input" type="checkbox" name="name_exact" value="true" id="name_exact" {% if
15
+ name_exact %} checked {% endif %}>
16
+ <label class="form-check-label" for="name_exact">
17
+ Exact match
18
+ </label>
19
+ </div>
20
+ <div class="form-check">
21
+ <input class="form-check-input" type="checkbox" name="name_casing" value="true" id="name_casing" {%
22
+ if name_casing %} checked {% endif %}>
23
+ <label class="form-check-label" for="name_casing">
24
+ Case sensitive
25
+ </label>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="mb-3">
30
+ <label for="begin" class="form-label">After</label>
31
+ <input type="text" class="form-control" id="begin" name="begin" value="{{ begin }}">
32
+ <label for="end" class="form-label">Until</label>
33
+ <input type="text" class="form-control" id="end" name="end" value="{{ end }}">
34
+ </div>
35
+
36
+ <div class="mb-3">
37
+ <label for="" class="form-label">Kind</label>
38
+ {% for kind in kinds_avail %}
39
+ <div class="form-check">
40
+ <input class="form-check-input" type="checkbox" name="kind" value="{{ kind }}" id="kind_{{ kind }}"
41
+ {% if kind in kinds %} checked {% endif %}>
42
+ <label class="form-check-label" for="kind_{{ kind }}">
43
+ {{ kind }}
44
+ </label>
45
+ </div>
46
+ {% endfor %}
47
+ </div>
48
+
49
+ <div class="mb-3">
50
+ <label for="" class="form-label">Equipment</label>
51
+ {% for equipment in equipments_avail %}
52
+ <div class="form-check">
53
+ <input class="form-check-input" type="checkbox" name="equipment" value="{{ equipment }}"
54
+ id="equipment_{{ equipment }}" {% if equipment in equipments %} checked {% endif %}>
55
+ <label class="form-check-label" for="equipment_{{ equipment }}">
56
+ {{ equipment }}
57
+ </label>
58
+ </div>
59
+ {% endfor %}
60
+ </div>
61
+
62
+ <button type="submit" class="btn btn-primary">Search</button>
63
+ </form>
7
64
  </div>
8
- </div>
9
65
 
10
- <div class="row mb-3">
11
- <div class="col">
12
- <table class="table">
66
+ <div class="col-md-10">
67
+ <table class="table table-sort table-arrows">
13
68
  <thead>
14
69
  <tr>
15
70
  <th>Name</th>
16
71
  <th>Start</th>
17
72
  <th>Kind</th>
18
- <th>Distance</th>
73
+ <th class="numeric-sort">Distance</th>
19
74
  <th>Elapsed time</th>
20
- <th>Commute</th>
21
75
  </tr>
22
76
  </thead>
23
77
  <tbody>
24
- {% for activity in activities %}
78
+ {% for index, activity in activities %}
25
79
  <tr>
26
- <td><a href="{{ url_for('activity.show', id=activity.id) }}">{{ activity['name'] }}</a></td>
27
- <td>{{ activity.start }}</td>
28
- <td>{{ activity.kind }}</td>
80
+ <td><a href="{{ url_for('activity.show', id=activity['id']) }}">{{ activity['name'] }}</a></td>
81
+ <td>{{ activity['start'] }}</td>
82
+ <td>{{ activity['kind'] }}</td>
29
83
  <td>{{ '%.1f' % activity["distance_km"] }} km</td>
30
84
  <td>{{ activity.elapsed_time }}</td>
31
- <td>{{ activity.commute }}</td>
32
85
  </tr>
33
86
  {% endfor %}
34
87
  </tbody>
@@ -1,3 +1,4 @@
1
+ import shutil
1
2
  from typing import Optional
2
3
 
3
4
  from flask import Blueprint
@@ -8,6 +9,7 @@ from flask import request
8
9
  from flask import url_for
9
10
 
10
11
  from geo_activity_playground.core.config import ConfigAccessor
12
+ from geo_activity_playground.core.paths import _activity_enriched_dir
11
13
  from geo_activity_playground.webui.authenticator import Authenticator
12
14
  from geo_activity_playground.webui.authenticator import needs_authentication
13
15
  from geo_activity_playground.webui.settings.controller import SettingsController
@@ -139,6 +141,33 @@ def make_settings_blueprint(
139
141
  "settings/heart-rate.html.j2", **settings_controller.render_heart_rate()
140
142
  )
141
143
 
144
+ @blueprint.route("/kind-renames", methods=["GET", "POST"])
145
+ @needs_authentication(authenticator)
146
+ def kind_renames():
147
+ if request.method == "POST":
148
+ rules_str = request.form["rules_str"]
149
+ rules = {}
150
+ try:
151
+ for line in rules_str.strip().split("\n"):
152
+ first, second = line.split(" => ")
153
+ rules[first.strip()] = second.strip()
154
+ config_accessor().kind_renames = rules
155
+ config_accessor.save()
156
+ flash(f"Kind renames updated.", category="success")
157
+ shutil.rmtree(_activity_enriched_dir)
158
+ return redirect(url_for("upload.reload"))
159
+ except ValueError as e:
160
+ flash(f"Cannot parse this. Please try again.", category="danger")
161
+ else:
162
+ rules_str = "\n".join(
163
+ f"{key} =&gt; {value}"
164
+ for key, value in config_accessor().kind_renames.items()
165
+ )
166
+ return render_template(
167
+ "settings/kind-renames.html.j2",
168
+ rules_str=rules_str,
169
+ )
170
+
142
171
  @blueprint.route("/kinds-without-achievements", methods=["GET", "POST"])
143
172
  @needs_authentication(authenticator)
144
173
  def kinds_without_achievements():
@@ -173,6 +202,21 @@ def make_settings_blueprint(
173
202
  **settings_controller.render_privacy_zones(),
174
203
  )
175
204
 
205
+ @blueprint.route("/segmentation", methods=["GET", "POST"])
206
+ @needs_authentication(authenticator)
207
+ def segmentation():
208
+ if request.method == "POST":
209
+ threshold = int(request.form.get("threshold", 0))
210
+ config_accessor().time_diff_threshold_seconds = threshold
211
+ config_accessor.save()
212
+ flash(f"Threshold set to {threshold}.", category="success")
213
+ shutil.rmtree(_activity_enriched_dir)
214
+ return redirect(url_for("upload.reload"))
215
+ return render_template(
216
+ "settings/segmentation.html.j2",
217
+ threshold=config_accessor().time_diff_threshold_seconds,
218
+ )
219
+
176
220
  @blueprint.route("/sharepic", methods=["GET", "POST"])
177
221
  @needs_authentication(authenticator)
178
222
  def sharepic():
@@ -47,6 +47,15 @@
47
47
  </div>
48
48
  </div>
49
49
  </div>
50
+ <div class="col">
51
+ <div class="card">
52
+ <div class="card-body">
53
+ <h5 class="card-title">Kind renames</h5>
54
+ <p class="card-text">Bulk rename activity kinds</p>
55
+ <a href="{{ url_for('.kind_renames') }}" class="btn btn-primary">Set up kind renames</a>
56
+ </div>
57
+ </div>
58
+ </div>
50
59
  <div class="col">
51
60
  <div class="card">
52
61
  <div class="card-body">
@@ -96,6 +105,15 @@
96
105
  </div>
97
106
  </div>
98
107
  </div>
108
+ <div class="col">
109
+ <div class="card">
110
+ <div class="card-body">
111
+ <h5 class="card-title">Track segmentation</h5>
112
+ <p class="card-text">Split tracks into multiple segments if there are breaks or jumps.</p>
113
+ <a href="{{ url_for('.segmentation') }}" class="btn btn-primary">Set up track segmentations</a>
114
+ </div>
115
+ </div>
116
+ </div>
99
117
  </div>
100
118
  </div>
101
119
  {% endblock %}
@@ -0,0 +1,25 @@
1
+ {% extends "page.html.j2" %}
2
+
3
+ {% block container %}
4
+
5
+ <h1 class="mb-3">Kind renaming</h1>
6
+
7
+ <p>If you have used different apps for tracking, you might have that your bike rides have <i>kind</i> "ride", "Ride",
8
+ "Radfahrt" and so on. In order to unify these, you can specify mappings from old to new names.</p>
9
+
10
+ <p>If you want to unify these to "Ride", enter the following:</p>
11
+
12
+ <pre><code>
13
+ ride =&gt; Ride
14
+ Radfahrt =&gt; Ride
15
+ </code></pre>
16
+
17
+ <form method="POST">
18
+ <div class="mb-3">
19
+ <label for="rules" class="form-label">Rules</label>
20
+ <textarea class="form-control" id=rules" cols="80" rows="10" name="rules_str">{{ rules_str }}</textarea>
21
+ </div>
22
+ <button type="submit" class="btn btn-primary">Save</button>
23
+ </form>
24
+
25
+ {% endblock %}
@@ -0,0 +1,27 @@
1
+ {% extends "page.html.j2" %}
2
+
3
+ {% block container %}
4
+
5
+ <h1 class="mb-3">Track segmentation</h1>
6
+
7
+ <p>Some activity tracking apps or devices automatically pause the recording when there is no movement for a while. Other
8
+ trackers do not record new points when one goes in a straight line. And some users manually pause the activity,
9
+ forget to resume and resume after having moved for a while.</p>
10
+
11
+ <p>Depending on the usage patterns one wants to segment the tracks into segments or really keep them as one long track.
12
+ In order to cater for different use cases, this can be changed with a setting.</p>
13
+
14
+ <p>In the following you can enter a threshold. If these many seconds elapse between two subsequent points in the track,
15
+ these will be considered different segments and not be connected with a straight line. Entering "0" disabled
16
+ segmentation.</p>
17
+
18
+ <form method="POST">
19
+ <div class="mb-3">
20
+ <label for="threshold" class="form-label">Threshold / s</label>
21
+ <input type="text" class="form-control" id="threshold" name="threshold" value="{{ threshold }}" />
22
+ </div>
23
+ <button type="submit" class="btn btn-primary">Save</button>
24
+ </form>
25
+
26
+
27
+ {% endblock %}
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="512" height="512" viewBox="0 0 512 512"><image width="512" height="512" xlink:href="data:image/png;base64,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"></image><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
2
+ @media (prefers-color-scheme: dark) { :root { filter: none; } }
3
+ </style></svg>
@@ -1,19 +1,21 @@
1
1
  {
2
- "name": "",
3
- "short_name": "",
4
- "icons": [
5
- {
6
- "src": "/static/android-chrome-192x192.png",
7
- "sizes": "192x192",
8
- "type": "image/png"
9
- },
10
- {
11
- "src": "/static/android-chrome-384x384.png",
12
- "sizes": "384x384",
13
- "type": "image/png"
14
- }
15
- ],
16
- "theme_color": "#ffffff",
17
- "background_color": "#ffffff",
18
- "display": "standalone"
19
- }
2
+ "name": "MyWebSite",
3
+ "short_name": "MySite",
4
+ "icons": [
5
+ {
6
+ "src": "/static/web-app-manifest-192x192.png",
7
+ "sizes": "192x192",
8
+ "type": "image/png",
9
+ "purpose": "maskable"
10
+ },
11
+ {
12
+ "src": "/static/web-app-manifest-512x512.png",
13
+ "sizes": "512x512",
14
+ "type": "image/png",
15
+ "purpose": "maskable"
16
+ }
17
+ ],
18
+ "theme_color": "#ffffff",
19
+ "background_color": "#ffffff",
20
+ "display": "standalone"
21
+ }
@@ -44,7 +44,7 @@
44
44
  </div>
45
45
 
46
46
  <div class="col-md-8">
47
- <table class="table">
47
+ <table class="table table-sort table-arrows">
48
48
  <thead>
49
49
  <tr>
50
50
  <th style="text-align: right;">Year</th>
@@ -6,17 +6,10 @@
6
6
 
7
7
  {% if latest_activities %}
8
8
  <div class="row mb-3">
9
- <div class="col-md-9">
9
+ <div class="col">
10
10
  <h2>Last 30 days</h2>
11
11
  {{ vega_direct("distance-last-30-days", distance_last_30_days_plot) }}
12
12
  </div>
13
- <div class="col-md-3">
14
- <h2>Search activities</h2>
15
- <form method="post" action="{{ url_for('search.index') }}">
16
- <input type="search" name="name" />
17
- <input type="submit" class="button" />
18
- </form>
19
- </div>
20
13
  </div>
21
14
 
22
15
 
@@ -32,16 +32,15 @@
32
32
  <script src="https://cdn.jsdelivr.net/npm/vega-lite@4"></script>
33
33
  <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
34
34
 
35
-
36
35
  <script src="/static/bootstrap-dark-mode.js"></script>
37
36
 
37
+ <script src="https://cdn.jsdelivr.net/npm/table-sort-js/table-sort.min.js"></script>
38
38
 
39
39
  <!-- Favicon. -->
40
40
  <link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png">
41
41
  <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png">
42
42
  <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png">
43
43
  <link rel="manifest" href="/static/site.webmanifest">
44
- <link rel="mask-icon" href="/static/safari-pinned-tab.svg" color="#5bbad5">
45
44
  <link rel="shortcut icon" href="/static/favicon.ico">
46
45
  <meta name="msapplication-TileColor" content="#da532c">
47
46
  <meta name="msapplication-config" content="/static/browserconfig.xml">
@@ -69,7 +68,8 @@
69
68
  </a>
70
69
  <ul class="dropdown-menu">
71
70
  <li><a class="dropdown-item" href="{{ url_for('calendar.index') }}">Calendar</a></li>
72
- {# <li><a class="dropdown-item" href="{{ url_for('search.index') }}">Search</a></li> #}
71
+ <li><a class="dropdown-item" href="{{ url_for('search.index') }}">Overview & Search</a>
72
+ </li>
73
73
  </ul>
74
74
  </li>
75
75
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geo-activity-playground
3
- Version: 0.29.2
3
+ Version: 0.30.0
4
4
  Summary: Analysis of geo data activities like rides, runs or hikes.
5
5
  License: MIT
6
6
  Author: Martin Ueding
@@ -2,12 +2,12 @@ geo_activity_playground/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
2
2
  geo_activity_playground/__main__.py,sha256=MBZn9K1m3PofiPNTtpsSTVCyB_Gz95TjVP-nb9v_-JE,3989
3
3
  geo_activity_playground/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  geo_activity_playground/core/activities.py,sha256=6IFfTqWGXRVD-DxKho1Nyc9ZV7kvzBWw3ZninXRM0Nk,6578
5
- geo_activity_playground/core/config.py,sha256=DsjZhiq2BZs94rjd7zgt_KTZIjVfxfntiEQZhgq8NeA,4617
5
+ geo_activity_playground/core/config.py,sha256=3xSaPKmNT_h0MHDoYgqOtmqj-x831ETiUKdSFXqrzHs,4744
6
6
  geo_activity_playground/core/coordinates.py,sha256=tDfr9mlXhK6E_MMIJ0vYWVCoH0Lq8uyuaqUgaa8i0jg,966
7
- geo_activity_playground/core/enrichment.py,sha256=CwZhW-svgPAYbdx3n9kvKlTgcsiCaeuJfSRCC4JxX6g,7411
7
+ geo_activity_playground/core/enrichment.py,sha256=fUmk6avy_rqePlHmJQFTQhAxjgIRaxxmq18N2OSXBBg,7771
8
8
  geo_activity_playground/core/heart_rate.py,sha256=IwMt58TpjOYqpAxtsj07zP2ttpN_J3GZeiv-qGhYyJc,1598
9
9
  geo_activity_playground/core/heatmap.py,sha256=bRLQHzmTEsQbX8XWeg85x_lRGk272UoYRiCnoxZ5da0,4189
10
- geo_activity_playground/core/paths.py,sha256=BZYuIg1LVHjuWLKB0Iz6Cevlq-XSalpCes_ClFuXa0s,2410
10
+ geo_activity_playground/core/paths.py,sha256=tazkjcDFkQ1YrFPeWKeh-TqUrCeK-u0fG6U0VGsxIpo,2368
11
11
  geo_activity_playground/core/privacy_zones.py,sha256=4TumHsVUN1uW6RG3ArqTXDykPVipF98DCxVBe7YNdO8,512
12
12
  geo_activity_playground/core/similarity.py,sha256=Jo8jRViuORCxdIGvyaflgsQhwu9S_jn10a450FRL18A,3159
13
13
  geo_activity_playground/core/tasks.py,sha256=aMDBWJqp6ek2ao6G6Xa8GOSZbcQqXoWL74SGRowRPIk,2942
@@ -23,7 +23,7 @@ geo_activity_playground/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
23
23
  geo_activity_playground/importers/activity_parsers.py,sha256=XNQs0ziqAcVqIoiLAX5Ndmhb6v__29XdjUPvNvc7oBI,11082
24
24
  geo_activity_playground/importers/csv_parser.py,sha256=O1pP5GLhWhnWcy2Lsrr9g17Zspuibpt-GtZ3ZS5eZF4,2143
25
25
  geo_activity_playground/importers/directory.py,sha256=IPnr1xk3beznmPVjfWL6AQiEKA4WN5EDIfnzrM0Tzlc,5767
26
- geo_activity_playground/importers/strava_api.py,sha256=CLO1tW_delZwVkSLlYteUeX1jsP73ICTuLxTQeUDWTw,7770
26
+ geo_activity_playground/importers/strava_api.py,sha256=cJCZsLemhOlxTtZh0z_npidgae9SD5HyEUry2uvem_A,7775
27
27
  geo_activity_playground/importers/strava_checkout.py,sha256=N-uGTkhBJMC7cPYjRRXHOSLwpK3wc6aaSrY2RQfSitA,9419
28
28
  geo_activity_playground/importers/test_csv_parser.py,sha256=LXqva7GuSAfXYE2zZQrg-69lCtfy5MxLSq6BRwL_VyI,1191
29
29
  geo_activity_playground/importers/test_directory.py,sha256=ljXokx7q0OgtHvEdHftcQYEmZJUDVv3OOF5opklxdT4,724
@@ -31,11 +31,11 @@ geo_activity_playground/importers/test_strava_api.py,sha256=4vX7wDr1a9aRh8myxNrI
31
31
  geo_activity_playground/webui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  geo_activity_playground/webui/activity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  geo_activity_playground/webui/activity/blueprint.py,sha256=upQzZa5sKApj_Fmu6PziFDboi7SBL5Zsi-tNSSNPlEE,1759
34
- geo_activity_playground/webui/activity/controller.py,sha256=PQ0uwpIFvcfDHG5TL03kF0jtg7vbtByh3Lrm_90yFNk,18956
35
- geo_activity_playground/webui/activity/templates/activity/day.html.j2,sha256=r3qKl9uTzOko4R-ZzyYAZt1j61JSevYP4g0Yi06HHPg,2702
34
+ geo_activity_playground/webui/activity/controller.py,sha256=iE9JILmfqOWgXWT4KgqrXLpQJ8xSqfiNKeJw6vnWDAc,19459
35
+ geo_activity_playground/webui/activity/templates/activity/day.html.j2,sha256=9jZ1lunfcigRGn2Cp65w6FrWy5EQGSECM_flFNvthrM,2726
36
36
  geo_activity_playground/webui/activity/templates/activity/lines.html.j2,sha256=5gB1aDjRgi_RventenRfC10_FtMT4ch_VuWvA9AMlBY,1121
37
- geo_activity_playground/webui/activity/templates/activity/name.html.j2,sha256=RDLEt6ip8_ngmdLgaC5jg92Dk-F2umGwKkd8cWmvVko,2400
38
- geo_activity_playground/webui/activity/templates/activity/show.html.j2,sha256=q0O1zHrfjD9lr6smuqmPYcy21-2hzNQFIPubptiRcSM,6610
37
+ geo_activity_playground/webui/activity/templates/activity/name.html.j2,sha256=vDEZGJXmrQ6goxmMdVsTSd1QMQXorlZ4X-ZjwsP90yA,2445
38
+ geo_activity_playground/webui/activity/templates/activity/show.html.j2,sha256=yKJSnPKfOxaAqaHsEgpYOWruPZ96Su9h5d41m7uOseA,6859
39
39
  geo_activity_playground/webui/app.py,sha256=foON49jw8klBJ3GF70DDjgz-_KRDPFvC31_mScaqDXk,4255
40
40
  geo_activity_playground/webui/auth/blueprint.py,sha256=Lx-ZvMnfHLC1CMre1xPQI3k_pCtQoZvgRhtmafULzoE,812
41
41
  geo_activity_playground/webui/auth/templates/auth/index.html.j2,sha256=ILQ5HvTEYc3OrtOAIFt1VrqWorVD70V9DC342znmP70,579
@@ -53,7 +53,7 @@ geo_activity_playground/webui/entry_controller.py,sha256=kTEToBtR1T4l30cV3HkCK3K
53
53
  geo_activity_playground/webui/equipment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  geo_activity_playground/webui/equipment/blueprint.py,sha256=_NIhRJuJNbXpEd_nEPo01AqnUqPgo1vawFn7E3yoeng,636
55
55
  geo_activity_playground/webui/equipment/controller.py,sha256=Sx9i2RCK7m4W6FgpDfRMewcH64VBQfUhHJdTSCwMqOU,4079
56
- geo_activity_playground/webui/equipment/templates/equipment/index.html.j2,sha256=FEfxB4XwVYELAOdjVlSlprjJH_kLmE-pNWEEXdPqc6I,1778
56
+ geo_activity_playground/webui/equipment/templates/equipment/index.html.j2,sha256=fvRaDbCuiSZ8AzJTpu1dk8FTAGZ2yfsLhprtVYHFZWo,1802
57
57
  geo_activity_playground/webui/explorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
58
  geo_activity_playground/webui/explorer/blueprint.py,sha256=EKnBs8llqT6Wy1uac18dF2epp3TebF9p3iGlSbj6Vl0,2337
59
59
  geo_activity_playground/webui/explorer/controller.py,sha256=pIzWh0TpLJgKQZlS325-QT7nA1q9ms7fRqQIp24PNfo,11705
@@ -63,18 +63,20 @@ geo_activity_playground/webui/heatmap/blueprint.py,sha256=bjQu-HL3QN5UpJ6tHOifhc
63
63
  geo_activity_playground/webui/heatmap/heatmap_controller.py,sha256=Q17Ay8hbU5ZlUiz2a9S-ULWrnNGWQHvTTV3kDY5FhNc,7411
64
64
  geo_activity_playground/webui/heatmap/templates/heatmap/index.html.j2,sha256=YLeu6P4djl8G4qAXR6DhetseqrbOodN7aN4coocknc4,1875
65
65
  geo_activity_playground/webui/plot_util.py,sha256=pTTQoqOCkLVjkgOit7mbry28kMruZIL8amZozSzEpxQ,283
66
- geo_activity_playground/webui/search/blueprint.py,sha256=b3TCIplY60MWE2_VsKHuoV1LAgNwd_T5ft5t0CKALFI,642
67
- geo_activity_playground/webui/search/templates/search/index.html.j2,sha256=FvNRoDfUlSzXjM_tqZY_fDhuhUDgbPaY73q56gdvF1A,1130
68
- geo_activity_playground/webui/settings/blueprint.py,sha256=O5GqbbzETOYq5JESoI-F2br8hnk6xHyJzqWTQDnbNEE,7623
66
+ geo_activity_playground/webui/search/blueprint.py,sha256=7TDsiqEowMyHNlFImk-hCGso69KOieG4rfJnLRHpRz8,3300
67
+ geo_activity_playground/webui/search/templates/search/index.html.j2,sha256=Qv_05LFOrLPxto0hPjy0j0PPySYCIRDJQAQcXZSCfZE,3792
68
+ geo_activity_playground/webui/settings/blueprint.py,sha256=Jeh2MwRmCNF6BfwrHSUixLKOTPFlwZ4Mrb68Botr6Q8,9487
69
69
  geo_activity_playground/webui/settings/controller.py,sha256=MIZVBfoGNvmJnB_ECV_x5eH2i6gDZvkWSQ4PcSKyLKs,9170
70
70
  geo_activity_playground/webui/settings/templates/settings/admin-password.html.j2,sha256=VYwddpObD1RpeTH5Dm4y7VtmT7kwURDCIjxyzJeq08c,495
71
71
  geo_activity_playground/webui/settings/templates/settings/color-schemes.html.j2,sha256=CaFbYkkU1yGTOlAzGq97u3tVgS79RIo7PEmiVjuZiBc,1226
72
72
  geo_activity_playground/webui/settings/templates/settings/equipment-offsets.html.j2,sha256=ltaYwFe8S8Mi72ddmIp1vwqlu8MEXXjBGfbpN2WBTC4,1728
73
73
  geo_activity_playground/webui/settings/templates/settings/heart-rate.html.j2,sha256=UPT3MegRgSeff36lhCo0l3ZwhqNSIg5gM6h2s32GkCY,4255
74
- geo_activity_playground/webui/settings/templates/settings/index.html.j2,sha256=-ZSlR6htaeMMOf4ISUSzWPu5BUhYODuAmcWPN0ZoBno,4443
74
+ geo_activity_playground/webui/settings/templates/settings/index.html.j2,sha256=r7HBq91BKBrWT2_TNR7OcLokuOcUK-Czyi_zOjveIRk,5287
75
+ geo_activity_playground/webui/settings/templates/settings/kind-renames.html.j2,sha256=yWVIMJq0XOpeTLglEqLxlQAG0mVhaCVw9j0Iu4nIrgI,757
75
76
  geo_activity_playground/webui/settings/templates/settings/kinds-without-achievements.html.j2,sha256=IdUfXon1Pu8zX3NirKb28ypshLHOvZRpz2T4bJrzrak,1067
76
77
  geo_activity_playground/webui/settings/templates/settings/metadata-extraction.html.j2,sha256=EUHZ-MWnSPAkiad0CHSj9UUkRUQwItTbKYJcZz9TVi0,2314
77
78
  geo_activity_playground/webui/settings/templates/settings/privacy-zones.html.j2,sha256=7BxFvCaVJOEqbImyK5vxCmhh-NGSFaRa9ARhqjZeYJ0,3093
79
+ geo_activity_playground/webui/settings/templates/settings/segmentation.html.j2,sha256=QV72TZcIxqql-vEsq2lKHzo5UxoxeeXkRA9se46GWKU,1187
78
80
  geo_activity_playground/webui/settings/templates/settings/sharepic.html.j2,sha256=qZkfEpd4CtKKMaSSVadqvNEgMRYLV-0X-pw5-nJvukk,678
79
81
  geo_activity_playground/webui/settings/templates/settings/strava.html.j2,sha256=FrXgT-m1PgvsQWo9kMKpk8QenKeifSDBCZFqKgsHRxQ,1827
80
82
  geo_activity_playground/webui/square_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -82,23 +84,25 @@ geo_activity_playground/webui/square_planner/blueprint.py,sha256=r2VkSM547chX85g
82
84
  geo_activity_playground/webui/square_planner/controller.py,sha256=ML6ftOyr3tTh7D4DBcRP76CvkyTxqI5QWgMeG9wC8FE,3561
83
85
  geo_activity_playground/webui/square_planner/templates/square_planner/index.html.j2,sha256=aIB0ql5qW4HXfp0ENksYYOk9vTgBitwyHJX5W7bqkeY,6512
84
86
  geo_activity_playground/webui/static/android-chrome-192x192.png,sha256=yxZgo8Jw4hrgOgrn3tvi9G0AXWGFD29kjCuxC07WoT4,17610
85
- geo_activity_playground/webui/static/android-chrome-384x384.png,sha256=bgeqAdyvDZBMch7rVi3qSawf0Zr4Go0EG8Ws_B8NApY,49297
86
87
  geo_activity_playground/webui/static/android-chrome-512x512.png,sha256=Uiv62gQpUjMOdp9d6exzd6IyOi5zgQdgjIVVWYw5m98,38891
87
- geo_activity_playground/webui/static/apple-touch-icon.png,sha256=NsVMubJtVzslhql4GZlwTWm4cNRowgcEOT53RuZV190,16549
88
+ geo_activity_playground/webui/static/apple-touch-icon.png,sha256=TNLa0YIS1mbWajvIQthC2bGve6ET3DbJzrAbs6Pf3Ps,13046
88
89
  geo_activity_playground/webui/static/bootstrap-dark-mode.js,sha256=XfyhxIFgjDc6aEj0kYgKpG5zjS5gvyhWCJmNfUG4HJY,2622
89
90
  geo_activity_playground/webui/static/browserconfig.xml,sha256=u5EvU6U1jKSDiXHW0i4rXrs0lT_tmS82otbJnvmccrk,253
90
91
  geo_activity_playground/webui/static/favicon-16x16.png,sha256=Yy8lRjGB7itDaeUI_l_Toq3OO0gzgPGnqIfM3CqcQy0,1419
91
92
  geo_activity_playground/webui/static/favicon-32x32.png,sha256=K52R99pLGgWHnjFPPkVieBm051Er-sTCiMvgLr9Alrg,2587
92
- geo_activity_playground/webui/static/favicon.ico,sha256=uVNZlrF22zn1lcCS_9wAoWLhBt1mpGSGMmHZwwskIVc,12014
93
+ geo_activity_playground/webui/static/favicon-48x48.png,sha256=NIIuC1OV1umv2pETJH2yDUZhhzJDk0TERsbwA5tQM9A,2008
94
+ geo_activity_playground/webui/static/favicon.ico,sha256=zAkbToeh1fq8rh6osWyEjr-cgdX-ec5viI0vPAwLn7A,15086
95
+ geo_activity_playground/webui/static/favicon.svg,sha256=gwESIDvoxOpg3tHvbiAc-wVEM4fY0pFzWnX_guQcv1c,52247
93
96
  geo_activity_playground/webui/static/mstile-150x150.png,sha256=j1ANUQJ1Xi1DR2sGqYZztob2ypfGw04eNtGpN9SxExA,11964
94
- geo_activity_playground/webui/static/safari-pinned-tab.svg,sha256=OzoEVGY0igWRXM1NiM3SRKugdICBN7aB_XuxaC3Mu9Q,8371
95
- geo_activity_playground/webui/static/site.webmanifest,sha256=4vYxdPMpwTdB8EmOvHkkYcjZ8Yrci3pOwwY3o_VwACA,440
97
+ geo_activity_playground/webui/static/site.webmanifest,sha256=G5wl5Ahfz6wyDt-Z7ea-ywG1WS1S7ZQ_QX9TM2ox6Lk,450
98
+ geo_activity_playground/webui/static/web-app-manifest-192x192.png,sha256=eEImN6iWfSv-EnSNPL5WbX84PKakse_8VZMBPWWye3o,13582
99
+ geo_activity_playground/webui/static/web-app-manifest-512x512.png,sha256=vU9oQ4HnQerFDZVzcAT9twj4_Doc6_9v9wVvoRI-f_E,48318
96
100
  geo_activity_playground/webui/summary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
101
  geo_activity_playground/webui/summary/blueprint.py,sha256=tfA2aPF19yKwkQOb5lPQBySoQYYhTn49Iuh0SYvsGP8,593
98
102
  geo_activity_playground/webui/summary/controller.py,sha256=cWn5szA1o5Vjht0DyhRwBjmwqJryrLcmm4FUdmVpUoo,9443
99
- geo_activity_playground/webui/summary/templates/summary/index.html.j2,sha256=rsII1eMY-xNugh8A9SecnEcDZqkEOWYIfiHAGroQYuM,4442
100
- geo_activity_playground/webui/templates/home.html.j2,sha256=eIPNyLHhUNVTITDbn6nR82-ZJA5Dp4SY41cZTjymZDU,2428
101
- geo_activity_playground/webui/templates/page.html.j2,sha256=HN7s4i4kR3laMFkToktjwmTQiTHdrY3nqKcCVO9nKdA,11088
103
+ geo_activity_playground/webui/summary/templates/summary/index.html.j2,sha256=jaa981rFwf71Sj_ryvB0_bu--HAxbcET3WqG5ChffLU,4466
104
+ geo_activity_playground/webui/templates/home.html.j2,sha256=A5DXztAuSIczAdtnGjkZu2QBezrsZ4Rjp7prc7iK4kk,2167
105
+ geo_activity_playground/webui/templates/page.html.j2,sha256=znTbtD2NALrhmUN_Q-F1ElGlKtecoUv8vOCcUtojrdI,11134
102
106
  geo_activity_playground/webui/tile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
107
  geo_activity_playground/webui/tile/blueprint.py,sha256=cK0o2Z3BrLycgF9zw0F8s9qF-JaYDbF5Gog-GXDtUZ8,943
104
108
  geo_activity_playground/webui/tile/controller.py,sha256=PISh4vKs27b-LxFfTARtr5RAwHFresA1Kw1MDcERSRU,1221
@@ -107,8 +111,8 @@ geo_activity_playground/webui/upload/blueprint.py,sha256=xX9scEmleN_dL03jfhWRh5y
107
111
  geo_activity_playground/webui/upload/controller.py,sha256=AUcDotTw-h30XgY5Te0kAqRfL7xXqK74iVO13g20pD0,4085
108
112
  geo_activity_playground/webui/upload/templates/upload/index.html.j2,sha256=I1Ix8tDS3YBdi-HdaNfjkzYXVVCjfUTe5PFTnap1ydc,775
109
113
  geo_activity_playground/webui/upload/templates/upload/reload.html.j2,sha256=YZWX5eDeNyqKJdQAywDBcU8DZBm22rRBbZqFjrFrCvQ,556
110
- geo_activity_playground-0.29.2.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
111
- geo_activity_playground-0.29.2.dist-info/METADATA,sha256=GNn0dY6lLwtyLfJ9PDljs1QeZi8Xaro-_ElwOZtv0zQ,1612
112
- geo_activity_playground-0.29.2.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
113
- geo_activity_playground-0.29.2.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
114
- geo_activity_playground-0.29.2.dist-info/RECORD,,
114
+ geo_activity_playground-0.30.0.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
115
+ geo_activity_playground-0.30.0.dist-info/METADATA,sha256=HasSX5fDpl8x4jZP5hCKkECUiP-cA_FVQRBQwwqa6L4,1612
116
+ geo_activity_playground-0.30.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
117
+ geo_activity_playground-0.30.0.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
118
+ geo_activity_playground-0.30.0.dist-info/RECORD,,
@@ -1,121 +0,0 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
- width="400.000000pt" height="400.000000pt" viewBox="0 0 400.000000 400.000000"
6
- preserveAspectRatio="xMidYMid meet">
7
- <metadata>
8
- Created by potrace 1.14, written by Peter Selinger 2001-2017
9
- </metadata>
10
- <g transform="translate(0.000000,400.000000) scale(0.100000,-0.100000)"
11
- fill="#000000" stroke="none">
12
- <path d="M0 2000 l0 -2000 2000 0 2000 0 0 2000 0 2000 -2000 0 -2000 0 0
13
- -2000z m1047 1515 c37 -8 100 -26 138 -39 39 -14 79 -26 91 -26 19 0 23 -10
14
- 39 -129 10 -71 15 -137 12 -145 -13 -33 -34 -14 -66 59 -44 99 -105 164 -196
15
- 207 -65 31 -77 33 -175 33 -96 0 -110 -3 -165 -29 -79 -39 -173 -135 -214
16
- -217 -72 -149 -86 -325 -37 -476 50 -154 156 -280 286 -342 49 -23 67 -26 165
17
- -26 100 0 116 3 170 28 107 50 105 46 105 228 0 186 -4 195 -88 208 -29 4 -58
18
- 13 -64 19 -26 26 7 32 193 32 l190 0 -3 -22 c-2 -15 -11 -24 -24 -26 -49 -7
19
- -59 -34 -62 -179 -3 -109 -1 -139 12 -158 15 -23 14 -25 -33 -60 -200 -146
20
- -516 -168 -741 -49 -126 66 -231 197 -274 343 -21 70 -21 237 -1 316 83 325
21
- 408 522 742 450z m2240 0 c205 -48 352 -194 409 -405 23 -85 23 -260 0 -354
22
- -51 -211 -213 -375 -415 -417 -81 -17 -252 -6 -326 20 -249 88 -391 337 -358
23
- 628 30 270 181 467 404 527 71 19 208 20 286 1z m-882 -25 c6 -32 35 -227 35
24
- -240 0 -5 -10 -10 -23 -10 -19 0 -26 9 -40 54 -20 63 -51 111 -90 140 -26 19
25
- -44 21 -206 24 -174 4 -179 3 -204 -20 l-27 -23 -6 -213 -7 -214 166 4 c188 3
26
- 194 6 212 81 7 25 17 42 25 42 12 0 15 -26 16 -152 1 -136 -1 -153 -15 -153
27
- -11 0 -21 15 -29 46 -17 64 -43 73 -223 74 l-144 2 3 -249 2 -248 27 -23 c26
28
- -23 30 -24 197 -20 191 4 208 9 266 74 31 35 44 61 84 157 13 33 18 37 35 28
29
- 18 -10 18 -14 4 -88 -8 -43 -22 -109 -32 -148 l-17 -70 -440 0 c-382 0 -439 2
30
- -439 15 0 10 16 17 55 22 79 11 96 34 105 140 4 46 5 261 3 478 -4 423 -5 436
31
- -55 459 -13 6 -41 11 -63 11 -36 0 -52 12 -43 35 2 6 156 10 433 10 l430 0 5
32
- -25z m-1742 -1886 c43 -120 85 -227 94 -236 9 -10 24 -18 35 -18 10 0 18 -4
33
- 18 -10 0 -6 -40 -10 -100 -10 -60 0 -100 4 -100 10 0 6 11 10 25 10 37 0 40
34
- 22 14 98 l-24 67 -89 0 -89 0 -29 -69 c-15 -38 -28 -73 -28 -78 0 -5 14 -11
35
- 30 -14 56 -12 30 -24 -50 -24 -78 0 -105 12 -55 24 30 8 36 19 141 265 78 183
36
- 96 215 119 208 5 -2 45 -102 88 -223z m513 210 c48 -16 52 -20 58 -53 8 -49 7
37
- -81 -2 -81 -4 0 -17 20 -30 43 -32 60 -87 91 -153 85 -99 -10 -163 -97 -162
38
- -223 1 -139 68 -225 178 -225 54 0 98 17 143 55 42 35 55 24 17 -15 -73 -76
39
- -198 -94 -296 -42 -45 23 -59 37 -84 86 -58 113 -31 258 62 335 21 17 52 36
40
- 68 40 49 15 145 12 201 -5z m546 -39 c6 -64 -5 -77 -27 -32 -19 40 -57 60
41
- -106 55 -28 -3 -34 -8 -42 -37 -5 -19 -7 -112 -5 -206 3 -184 9 -205 54 -205
42
- 13 0 24 -4 24 -10 0 -6 -43 -10 -110 -10 -67 0 -110 4 -110 10 0 6 11 10 24
43
- 10 52 0 56 15 56 229 0 140 -3 200 -12 209 -17 17 -83 15 -117 -3 -16 -8 -34
44
- -28 -41 -45 -16 -39 -33 -39 -26 0 3 17 8 43 11 58 l6 29 209 -1 208 0 4 -51z
45
- m238 44 c0 -4 -13 -12 -29 -17 -28 -10 -28 -12 -35 -101 -9 -106 2 -320 16
46
- -338 6 -7 19 -13 29 -13 11 0 19 -4 19 -10 0 -6 -40 -10 -100 -10 -60 0 -100
47
- 4 -100 10 0 6 11 10 25 10 14 0 29 8 35 19 11 22 14 400 2 417 -4 6 -19 14
48
- -34 18 -56 13 -26 23 72 23 55 0 100 -3 100 -8z m220 -2 c0 -5 -9 -11 -19 -14
49
- -11 -3 -22 -10 -24 -17 -7 -17 125 -358 134 -349 12 13 129 318 129 336 0 10
50
- -11 23 -25 29 -42 19 -28 27 50 26 82 -1 100 -9 57 -27 -15 -6 -33 -20 -39
51
- -30 -6 -10 -48 -110 -93 -222 -46 -112 -89 -210 -96 -218 -16 -18 -26 4 -129
52
- 273 -58 150 -74 182 -97 195 -15 9 -28 19 -28 22 0 3 41 6 90 6 50 0 90 -5 90
53
- -10z m560 2 c0 -5 -11 -11 -25 -15 -14 -3 -30 -14 -35 -24 -11 -20 -14 -360
54
- -4 -398 4 -15 17 -25 35 -29 60 -12 25 -23 -71 -23 -96 0 -131 11 -71 23 26 5
55
- 29 11 34 59 9 68 9 292 0 342 -5 30 -12 40 -34 48 -52 18 -30 26 71 26 55 0
56
- 100 -4 100 -9z m482 -3 c11 -16 10 -106 -1 -106 -5 0 -14 13 -19 29 -17 49
57
- -108 81 -140 49 -9 -9 -12 -69 -12 -209 0 -214 4 -229 56 -229 13 0 24 -4 24
58
- -10 0 -6 -43 -10 -110 -10 -112 0 -136 8 -77 25 l32 10 0 215 0 215 -59 0
59
- c-51 -1 -61 -4 -82 -28 -13 -16 -24 -35 -24 -43 0 -8 -5 -14 -11 -14 -8 0 -10
60
- 15 -5 46 3 26 6 52 6 59 0 17 411 18 422 1z m218 4 c0 -5 -11 -12 -25 -16 -14
61
- -3 -25 -9 -25 -13 2 -13 106 -184 113 -185 5 -1 31 41 59 91 l50 93 -26 11
62
- c-14 7 -23 16 -20 20 7 12 141 12 148 0 3 -4 -12 -15 -32 -23 -33 -13 -46 -28
63
- -95 -119 l-58 -104 3 -105 3 -105 33 -10 c58 -17 34 -25 -78 -25 -67 0 -110 4
64
- -110 10 0 6 11 10 24 10 45 0 56 23 56 117 0 85 0 86 -51 172 -82 138 -92 150
65
- -127 162 -18 6 -30 15 -27 20 8 12 185 12 185 -1z m-2957 -998 c10 -1 29 -13
66
- 42 -27 35 -34 34 -85 -3 -126 -24 -27 -37 -33 -86 -37 l-57 -5 3 -66 c3 -57 6
67
- -66 23 -69 11 -2 24 -8 29 -13 6 -5 -21 -9 -67 -9 -45 0 -77 4 -77 10 0 6 9
68
- 10 20 10 19 0 20 7 20 156 0 147 -1 156 -20 161 -42 11 -16 18 68 18 48 -1 95
69
- -2 105 -3z m247 -4 c0 -5 -9 -8 -19 -8 -10 0 -22 -7 -25 -16 -12 -30 -7 -279
70
- 6 -292 7 -7 30 -12 51 -12 32 0 46 7 73 36 35 36 39 32 28 -25 l-6 -31 -124 0
71
- c-76 0 -124 4 -124 10 0 6 8 10 19 10 16 0 19 11 24 81 3 45 3 115 0 157 -5
72
- 61 -9 76 -25 80 -38 9 -16 17 52 17 39 0 70 -3 70 -7z m396 -154 c47 -134 63
73
- -168 82 -175 37 -14 25 -19 -48 -19 -40 0 -70 4 -70 10 0 6 9 10 21 10 18 0
74
- 20 4 14 27 -3 15 -13 42 -20 60 -13 32 -16 33 -68 33 -61 0 -70 -6 -92 -69
75
- -14 -41 -14 -43 5 -48 39 -10 19 -23 -35 -23 -58 0 -69 9 -33 25 16 7 40 53
76
- 87 165 59 141 74 169 92 170 3 0 33 -75 65 -166z m194 154 c0 -4 -7 -8 -15 -8
77
- -21 0 -20 -4 22 -82 42 -77 42 -77 89 14 28 56 30 68 7 68 -9 0 -13 3 -10 6 5
78
- 6 77 8 105 4 4 0 -6 -7 -23 -14 -23 -10 -41 -34 -73 -97 -42 -82 -43 -85 -35
79
- -149 7 -57 11 -65 31 -68 12 -2 22 -8 22 -13 0 -5 -36 -9 -81 -9 -51 0 -78 4
80
- -74 10 3 6 14 10 24 10 22 0 31 26 31 88 0 66 -98 232 -136 232 -9 0 -13 3
81
- -11 8 7 10 127 10 127 0z m454 0 c37 -10 45 -16 50 -41 13 -63 0 -78 -22 -27
82
- -26 57 -108 77 -168 41 -40 -24 -64 -77 -64 -141 0 -94 57 -160 138 -160 65 1
83
- 82 16 82 74 0 40 -3 48 -25 56 -39 15 -30 20 35 20 l60 0 -16 -25 c-12 -18
84
- -15 -36 -10 -66 6 -39 6 -40 -36 -59 -134 -61 -278 15 -278 146 0 90 31 141
85
- 105 175 47 22 88 24 149 7z m334 -8 c18 -11 37 -32 43 -46 13 -35 -4 -87 -36
86
- -111 l-24 -18 40 -67 c22 -37 52 -74 67 -83 l27 -14 -28 -1 c-44 0 -65 16
87
- -112 91 -40 61 -48 69 -76 69 -30 0 -31 -2 -25 -31 3 -17 6 -49 6 -70 0 -35 3
88
- -39 25 -39 14 0 25 -4 25 -10 0 -6 -32 -10 -75 -10 -43 0 -75 4 -75 10 0 6 9
89
- 10 19 10 28 0 31 18 31 160 0 142 -3 160 -31 160 -10 0 -19 3 -19 8 0 4 42 8
90
- 93 9 77 2 98 -1 125 -17z m389 -6 c62 -46 88 -115 73 -192 -29 -156 -218 -195
91
- -307 -63 -18 26 -23 48 -23 93 0 85 37 151 100 177 38 16 127 7 157 -15z m243
92
- 17 c0 -3 -10 -11 -22 -16 -21 -9 -23 -18 -26 -95 -2 -47 0 -105 3 -129 12 -84
93
- 92 -119 152 -67 l28 24 0 134 c0 130 0 133 -22 136 -47 7 -21 21 37 21 59 -1
94
- 79 -12 40 -22 -18 -5 -20 -14 -20 -104 -1 -127 -11 -171 -50 -205 -25 -23 -39
95
- -28 -85 -28 -46 0 -60 5 -85 28 -39 34 -49 78 -50 205 0 90 -2 99 -20 104 -42
96
- 11 -17 21 50 21 39 0 70 -3 70 -7z m305 1 c6 -4 51 -59 100 -122 48 -63 94
97
- -122 102 -130 11 -12 13 5 13 108 0 121 0 122 -25 128 -41 10 -19 23 40 23 59
98
- 0 81 -13 40 -23 l-25 -6 0 -165 c0 -131 -3 -165 -13 -165 -8 0 -60 59 -116
99
- 130 -56 72 -104 130 -107 130 -2 0 -4 -52 -4 -115 0 -114 0 -116 25 -125 40
100
- -15 30 -20 -40 -20 -62 0 -91 15 -42 22 21 3 22 7 25 133 3 149 0 171 -28 180
101
- -11 4 -18 11 -15 16 7 11 56 12 70 1z m578 -21 c60 -37 92 -93 92 -160 0 -73
102
- -26 -119 -85 -148 -38 -20 -60 -23 -157 -23 -69 0 -113 4 -113 10 0 6 9 10 19
103
- 10 28 0 31 18 31 160 0 142 -3 160 -31 160 -10 0 -19 5 -19 11 0 8 35 10 113
104
- 8 97 -4 117 -7 150 -28z"/>
105
- <path d="M3067 3479 c-188 -43 -307 -251 -307 -535 0 -200 49 -335 164 -450
106
- 86 -86 152 -116 261 -117 89 -2 165 32 226 101 96 109 133 228 133 427 0 154
107
- -13 223 -64 331 -81 170 -263 277 -413 243z"/>
108
- <path d="M501 1658 c-18 -46 -35 -89 -38 -95 -4 -10 14 -13 72 -13 58 0 76 3
109
- 73 13 -3 6 -17 49 -32 95 -15 45 -31 82 -35 82 -4 0 -23 -37 -40 -82z"/>
110
- <path d="M384 797 c-3 -8 -4 -45 -2 -83 l3 -69 39 1 c50 2 76 31 76 85 0 50
111
- -27 79 -75 79 -21 0 -38 -6 -41 -13z"/>
112
- <path d="M1027 753 c-2 -10 -14 -42 -26 -70 l-21 -53 54 0 54 0 -25 67 c-28
113
- 79 -29 79 -36 56z"/>
114
- <path d="M1990 776 c0 -18 -3 -54 -6 -79 -6 -43 -5 -46 18 -52 26 -7 78 9 90
115
- 28 4 7 8 33 8 58 0 56 -21 79 -73 79 -35 0 -37 -2 -37 -34z"/>
116
- <path d="M2347 799 c-29 -17 -57 -88 -57 -144 0 -60 29 -127 64 -150 34 -23
117
- 92 -22 118 1 69 62 61 236 -13 288 -27 18 -85 21 -112 5z"/>
118
- <path d="M3473 804 c-18 -8 -18 -285 -1 -302 16 -16 81 -15 123 2 49 21 68 64
119
- 63 142 -4 67 -21 101 -69 137 -26 19 -94 31 -116 21z"/>
120
- </g>
121
- </svg>