geo-activity-playground 0.43.3__tar.gz → 0.44.0__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 (158) hide show
  1. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/PKG-INFO +1 -1
  2. geo_activity_playground-0.44.0/geo_activity_playground/alembic/versions/0f02b92c4f94_add_tag_color.py +28 -0
  3. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/datamodel.py +13 -2
  4. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/enrichment.py +2 -2
  5. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/paths.py +1 -1
  6. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/activity_blueprint.py +22 -0
  7. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/settings_blueprint.py +19 -2
  8. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/show.html.j2 +6 -2
  9. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/page.html.j2 +4 -0
  10. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/search_form.html.j2 +1 -1
  11. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/tags-edit.html.j2 +5 -0
  12. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/tags-list.html.j2 +1 -1
  13. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/pyproject.toml +1 -1
  14. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/LICENSE +0 -0
  15. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/__init__.py +0 -0
  16. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/__main__.py +0 -0
  17. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/README +0 -0
  18. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/env.py +0 -0
  19. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/script.py.mako +0 -0
  20. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/38882503dc7c_add_tags_to_activities.py +0 -0
  21. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/451e7836b53d_add_square_planner_bookmark.py +0 -0
  22. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/63d3b7f6f93c_initial_version.py +0 -0
  23. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/93cc82ad1b60_add_parametricplotspec.py +0 -0
  24. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/ab83b9d23127_add_upstream_id.py +0 -0
  25. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/b03491c593f6_add_crop_indices.py +0 -0
  26. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/da2cba03b71d_add_photos.py +0 -0
  27. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/e02e27876deb_add_square_planner_bookmark_name.py +0 -0
  28. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/script.py.mako +0 -0
  29. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/__init__.py +0 -0
  30. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/activities.py +0 -0
  31. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/config.py +0 -0
  32. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/coordinates.py +0 -0
  33. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/heart_rate.py +0 -0
  34. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/meta_search.py +0 -0
  35. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/missing_values.py +0 -0
  36. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/parametric_plot.py +0 -0
  37. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/privacy_zones.py +0 -0
  38. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/raster_map.py +0 -0
  39. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/similarity.py +0 -0
  40. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/summary_stats.py +0 -0
  41. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/tasks.py +0 -0
  42. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_datamodel.py +0 -0
  43. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_meta_search.py +0 -0
  44. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_missing_values.py +0 -0
  45. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_summary_stats.py +0 -0
  46. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_tiles.py +0 -0
  47. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_time_conversion.py +0 -0
  48. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/tiles.py +0 -0
  49. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/core/time_conversion.py +0 -0
  50. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/__init__.py +0 -0
  51. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/grid_file.py +0 -0
  52. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/tile_visits.py +0 -0
  53. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/video.py +0 -0
  54. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/heatmap_video.py +0 -0
  55. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/__init__.py +0 -0
  56. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/activity_parsers.py +0 -0
  57. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/csv_parser.py +0 -0
  58. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/directory.py +0 -0
  59. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/strava_api.py +0 -0
  60. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/strava_checkout.py +0 -0
  61. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/test_csv_parser.py +0 -0
  62. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/test_directory.py +0 -0
  63. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/test_strava_api.py +0 -0
  64. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/__init__.py +0 -0
  65. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/app.py +0 -0
  66. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/authenticator.py +0 -0
  67. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/__init__.py +0 -0
  68. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/auth_blueprint.py +0 -0
  69. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/bubble_chart_blueprint.py +0 -0
  70. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/calendar_blueprint.py +0 -0
  71. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/eddington_blueprints.py +0 -0
  72. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/entry_views.py +0 -0
  73. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/equipment_blueprint.py +0 -0
  74. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/explorer_blueprint.py +0 -0
  75. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/heatmap_blueprint.py +0 -0
  76. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/photo_blueprint.py +0 -0
  77. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/plot_builder_blueprint.py +0 -0
  78. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/search_blueprint.py +0 -0
  79. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/square_planner_blueprint.py +0 -0
  80. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/summary_blueprint.py +0 -0
  81. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/tile_blueprint.py +0 -0
  82. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/upload_blueprint.py +0 -0
  83. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/columns.py +0 -0
  84. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/flasher.py +0 -0
  85. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/plot_util.py +0 -0
  86. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/search_util.py +0 -0
  87. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/Leaflet.fullscreen.min.js +0 -0
  88. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/MarkerCluster.Default.css +0 -0
  89. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/MarkerCluster.css +0 -0
  90. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/android-chrome-192x192.png +0 -0
  91. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/android-chrome-512x512.png +0 -0
  92. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/apple-touch-icon.png +0 -0
  93. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/bootstrap-dark-mode.js +0 -0
  94. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/bootstrap.bundle.min.js +0 -0
  95. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/bootstrap.min.css +0 -0
  96. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/browserconfig.xml +0 -0
  97. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon-16x16.png +0 -0
  98. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon-32x32.png +0 -0
  99. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon-48x48.png +0 -0
  100. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon.ico +0 -0
  101. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon.svg +0 -0
  102. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/fullscreen.png +0 -0
  103. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/fullscreen@2x.png +0 -0
  104. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/layers-2x.png +0 -0
  105. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/layers.png +0 -0
  106. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/marker-icon-2x.png +0 -0
  107. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/marker-icon.png +0 -0
  108. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/marker-shadow.png +0 -0
  109. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.css +0 -0
  110. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.fullscreen.css +0 -0
  111. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.js +0 -0
  112. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.markercluster.js +0 -0
  113. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/mstile-150x150.png +0 -0
  114. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/site.webmanifest +0 -0
  115. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/table-sort.min.js +0 -0
  116. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/vega-embed@6 +0 -0
  117. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/vega-lite@4 +0 -0
  118. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/vega@5 +0 -0
  119. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/web-app-manifest-192x192.png +0 -0
  120. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/web-app-manifest-512x512.png +0 -0
  121. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/day.html.j2 +0 -0
  122. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/edit.html.j2 +0 -0
  123. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/lines.html.j2 +0 -0
  124. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/name.html.j2 +0 -0
  125. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/trim.html.j2 +0 -0
  126. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/auth/index.html.j2 +0 -0
  127. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/bubble_chart/index.html.j2 +0 -0
  128. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/calendar/index.html.j2 +0 -0
  129. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/calendar/month.html.j2 +0 -0
  130. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/eddington/distance.html.j2 +0 -0
  131. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/eddington/elevation_gain.html.j2 +0 -0
  132. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/elevation_eddington/index.html.j2 +0 -0
  133. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/equipment/index.html.j2 +0 -0
  134. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/explorer/index.html.j2 +0 -0
  135. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/explorer/server-side.html.j2 +0 -0
  136. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/heatmap/index.html.j2 +0 -0
  137. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/home.html.j2 +0 -0
  138. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/photo/map.html.j2 +0 -0
  139. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/photo/new.html.j2 +0 -0
  140. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/plot_builder/edit.html.j2 +0 -0
  141. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/plot_builder/index.html.j2 +0 -0
  142. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/search/index.html.j2 +0 -0
  143. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/admin-password.html.j2 +0 -0
  144. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/color-schemes.html.j2 +0 -0
  145. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/heart-rate.html.j2 +0 -0
  146. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/index.html.j2 +0 -0
  147. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/manage-equipments.html.j2 +0 -0
  148. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/manage-kinds.html.j2 +0 -0
  149. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/metadata-extraction.html.j2 +0 -0
  150. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/privacy-zones.html.j2 +0 -0
  151. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/segmentation.html.j2 +0 -0
  152. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/sharepic.html.j2 +0 -0
  153. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/strava.html.j2 +0 -0
  154. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/tags-new.html.j2 +0 -0
  155. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/square_planner/index.html.j2 +0 -0
  156. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/summary/index.html.j2 +0 -0
  157. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/upload/index.html.j2 +0 -0
  158. {geo_activity_playground-0.43.3 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/upload/reload.html.j2 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geo-activity-playground
3
- Version: 0.43.3
3
+ Version: 0.44.0
4
4
  Summary: Analysis of geo data activities like rides, runs or hikes.
5
5
  License: MIT
6
6
  Author: Martin Ueding
@@ -0,0 +1,28 @@
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 = "0f02b92c4f94"
10
+ down_revision: Union[str, None] = "da2cba03b71d"
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
+ with op.batch_alter_table("tags", schema=None) as batch_op:
18
+ batch_op.add_column(sa.Column("color", sa.String(), nullable=True))
19
+
20
+ # ### end Alembic commands ###
21
+
22
+
23
+ def downgrade() -> None:
24
+ # ### commands auto generated by Alembic - please adjust! ###
25
+ with op.batch_alter_table("tags", schema=None) as batch_op:
26
+ batch_op.drop_column("color")
27
+
28
+ # ### end Alembic commands ###
@@ -21,7 +21,9 @@ from sqlalchemy.orm import mapped_column
21
21
  from sqlalchemy.orm import relationship
22
22
 
23
23
  from .config import Config
24
- from .paths import time_series_dir
24
+ from .paths import activity_extracted_meta_dir
25
+ from .paths import activity_extracted_time_series_dir
26
+ from .paths import TIME_SERIES_DIR
25
27
 
26
28
 
27
29
  logger = logging.getLogger(__name__)
@@ -141,7 +143,7 @@ class Activity(DB.Model):
141
143
 
142
144
  @property
143
145
  def raw_time_series(self) -> pd.DataFrame:
144
- path = time_series_dir() / f"{self.id}.parquet"
146
+ path = TIME_SERIES_DIR() / f"{self.id}.parquet"
145
147
  try:
146
148
  time_series = pd.read_parquet(path)
147
149
  if "altitude" in time_series.columns:
@@ -160,6 +162,14 @@ class Activity(DB.Model):
160
162
  else:
161
163
  return self.raw_time_series
162
164
 
165
+ def delete_data(self) -> None:
166
+ for path in [
167
+ TIME_SERIES_DIR() / f"{self.id}.parquet",
168
+ activity_extracted_meta_dir() / f"{self.upstream_id}.pickle",
169
+ activity_extracted_time_series_dir() / f"{self.upstream_id}.pickle",
170
+ ]:
171
+ path.unlink(missing_ok=True)
172
+
163
173
 
164
174
  class Tag(DB.Model):
165
175
  __tablename__ = "tags"
@@ -167,6 +177,7 @@ class Tag(DB.Model):
167
177
 
168
178
  id: Mapped[int] = mapped_column(primary_key=True)
169
179
  tag: Mapped[str] = mapped_column(String, unique=True)
180
+ color: Mapped[str] = mapped_column(String, nullable=True)
170
181
 
171
182
  activities: Mapped[list[Activity]] = relationship(
172
183
  secondary=activity_tag_association_table, back_populates="tags"
@@ -18,7 +18,7 @@ from .datamodel import get_or_make_kind
18
18
  from .missing_values import some
19
19
  from .paths import activity_extracted_meta_dir
20
20
  from .paths import activity_extracted_time_series_dir
21
- from .paths import time_series_dir
21
+ from .paths import TIME_SERIES_DIR
22
22
  from .tiles import compute_tile_float
23
23
  from .time_conversion import convert_to_datetime_ns
24
24
 
@@ -101,7 +101,7 @@ def populate_database_from_extracted(config: Config) -> None:
101
101
  )
102
102
  raise
103
103
 
104
- enriched_time_series_path = time_series_dir() / f"{activity.id}.parquet"
104
+ enriched_time_series_path = TIME_SERIES_DIR() / f"{activity.id}.parquet"
105
105
  time_series.to_parquet(enriched_time_series_path)
106
106
 
107
107
 
@@ -65,7 +65,7 @@ activity_enriched_time_series_dir = dir_wrapper(_activity_enriched_time_series_d
65
65
  tiles_per_time_series = dir_wrapper(_tiles_per_time_series)
66
66
  strava_api_dir = dir_wrapper(_strava_api_dir)
67
67
  activity_meta_override_dir = dir_wrapper(_activity_meta_override_dir)
68
- time_series_dir = dir_wrapper(_time_series_dir)
68
+ TIME_SERIES_DIR = dir_wrapper(_time_series_dir)
69
69
  PHOTOS_DIR = dir_wrapper(_photos_dir)
70
70
 
71
71
  activities_file = file_wrapper(_activities_file)
@@ -1,6 +1,7 @@
1
1
  import datetime
2
2
  import io
3
3
  import logging
4
+ import pathlib
4
5
  import re
5
6
  from typing import Optional
6
7
 
@@ -431,6 +432,27 @@ def make_activity_blueprint(
431
432
  color_line_geojson=geojson.dumps(fc),
432
433
  )
433
434
 
435
+ @blueprint.route("/delete/<id>")
436
+ @needs_authentication(authenticator)
437
+ def delete(id: int):
438
+ activity = DB.session.get_one(Activity, id)
439
+ activity.delete_data()
440
+ DB.session.delete(activity)
441
+ DB.session.commit()
442
+ return redirect(url_for("index"))
443
+
444
+ @blueprint.route("/download-original/<id>")
445
+ @needs_authentication(authenticator)
446
+ def download_original(id: int):
447
+ activity = DB.session.get_one(Activity, id)
448
+ path = pathlib.Path(activity.path)
449
+ with open(path) as f:
450
+ return Response(
451
+ f.read(),
452
+ mimetype="application/octet-stream",
453
+ headers={"Content-disposition": f'attachment; filename="{path.name}"'},
454
+ )
455
+
434
456
  return blueprint
435
457
 
436
458
 
@@ -13,14 +13,19 @@ from flask import render_template
13
13
  from flask import request
14
14
  from flask import Response
15
15
  from flask import url_for
16
+ from tqdm import tqdm
16
17
 
17
18
  from ...core.config import ConfigAccessor
19
+ from ...core.datamodel import Activity
18
20
  from ...core.datamodel import DB
19
21
  from ...core.datamodel import Equipment
20
22
  from ...core.datamodel import Kind
21
23
  from ...core.datamodel import Tag
24
+ from ...core.enrichment import _embellish_single_time_series
25
+ from ...core.enrichment import update_via_time_series
22
26
  from ...core.heart_rate import HeartRateZoneComputer
23
27
  from ...core.paths import _activity_enriched_dir
28
+ from ...core.paths import TIME_SERIES_DIR
24
29
  from ..authenticator import Authenticator
25
30
  from ..authenticator import needs_authentication
26
31
  from ..flasher import Flasher
@@ -348,8 +353,19 @@ def make_settings_blueprint(
348
353
  config_accessor().time_diff_threshold_seconds = threshold
349
354
  config_accessor.save()
350
355
  flash(f"Threshold set to {threshold}.", category="success")
351
- shutil.rmtree(_activity_enriched_dir)
352
- return redirect(url_for("upload.reload"))
356
+ for activity in tqdm(
357
+ DB.session.scalars(sqlalchemy.select(Activity)).all(),
358
+ desc="Recomputing segments",
359
+ ):
360
+ time_series = _embellish_single_time_series(
361
+ activity.raw_time_series,
362
+ None,
363
+ threshold,
364
+ )
365
+ update_via_time_series(activity, time_series)
366
+ enriched_time_series_path = TIME_SERIES_DIR() / f"{activity.id}.parquet"
367
+ time_series.to_parquet(enriched_time_series_path)
368
+ DB.session.commit()
353
369
  return render_template(
354
370
  "settings/segmentation.html.j2",
355
371
  threshold=config_accessor().time_diff_threshold_seconds,
@@ -424,6 +440,7 @@ def make_settings_blueprint(
424
440
  tag = DB.session.get_one(Tag, id)
425
441
  if request.method == "POST":
426
442
  tag.tag = request.form["tag"]
443
+ tag.color = request.form["color"]
427
444
  DB.session.commit()
428
445
  return redirect(url_for(".tags_list"))
429
446
  else:
@@ -24,7 +24,7 @@
24
24
  <dt>Tags</dt>
25
25
  <dd>
26
26
  {% for tag in activity.tags %}
27
- <span class="badge text-bg-primary">{{ tag.tag }}</span>
27
+ {{ activity_tag(tag) }}
28
28
  {% endfor %}
29
29
  </dd>
30
30
  {% endif %}
@@ -75,12 +75,16 @@
75
75
 
76
76
  <dt>ID</dt>
77
77
  <dd>{{ activity.id }}</dd>
78
+ <dt>Upstream ID</dt>
79
+ <dd>{{ activity.upstream_id }}</dd>
78
80
  <dt>Source path</dt>
79
- <dd>{{ activity.path }}</dd>
81
+ <dd><a href="{{ url_for('.download_original', id=activity.id) }}">{{ activity.path }}</a></dd>
80
82
  </dl>
81
83
 
82
84
  <a href="{{ url_for('.edit', id=activity['id']) }}" class="btn btn-secondary btn-small">Edit</a>
83
85
  <a href="{{ url_for('.trim', id=activity['id']) }}" class="btn btn-secondary btn-small">Trim</a>
86
+ <a class="btn btn-small btn-danger" href="{{ url_for('.delete', id=activity.id) }}"
87
+ onclick="if(!confirm('Are you sure to Delete This?')){ event.preventDefault() }">Delete</a>
84
88
  </div>
85
89
  <div class="col-sm-12 col-md-8">
86
90
  <div id="activity-map" style="height: 500px;" class="mb-3"></div>
@@ -200,6 +200,10 @@
200
200
  </script>
201
201
  {% endmacro %}
202
202
 
203
+ {% macro activity_tag(tag) %}
204
+ <span class="badge" style="background-color: {{ tag.color or '#0d6efd' }}">{{ tag.tag }}</span>
205
+ {% endmacro %}
206
+
203
207
  {% with messages = get_flashed_messages(with_categories=true) %}
204
208
  {% if messages %}
205
209
  {% for category, message in messages %}
@@ -103,7 +103,7 @@
103
103
  value="{{ tag.id }}" id="tag_{{ tag.id }}" {% if tag.id in query.tag %}
104
104
  checked {% endif %}>
105
105
  <label class="form-check-label" for="tag_{{ tag.id }}">
106
- {{ tag.tag }}
106
+ {{ activity_tag(tag) }}
107
107
  </label>
108
108
  </div>
109
109
  {% endfor %}
@@ -10,6 +10,11 @@
10
10
  <input type="text" class="form-control" id="tag" name="tag" value="{{ tag.tag }}" />
11
11
  </div>
12
12
 
13
+ <div class="mb-3">
14
+ <label for="color" class="form-label">Color</label>
15
+ <input type="color" class="form-control" id="color" name="color" value="{{ tag.color or '#0d6efd' }}" />
16
+ </div>
17
+
13
18
  <button type="submit" class="btn btn-primary">Save</button>
14
19
  </form>
15
20
 
@@ -7,7 +7,7 @@
7
7
  <ul>
8
8
  {% for tag in tags %}
9
9
  <li>
10
- <b>{{ tag.tag }}</b>
10
+ {{ activity_tag(tag) }}
11
11
  <a class="btn btn-sm btn-primary" href="{{ url_for('.tags_edit', id=tag.id) }}">Edit</a>
12
12
  </li>
13
13
  {% endfor %}
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "geo-activity-playground"
3
- version = "0.43.3"
3
+ version = "0.44.0"
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"