geo-activity-playground 0.25.0__tar.gz → 0.26.1__tar.gz

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 (99) hide show
  1. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/PKG-INFO +1 -1
  2. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/tasks.py +1 -1
  3. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/strava_checkout.py +4 -4
  4. geo_activity_playground-0.26.1/geo_activity_playground/webui/static/bootstrap-dark-mode.js +78 -0
  5. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/strava/controller.py +2 -0
  6. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/strava/templates/strava/client-id.html.j2 +11 -1
  7. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/strava/templates/strava/connected.html.j2 +1 -1
  8. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/templates/page.html.j2 +42 -13
  9. geo_activity_playground-0.26.1/geo_activity_playground/webui/templates/settings.html.j2 +24 -0
  10. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/upload/controller.py +1 -1
  11. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/pyproject.toml +1 -1
  12. geo_activity_playground-0.25.0/geo_activity_playground/webui/templates/settings.html.j2 +0 -15
  13. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/LICENSE +0 -0
  14. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/__init__.py +0 -0
  15. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/__main__.py +0 -0
  16. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/__init__.py +0 -0
  17. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/activities.py +0 -0
  18. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/config.py +0 -0
  19. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/coordinates.py +0 -0
  20. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/enrichment.py +0 -0
  21. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/heatmap.py +0 -0
  22. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/paths.py +0 -0
  23. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/privacy_zones.py +0 -0
  24. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/similarity.py +0 -0
  25. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/test_tiles.py +0 -0
  26. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/test_time_conversion.py +0 -0
  27. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/tiles.py +0 -0
  28. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/core/time_conversion.py +0 -0
  29. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/explorer/__init__.py +0 -0
  30. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/explorer/grid_file.py +0 -0
  31. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/explorer/tile_visits.py +0 -0
  32. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/explorer/video.py +0 -0
  33. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/__init__.py +0 -0
  34. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/activity_parsers.py +0 -0
  35. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/directory.py +0 -0
  36. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/strava_api.py +0 -0
  37. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/test_directory.py +0 -0
  38. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/importers/test_strava_api.py +0 -0
  39. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/__init__.py +0 -0
  40. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/__init__.py +0 -0
  41. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/blueprint.py +0 -0
  42. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/controller.py +0 -0
  43. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/templates/activity/day.html.j2 +0 -0
  44. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/templates/activity/lines.html.j2 +0 -0
  45. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/templates/activity/name.html.j2 +0 -0
  46. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/activity/templates/activity/show.html.j2 +0 -0
  47. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/app.py +0 -0
  48. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/calendar/__init__.py +0 -0
  49. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/calendar/blueprint.py +0 -0
  50. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/calendar/controller.py +0 -0
  51. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/calendar/templates/calendar/index.html.j2 +0 -0
  52. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/calendar/templates/calendar/month.html.j2 +0 -0
  53. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/eddington/__init__.py +0 -0
  54. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/eddington/blueprint.py +0 -0
  55. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/eddington/controller.py +0 -0
  56. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/eddington/templates/eddington/index.html.j2 +0 -0
  57. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/entry_controller.py +0 -0
  58. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/equipment/__init__.py +0 -0
  59. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/equipment/blueprint.py +0 -0
  60. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/equipment/controller.py +0 -0
  61. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/equipment/templates/equipment/index.html.j2 +0 -0
  62. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/explorer/__init__.py +0 -0
  63. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/explorer/blueprint.py +0 -0
  64. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/explorer/controller.py +0 -0
  65. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/explorer/templates/explorer/index.html.j2 +0 -0
  66. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/heatmap/__init__.py +0 -0
  67. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/heatmap/blueprint.py +0 -0
  68. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/heatmap/heatmap_controller.py +0 -0
  69. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/heatmap/templates/heatmap/index.html.j2 +0 -0
  70. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/search_controller.py +0 -0
  71. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/square_planner/__init__.py +0 -0
  72. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/square_planner/blueprint.py +0 -0
  73. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/square_planner/controller.py +0 -0
  74. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/square_planner/templates/square_planner/index.html.j2 +0 -0
  75. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/android-chrome-192x192.png +0 -0
  76. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/android-chrome-384x384.png +0 -0
  77. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/android-chrome-512x512.png +0 -0
  78. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/apple-touch-icon.png +0 -0
  79. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/browserconfig.xml +0 -0
  80. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/favicon-16x16.png +0 -0
  81. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/favicon-32x32.png +0 -0
  82. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/favicon.ico +0 -0
  83. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/mstile-150x150.png +0 -0
  84. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/safari-pinned-tab.svg +0 -0
  85. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/static/site.webmanifest +0 -0
  86. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/strava/__init__.py +0 -0
  87. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/strava/blueprint.py +0 -0
  88. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/summary/__init__.py +0 -0
  89. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/summary/blueprint.py +0 -0
  90. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/summary/controller.py +0 -0
  91. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/summary/templates/summary/index.html.j2 +0 -0
  92. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/templates/home.html.j2 +0 -0
  93. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/templates/search.html.j2 +0 -0
  94. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/tile/__init__.py +0 -0
  95. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/tile/blueprint.py +0 -0
  96. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/tile/controller.py +0 -0
  97. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/upload/__init__.py +0 -0
  98. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/upload/blueprint.py +0 -0
  99. {geo_activity_playground-0.25.0 → geo_activity_playground-0.26.1}/geo_activity_playground/webui/upload/templates/upload/index.html.j2 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geo-activity-playground
