geo-activity-playground 0.43.2__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.2 → 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.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/datamodel.py +13 -2
  4. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/enrichment.py +2 -2
  5. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/paths.py +1 -1
  6. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/activity_blueprint.py +22 -0
  7. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/explorer_blueprint.py +2 -1
  8. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/settings_blueprint.py +23 -6
  9. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/upload_blueprint.py +1 -1
  10. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/show.html.j2 +6 -2
  11. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/page.html.j2 +4 -0
  12. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/search_form.html.j2 +1 -1
  13. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/tags-edit.html.j2 +5 -0
  14. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/tags-list.html.j2 +1 -1
  15. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/pyproject.toml +1 -1
  16. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/LICENSE +0 -0
  17. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/__init__.py +0 -0
  18. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/__main__.py +0 -0
  19. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/README +0 -0
  20. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/env.py +0 -0
  21. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/script.py.mako +0 -0
  22. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/38882503dc7c_add_tags_to_activities.py +0 -0
  23. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/451e7836b53d_add_square_planner_bookmark.py +0 -0
  24. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/63d3b7f6f93c_initial_version.py +0 -0
  25. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/93cc82ad1b60_add_parametricplotspec.py +0 -0
  26. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/ab83b9d23127_add_upstream_id.py +0 -0
  27. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/b03491c593f6_add_crop_indices.py +0 -0
  28. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/da2cba03b71d_add_photos.py +0 -0
  29. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/e02e27876deb_add_square_planner_bookmark_name.py +0 -0
  30. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/alembic/versions/script.py.mako +0 -0
  31. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/__init__.py +0 -0
  32. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/activities.py +0 -0
  33. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/config.py +0 -0
  34. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/coordinates.py +0 -0
  35. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/heart_rate.py +0 -0
  36. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/meta_search.py +0 -0
  37. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/missing_values.py +0 -0
  38. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/parametric_plot.py +0 -0
  39. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/privacy_zones.py +0 -0
  40. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/raster_map.py +0 -0
  41. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/similarity.py +0 -0
  42. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/summary_stats.py +0 -0
  43. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/tasks.py +0 -0
  44. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_datamodel.py +0 -0
  45. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_meta_search.py +0 -0
  46. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_missing_values.py +0 -0
  47. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_summary_stats.py +0 -0
  48. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_tiles.py +0 -0
  49. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/test_time_conversion.py +0 -0
  50. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/tiles.py +0 -0
  51. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/core/time_conversion.py +0 -0
  52. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/__init__.py +0 -0
  53. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/grid_file.py +0 -0
  54. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/tile_visits.py +0 -0
  55. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/explorer/video.py +0 -0
  56. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/heatmap_video.py +0 -0
  57. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/__init__.py +0 -0
  58. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/activity_parsers.py +0 -0
  59. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/csv_parser.py +0 -0
  60. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/directory.py +0 -0
  61. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/strava_api.py +0 -0
  62. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/strava_checkout.py +0 -0
  63. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/test_csv_parser.py +0 -0
  64. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/test_directory.py +0 -0
  65. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/importers/test_strava_api.py +0 -0
  66. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/__init__.py +0 -0
  67. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/app.py +0 -0
  68. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/authenticator.py +0 -0
  69. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/__init__.py +0 -0
  70. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/auth_blueprint.py +0 -0
  71. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/bubble_chart_blueprint.py +0 -0
  72. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/calendar_blueprint.py +0 -0
  73. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/eddington_blueprints.py +0 -0
  74. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/entry_views.py +0 -0
  75. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/equipment_blueprint.py +0 -0
  76. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/heatmap_blueprint.py +0 -0
  77. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/photo_blueprint.py +0 -0
  78. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/plot_builder_blueprint.py +0 -0
  79. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/search_blueprint.py +0 -0
  80. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/square_planner_blueprint.py +0 -0
  81. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/summary_blueprint.py +0 -0
  82. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/blueprints/tile_blueprint.py +0 -0
  83. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/columns.py +0 -0
  84. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/flasher.py +0 -0
  85. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/plot_util.py +0 -0
  86. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/search_util.py +0 -0
  87. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/Leaflet.fullscreen.min.js +0 -0
  88. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/MarkerCluster.Default.css +0 -0
  89. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/MarkerCluster.css +0 -0
  90. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/android-chrome-192x192.png +0 -0
  91. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/android-chrome-512x512.png +0 -0
  92. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/apple-touch-icon.png +0 -0
  93. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/bootstrap-dark-mode.js +0 -0
  94. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/bootstrap.bundle.min.js +0 -0
  95. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/bootstrap.min.css +0 -0
  96. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/browserconfig.xml +0 -0
  97. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon-16x16.png +0 -0
  98. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon-32x32.png +0 -0
  99. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon-48x48.png +0 -0
  100. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon.ico +0 -0
  101. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/favicon.svg +0 -0
  102. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/fullscreen.png +0 -0
  103. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/fullscreen@2x.png +0 -0
  104. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/layers-2x.png +0 -0
  105. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/layers.png +0 -0
  106. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/marker-icon-2x.png +0 -0
  107. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/marker-icon.png +0 -0
  108. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/images/marker-shadow.png +0 -0
  109. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.css +0 -0
  110. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.fullscreen.css +0 -0
  111. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.js +0 -0
  112. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/leaflet.markercluster.js +0 -0
  113. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/mstile-150x150.png +0 -0
  114. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/site.webmanifest +0 -0
  115. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/table-sort.min.js +0 -0
  116. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/vega-embed@6 +0 -0
  117. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/vega-lite@4 +0 -0
  118. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/vega@5 +0 -0
  119. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/web-app-manifest-192x192.png +0 -0
  120. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/static/web-app-manifest-512x512.png +0 -0
  121. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/day.html.j2 +0 -0
  122. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/edit.html.j2 +0 -0
  123. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/lines.html.j2 +0 -0
  124. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/name.html.j2 +0 -0
  125. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/activity/trim.html.j2 +0 -0
  126. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/auth/index.html.j2 +0 -0
  127. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/bubble_chart/index.html.j2 +0 -0
  128. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/calendar/index.html.j2 +0 -0
  129. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/calendar/month.html.j2 +0 -0
  130. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/eddington/distance.html.j2 +0 -0
  131. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/eddington/elevation_gain.html.j2 +0 -0
  132. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/elevation_eddington/index.html.j2 +0 -0
  133. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/equipment/index.html.j2 +0 -0
  134. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/explorer/index.html.j2 +0 -0
  135. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/explorer/server-side.html.j2 +0 -0
  136. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/heatmap/index.html.j2 +0 -0
  137. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/home.html.j2 +0 -0
  138. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/photo/map.html.j2 +0 -0
  139. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/photo/new.html.j2 +0 -0
  140. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/plot_builder/edit.html.j2 +0 -0
  141. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/plot_builder/index.html.j2 +0 -0
  142. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/search/index.html.j2 +0 -0
  143. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/admin-password.html.j2 +0 -0
  144. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/color-schemes.html.j2 +0 -0
  145. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/heart-rate.html.j2 +0 -0
  146. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/index.html.j2 +0 -0
  147. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/manage-equipments.html.j2 +0 -0
  148. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/manage-kinds.html.j2 +0 -0
  149. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/metadata-extraction.html.j2 +0 -0
  150. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/privacy-zones.html.j2 +0 -0
  151. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/segmentation.html.j2 +0 -0
  152. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/sharepic.html.j2 +0 -0
  153. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/strava.html.j2 +0 -0
  154. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/settings/tags-new.html.j2 +0 -0
  155. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/square_planner/index.html.j2 +0 -0
  156. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/summary/index.html.j2 +0 -0
  157. {geo_activity_playground-0.43.2 → geo_activity_playground-0.44.0}/geo_activity_playground/webui/templates/upload/index.html.j2 +0 -0
  158. {geo_activity_playground-0.43.2 → 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.2
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
 
@@ -212,7 +212,8 @@ def make_explorer_blueprint(
212
212
  width = 256 // factor
213
213
  for xo in range(factor):
214
214
  for yo in range(factor):
215
- if (x * factor + xo, y * factor + yo) not in tile_visits:
215
+ tile = (x * factor + xo, y * factor + yo)
216
+ if tile not in tile_visits:
216
217
  map_tile[
217
218
  yo * width : (yo + 1) * width, xo * width : (xo + 1) * width
218
219
  ] = grayscale[
@@ -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
@@ -160,11 +165,11 @@ def make_settings_blueprint(
160
165
  assert len(ids) == len(names) == len(offsets)
161
166
  for id, name, offset in zip(ids, names, offsets):
162
167
  if id:
163
- equipment = DB.session.get(Equipment, int(id))
168
+ equipment = DB.session.get_one(Equipment, int(id))
164
169
  equipment.name = name
165
170
  equipment.offset_km = int(float(offset))
166
171
  if not id and name:
167
- equipment = Equipment(name)
172
+ equipment = Equipment(name=name)
168
173
  if offset:
169
174
  equipment.offset_km = int(float(offset))
170
175
  DB.session.add(equipment)
@@ -193,11 +198,11 @@ def make_settings_blueprint(
193
198
  assert len(ids) == len(names)
194
199
  for id, name in zip(ids, names):
195
200
  if id:
196
- kind = DB.session.get(Kind, int(id))
201
+ kind = DB.session.get_one(Kind, int(id))
197
202
  kind.name = name
198
203
  kind.consider_for_achievements = id in consider_for_achievements
199
204
  if not id and name:
200
- kind = Kind(name)
205
+ kind = Kind(name=name)
201
206
  if consider_for_achievements:
202
207
  kind.consider_for_achievements = (
203
208
  "new" in consider_for_achievements
@@ -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:
@@ -124,7 +124,7 @@ def scan_for_activities(
124
124
  kind.consider_for_achievements = True
125
125
  DB.session.commit()
126
126
  tile_visit_accessor.reset()
127
- work_tracker_path("tile-state").unlink()
127
+ work_tracker_path("tile-state").unlink(missing_ok=True)
128
128
  compute_tile_visits_new(repository, tile_visit_accessor)
129
129
  compute_tile_evolution(tile_visit_accessor.tile_state, config)
130
130
  tile_visit_accessor.save()
@@ -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.2"
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"