3
- Version: 0.25.0
3
+ Version: 0.26.1
4
4
  Summary: Analysis of geo data activities like rides, runs or hikes.
5
5
  License: MIT
6
6
  Author: Martin Ueding
@@ -46,7 +46,7 @@ def work_tracker(path: pathlib.Path):
46
46
  yield s
47
47
 
48
48
  with open(path, "w") as f:
49
- json.dump(list(s), f)
49
+ json.dump(list(s), f, indent=2, sort_keys=True)
50
50
 
51
51
 
52
52
  class WorkTracker:
@@ -161,7 +161,7 @@ def import_from_strava_checkout() -> None:
161
161
  activities_ids_to_parse = [
162
162
  activity_id
163
163
  for activity_id in activities_ids_to_parse
164
- if not (activity_extracted_meta_dir() / f"{activity_id.pickle}").exists()
164
+ if not (activity_extracted_meta_dir() / f"{activity_id}.pickle").exists()
165
165
  ]
166
166
 
167
167
  for activity_id in tqdm(activities_ids_to_parse, desc="Import from Strava export"):
@@ -190,11 +190,11 @@ def import_from_strava_checkout() -> None:
190
190
  dateutil.parser.parse(row["Activity Date"], dayfirst=dayfirst)
191
191
  ),
192
192
  }
193
- meta_path = activity_extracted_meta_dir / f"{activity_id}.pickle"
193
+ meta_path = activity_extracted_meta_dir() / f"{activity_id}.pickle"
194
194
  with open(meta_path, "wb") as f:
195
- pickle.dump(table_activity_meta, meta_path)
195
+ pickle.dump(table_activity_meta, f)
196
196
 
197
- time_series_path = activity_extracted_time_series_dir / f"{activity_id}.parquet"
197
+ time_series_path = activity_extracted_time_series_dir() / f"{activity_id}.parquet"
198
198
  if time_series_path.exists():
199
199
  time_series = pd.read_parquet(time_series_path)
200
200
  else:
@@ -0,0 +1,78 @@
1
+ /*!
2
+ * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
3
+ * Copyright 2011-2024 The Bootstrap Authors
4
+ * Licensed under the Creative Commons Attribution 3.0 Unported License.
5
+ */
6
+
7
+ (() => {
8
+ 'use strict'
9
+
10
+ const getStoredTheme = () => localStorage.getItem('theme')
11
+ const setStoredTheme = theme => localStorage.setItem('theme', theme)
12
+
13
+ const getPreferredTheme = () => {
14
+ const storedTheme = getStoredTheme()
15
+ if (storedTheme) {
16
+ return storedTheme
17
+ }
18
+
19
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
20
+ }
21
+
22
+ const setTheme = theme => {
23
+ if (theme === 'auto') {
24
+ document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'))
25
+ } else {
26
+ document.documentElement.setAttribute('data-bs-theme', theme)
27
+ }
28
+ }
29
+
30
+ setTheme(getPreferredTheme())
31
+
32
+ const showActiveTheme = (theme, focus = false) => {
33
+ const themeSwitcher = document.querySelector('#bd-theme')
34
+
35
+ if (!themeSwitcher) {
36
+ return
37
+ }
38
+
39
+ const themeSwitcherText = document.querySelector('#bd-theme-text')
40
+ const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
41
+
42
+ document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
43
+ element.classList.remove('active')
44
+ element.setAttribute('aria-pressed', 'false')
45
+ })
46
+
47
+ btnToActive.classList.add('active')
48
+ btnToActive.setAttribute('aria-pressed', 'true')
49
+ const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`
50
+ themeSwitcher.setAttribute('aria-label', themeSwitcherLabel)
51
+
52
+ if (focus) {
53
+ themeSwitcher.focus()
54
+ }
55
+ }
56
+
57
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
58
+ const storedTheme = getStoredTheme()
59
+ if (storedTheme !== 'light' && storedTheme !== 'dark') {
60
+ setTheme(getPreferredTheme())
61
+ }
62
+ })
63
+
64
+ window.addEventListener('DOMContentLoaded', () => {
65
+ showActiveTheme(getPreferredTheme())
66
+
67
+ document.querySelectorAll('[data-bs-theme-value]')
68
+ .forEach(toggle => {
69
+ toggle.addEventListener('click', () => {
70
+ const theme = toggle.getAttribute('data-bs-theme-value')
71
+ setStoredTheme(theme)
72
+ setTheme(theme)
73
+ showActiveTheme(theme, true)
74
+ })
75
+ })
76
+ })
77
+ })()
78
+
@@ -42,6 +42,8 @@ class StravaController:
42
42
  "code": self._code,
43
43
  },
44
44
  f,
45
+ indent=2,
46
+ sort_keys=True,
45
47
  )
46
48
 
47
49
  return {}
@@ -5,7 +5,17 @@
5
5
  <h1 class="mb-3">Strava Connect</h1>
6
6
 
7
7
  <div class="row mb-3">
8
- <div class="col-md-4">
8
+ <div class="col-md-6">
9
+ <p>You can connect to Strava such that it automatically downloads your activities.</p>
10
+
11
+ <p>The Strava API has rather strict rate limiting. If you don't mind waiting a bit, you can just use the "client
12
+ ID" and "client secret" that are provided to use a pre-defined Strava app. In that case, just click on the
13
+ button. If you don't want to share the API limits with other people, go the <a
14
+ href="https://www.strava.com/settings/api">Strava API page</a> and create your own app. Then fill in
15
+ "client ID" and "client secret" in the form.</p>
16
+ </div>
17
+
18
+ <div class="col-md-6">
9
19
  <form action="/strava/post-client-id" method="POST">
10
20
  <div class="mb-3">
11
21
  <label for="client_id" class="form-label">Client ID</label>
@@ -5,7 +5,7 @@
5
5
  <h1 class="mb-3">Strava Connect</h1>
6
6
 
7
7
  <div class="row mb-3">
8
- <div class="col-md-4">
8
+ <div class="col">
9
9
  <p>You're now connected to Strava. Please restart the webserver to start loading actvities.</p>
10
10
  </div>
11
11
  </div>
@@ -33,6 +33,9 @@
33
33
  <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
34
34
 
35
35
 
36
+ <script src="/static/bootstrap-dark-mode.js"></script>
37
+
38
+
36
39
  <!-- Favicon. -->
37
40
  <link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png">
38
41
  <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png">
@@ -59,39 +62,65 @@
59
62
  <ul class="navbar-nav me-auto mb-2 mb-lg-0">
60
63
 
61
64
  <li class="nav-item">
62
- <a class="nav-link active" aria-current="page"
63
- href="{{ url_for('summary.index') }}">Summary</a>
65
+ <a class="nav-link" aria-current="page" href="{{ url_for('summary.index') }}">Summary</a>
64
66
  </li>
65
67
  <li class="nav-item">
66
- <a class="nav-link active" aria-current="page"
67
- href="{{ url_for('calendar.index') }}">Calendar</a>
68
+ <a class="nav-link" aria-current="page" href="{{ url_for('calendar.index') }}">Calendar</a>
68
69
  </li>
69
70
  <li class="nav-item">
70
- <a class="nav-link active" aria-current="page"
71
+ <a class="nav-link" aria-current="page"
71
72
  href="{{ url_for('explorer.map', zoom=14) }}">Explorer</a>
72
73
  </li>
73
74
  <li class="nav-item">
74
- <a class="nav-link active" aria-current="page"
75
+ <a class="nav-link" aria-current="page"
75
76
  href="{{ url_for('explorer.map', zoom=17) }}">Squadratinhos</a>
76
77
  </li>
77
78
  <li class="nav-item">
78
- <a class="nav-link active" aria-current="page"
79
- href="{{ url_for('heatmap.index') }}">Heatmap</a>
79
+ <a class="nav-link" aria-current="page" href="{{ url_for('heatmap.index') }}">Heatmap</a>
80
80
  </li>
81
81
  <li class="nav-item">
82
- <a class="nav-link active" aria-current="page"
82
+ <a class="nav-link" aria-current="page"
83
83
  href="{{ url_for('eddington.index') }}">Eddington</a>
84
84
  </li>
85
85
  <li class="nav-item">
86
- <a class="nav-link active" aria-current="page"
86
+ <a class="nav-link" aria-current="page"
87
87
  href="{{ url_for('equipment.index') }}">Equipment</a>
88
88
  </li>
89
89
  <li class="nav-item">
90
- <a class="nav-link active" aria-current="page"
91
- href="{{ url_for('upload.index') }}">Upload</a>
90
+ <a class="nav-link" aria-current="page" href="{{ url_for('upload.index') }}">Upload</a>
92
91
  </li>
93
92
  <li class="nav-item">
94
- <a class="nav-link active" aria-current="page" href="{{ url_for('settings') }}">Settings</a>
93
+ <a class="nav-link" aria-current="page" href="{{ url_for('settings') }}">Settings</a>
94
+ </li>
95
+
96
+
97
+ <li class="nav-item dropdown">
98
+ <button
99
+ class="btn btn-link nav-link py-2 px-0 px-lg-2 dropdown-toggle d-flex align-items-center"
100
+ id="bd-theme" type="button" aria-expanded="false" data-bs-toggle="dropdown"
101
+ data-bs-display="static" aria-label="Toggle theme (dark)">
102
+ <span id="bd-theme-text">Theme</span>
103
+ </button>
104
+ <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="bd-theme-text">
105
+ <li>
106
+ <button type="button" class="dropdown-item d-flex align-items-center"
107
+ data-bs-theme-value="light" aria-pressed="false">
108
+ ☀️ Light
109
+ </button>
110
+ </li>
111
+ <li>
112
+ <button type="button" class="dropdown-item d-flex align-items-center active"
113
+ data-bs-theme-value="dark" aria-pressed="true">
114
+ 🌙 Dark
115
+ </button>
116
+ </li>
117
+ <li>
118
+ <button type="button" class="dropdown-item d-flex align-items-center"
119
+ data-bs-theme-value="auto" aria-pressed="false">
120
+ ⚙️ Auto
121
+ </button>
122
+ </li>
123
+ </ul>
95
124
  </li>
96
125
  </ul>
97
126
  </div>
@@ -0,0 +1,24 @@
1
+ {% extends "page.html.j2" %}
2
+
3
+ {% block container %}
4
+ <div class="row mb-3">
5
+ <div class="col">
6
+ <h1>Settings</h1>
7
+ </div>
8
+ </div>
9
+
10
+ <div class="row mb-3">
11
+ <div class="row row-cols-1 row-cols-md-3 g-2">
12
+ <div class="col">
13
+ <div class="card">
14
+ <div class="card-body">
15
+ <h5 class="card-title">Strava API</h5>
16
+ <p class="card-text">Connect to the Strava API to download activities from there.</p>
17
+ <a href="{{ url_for('strava.setup') }}" class="btn btn-primary">Set up Strava API</a>
18
+ </div>
19
+ </div>
20
+ </div>
21
+
22
+ </div>
23
+ </div>
24
+ {% endblock %}
@@ -98,7 +98,7 @@ def scan_for_activities(
98
98
  if pathlib.Path("Activities").exists():
99
99
  import_from_directory(config.get("metadata_extraction_regexes", []))
100
100
  if pathlib.Path("Strava Export").exists():
101
- import_from_strava_checkout(repository)
101
+ import_from_strava_checkout()
102
102
  if (_strava_dynamic_config_path.exists() or "strava" in config) and not skip_strava:
103
103
  import_from_strava_api()
104
104
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "geo-activity-playground"
3
- version = "0.25.0"
3
+ version = "0.26.1"
4
4
  description = "Analysis of geo data activities like rides, runs or hikes."
5
5
  authors = ["Martin Ueding <mu@martin-ueding.de>"]
6
6
  license = "MIT"
@@ -1,15 +0,0 @@
1
- {% extends "page.html.j2" %}
2
-
3
- {% block container %}
4
- <div class="row mb-3">
5
- <div class="col">
6
- <h1>Settings</h1>
7
- </div>
8
- </div>
9
-
10
- <div class="row mb-3">
11
- <div class="col">
12
- <p><a href="{{ url_for('strava.setup') }}">Set up Strava API</a>.</p>
13
- </div>
14
- </div>
15
- {% endblock %}