geo-activity-playground 0.44.0__tar.gz → 0.45.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.
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/PKG-INFO +1 -1
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/config.py +1 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/datamodel.py +3 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/meta_search.py +1 -1
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/directory.py +3 -2
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/strava_checkout.py +2 -1
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/eddington_blueprints.py +17 -8
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/entry_views.py +5 -3
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/equipment_blueprint.py +1 -1
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/settings_blueprint.py +64 -1
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/upload_blueprint.py +7 -3
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/home.html.j2 +2 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/summary/index.html.j2 +2 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/pyproject.toml +1 -1
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/LICENSE +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/__init__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/__main__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/README +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/env.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/script.py.mako +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/0f02b92c4f94_add_tag_color.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/38882503dc7c_add_tags_to_activities.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/451e7836b53d_add_square_planner_bookmark.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/63d3b7f6f93c_initial_version.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/93cc82ad1b60_add_parametricplotspec.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/ab83b9d23127_add_upstream_id.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/b03491c593f6_add_crop_indices.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/da2cba03b71d_add_photos.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/e02e27876deb_add_square_planner_bookmark_name.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/alembic/versions/script.py.mako +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/__init__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/activities.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/coordinates.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/enrichment.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/heart_rate.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/missing_values.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/parametric_plot.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/paths.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/privacy_zones.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/raster_map.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/similarity.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/summary_stats.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/tasks.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/test_datamodel.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/test_meta_search.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/test_missing_values.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/test_summary_stats.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/test_tiles.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/test_time_conversion.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/tiles.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/core/time_conversion.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/explorer/__init__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/explorer/grid_file.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/explorer/tile_visits.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/explorer/video.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/heatmap_video.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/__init__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/activity_parsers.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/csv_parser.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/strava_api.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/test_csv_parser.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/test_directory.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/importers/test_strava_api.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/__init__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/app.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/authenticator.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/__init__.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/activity_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/auth_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/bubble_chart_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/calendar_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/explorer_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/heatmap_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/photo_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/plot_builder_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/search_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/square_planner_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/summary_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/blueprints/tile_blueprint.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/columns.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/flasher.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/plot_util.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/search_util.py +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/Leaflet.fullscreen.min.js +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/MarkerCluster.Default.css +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/MarkerCluster.css +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/android-chrome-192x192.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/android-chrome-512x512.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/apple-touch-icon.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/bootstrap-dark-mode.js +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/bootstrap.bundle.min.js +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/bootstrap.min.css +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/browserconfig.xml +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/favicon-16x16.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/favicon-32x32.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/favicon-48x48.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/favicon.ico +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/favicon.svg +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/fullscreen.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/fullscreen@2x.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/images/layers-2x.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/images/layers.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/images/marker-icon-2x.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/images/marker-icon.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/images/marker-shadow.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/leaflet.css +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/leaflet.fullscreen.css +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/leaflet.js +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/leaflet.markercluster.js +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/mstile-150x150.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/site.webmanifest +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/table-sort.min.js +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/vega-embed@6 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/vega-lite@4 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/vega@5 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/web-app-manifest-192x192.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/static/web-app-manifest-512x512.png +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/activity/day.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/activity/edit.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/activity/lines.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/activity/name.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/activity/show.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/activity/trim.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/auth/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/bubble_chart/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/calendar/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/calendar/month.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/eddington/distance.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/eddington/elevation_gain.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/elevation_eddington/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/equipment/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/explorer/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/explorer/server-side.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/heatmap/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/page.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/photo/map.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/photo/new.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/plot_builder/edit.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/plot_builder/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/search/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/search_form.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/admin-password.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/color-schemes.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/heart-rate.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/manage-equipments.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/manage-kinds.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/metadata-extraction.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/privacy-zones.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/segmentation.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/sharepic.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/strava.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/tags-edit.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/tags-list.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/settings/tags-new.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/square_planner/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/upload/index.html.j2 +0 -0
- {geo_activity_playground-0.44.0 → geo_activity_playground-0.45.0}/geo_activity_playground/webui/templates/upload/reload.html.j2 +0 -0
@@ -38,6 +38,7 @@ class Config:
|
|
38
38
|
privacy_zones: dict[str, list[list[float]]] = dataclasses.field(
|
39
39
|
default_factory=dict
|
40
40
|
)
|
41
|
+
reliable_elevation_measurements: bool = True
|
41
42
|
sharepic_suppressed_fields: list[str] = dataclasses.field(default_factory=list)
|
42
43
|
strava_client_id: int = 131693
|
43
44
|
strava_client_secret: str = "0ccc0100a2c218512a7ef0cea3b0e322fb4b4365"
|
@@ -120,7 +120,7 @@ class SearchQuery:
|
|
120
120
|
variables.append(("distance_km_max", self.distance_km_max))
|
121
121
|
|
122
122
|
return "&".join(
|
123
|
-
f"{key}={urllib.parse.quote_plus(value)}" for key, value in variables
|
123
|
+
f"{key}={urllib.parse.quote_plus(str(value))}" for key, value in variables
|
124
124
|
)
|
125
125
|
|
126
126
|
|
@@ -10,6 +10,7 @@ from tqdm import tqdm
|
|
10
10
|
|
11
11
|
from ..core.config import Config
|
12
12
|
from ..core.datamodel import ActivityMeta
|
13
|
+
from ..core.datamodel import DEFAULT_UNKNOWN_NAME
|
13
14
|
from ..core.paths import activity_extracted_dir
|
14
15
|
from ..core.paths import activity_extracted_meta_dir
|
15
16
|
from ..core.paths import activity_extracted_time_series_dir
|
@@ -84,8 +85,8 @@ def import_from_directory(
|
|
84
85
|
# https://stackoverflow.com/a/74718395/653152
|
85
86
|
name=path.name.removesuffix("".join(path.suffixes)),
|
86
87
|
path=str(path),
|
87
|
-
kind=
|
88
|
-
equipment=
|
88
|
+
kind=DEFAULT_UNKNOWN_NAME,
|
89
|
+
equipment=DEFAULT_UNKNOWN_NAME,
|
89
90
|
consider_for_achievements=True,
|
90
91
|
)
|
91
92
|
activity_meta.update(activity_meta_from_file)
|
@@ -13,6 +13,7 @@ import pandas as pd
|
|
13
13
|
from tqdm import tqdm
|
14
14
|
|
15
15
|
from ..core.datamodel import ActivityMeta
|
16
|
+
from ..core.datamodel import DEFAULT_UNKNOWN_NAME
|
16
17
|
from ..core.paths import activity_extracted_meta_dir
|
17
18
|
from ..core.paths import activity_extracted_time_series_dir
|
18
19
|
from ..core.paths import strava_last_activity_date_path
|
@@ -277,7 +278,7 @@ def convert_strava_checkout(
|
|
277
278
|
nan_as_none(row["Activity Gear"])
|
278
279
|
or nan_as_none(row["Bike"])
|
279
280
|
or nan_as_none(row["Gear"])
|
280
|
-
or
|
281
|
+
or DEFAULT_UNKNOWN_NAME
|
281
282
|
)
|
282
283
|
activity_file = checkout_path / row["Filename"]
|
283
284
|
|
@@ -26,7 +26,12 @@ def register_eddington_blueprint(
|
|
26
26
|
@blueprint.route("/")
|
27
27
|
def distance():
|
28
28
|
return _render_eddington_template(
|
29
|
-
repository,
|
29
|
+
repository,
|
30
|
+
request,
|
31
|
+
search_query_history,
|
32
|
+
"distance",
|
33
|
+
column_distance,
|
34
|
+
[1],
|
30
35
|
)
|
31
36
|
|
32
37
|
@blueprint.route("/elevation_gain")
|
@@ -64,6 +69,10 @@ def _render_eddington_template(
|
|
64
69
|
.copy()
|
65
70
|
)
|
66
71
|
|
72
|
+
assert (
|
73
|
+
len(activities) > 0
|
74
|
+
), "The filter has selected zero elements, that cannot work here."
|
75
|
+
|
67
76
|
activities["year"] = [start.year for start in activities["start"]]
|
68
77
|
activities["date"] = [start.date() for start in activities["start"]]
|
69
78
|
activities["isoyear"] = [start.isocalendar().year for start in activities["start"]]
|
@@ -111,24 +120,24 @@ def _render_eddington_template(
|
|
111
120
|
)
|
112
121
|
|
113
122
|
|
114
|
-
def _get_values_per_group(grouped,
|
123
|
+
def _get_values_per_group(grouped, column_name, divisor) -> tuple[int, pd.DataFrame]:
|
115
124
|
sum_per_group = grouped.apply(
|
116
|
-
lambda group: int(sum(group[
|
125
|
+
lambda group: int(sum(group[column_name])), include_groups=False
|
117
126
|
)
|
118
127
|
counts = dict(zip(*np.unique(sorted(sum_per_group), return_counts=True)))
|
119
128
|
eddington = pd.DataFrame(
|
120
|
-
{
|
129
|
+
{column_name: d, "count": counts.get(d, 0)}
|
121
130
|
for d in range(max(counts.keys()) + 1)
|
122
131
|
)
|
123
132
|
eddington["total"] = eddington["count"][::-1].cumsum()[::-1]
|
124
|
-
eddington[f"{
|
133
|
+
eddington[f"{column_name}_div"] = eddington[column_name] // divisor
|
125
134
|
en = (
|
126
|
-
eddington.loc[eddington["total"] >= eddington[f"{
|
127
|
-
"
|
135
|
+
eddington.loc[eddington["total"] >= eddington[f"{column_name}_div"]][
|
136
|
+
f"{column_name}_div"
|
128
137
|
].iloc[-1]
|
129
138
|
* divisor
|
130
139
|
)
|
131
|
-
eddington["missing"] = eddington[f"{
|
140
|
+
eddington["missing"] = eddington[f"{column_name}_div"] - eddington["total"]
|
132
141
|
|
133
142
|
return en, eddington
|
134
143
|
|
@@ -31,9 +31,11 @@ def register_entry_views(
|
|
31
31
|
context["distance_last_30_days_plot"] = _last_30_days_meta_plot(
|
32
32
|
repository.meta, kind_scale, column_distance
|
33
33
|
)
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
|
35
|
+
if config.reliable_elevation_measurements:
|
36
|
+
context["elevation_gain_last_30_days_plot"] = _last_30_days_meta_plot(
|
37
|
+
repository.meta, kind_scale, column_elevation_gain
|
38
|
+
)
|
37
39
|
|
38
40
|
context["latest_activities"] = collections.defaultdict(list)
|
39
41
|
for activity in DB.session.scalars(
|
@@ -21,7 +21,7 @@ def make_equipment_blueprint(
|
|
21
21
|
)
|
22
22
|
|
23
23
|
# Prepare data for the stacked area chart
|
24
|
-
activities = repository.meta
|
24
|
+
activities = repository.meta.dropna(subset=["start"])
|
25
25
|
activities["month"] = (
|
26
26
|
activities["start"].dt.to_period("M").apply(lambda r: r.start_time)
|
27
27
|
)
|
@@ -277,7 +277,7 @@ def make_settings_blueprint(
|
|
277
277
|
if request.method == "POST":
|
278
278
|
zone_names = request.form.getlist("zone_name")
|
279
279
|
zone_geojsons = request.form.getlist("zone_geojson")
|
280
|
-
|
280
|
+
save_privacy_zones(zone_names, zone_geojsons, config_accessor)
|
281
281
|
|
282
282
|
assert len(zone_names) == len(zone_geojsons)
|
283
283
|
new_zone_config = {}
|
@@ -411,6 +411,7 @@ def make_settings_blueprint(
|
|
411
411
|
@needs_authentication(authenticator)
|
412
412
|
def strava_callback():
|
413
413
|
code = request.args.get("code", type=str)
|
414
|
+
assert code
|
414
415
|
strava_login_helper.save_strava_code(code)
|
415
416
|
return redirect(url_for(".strava"))
|
416
417
|
|
@@ -495,3 +496,65 @@ class StravaLoginHelper:
|
|
495
496
|
self._config_accessor().strava_client_code = code
|
496
497
|
self._config_accessor.save()
|
497
498
|
flash("Connected to Strava API", category="success")
|
499
|
+
|
500
|
+
|
501
|
+
def save_privacy_zones(
|
502
|
+
zone_names: list[str], zone_geojsons: list[str], config_accessor: ConfigAccessor
|
503
|
+
) -> None:
|
504
|
+
assert len(zone_names) == len(zone_geojsons)
|
505
|
+
new_zone_config = {}
|
506
|
+
|
507
|
+
for zone_name, zone_geojson_str in zip(zone_names, zone_geojsons):
|
508
|
+
if not zone_name or not zone_geojson_str:
|
509
|
+
continue
|
510
|
+
|
511
|
+
try:
|
512
|
+
zone_geojson = json.loads(zone_geojson_str)
|
513
|
+
except json.decoder.JSONDecodeError as e:
|
514
|
+
flash(
|
515
|
+
f"Could not parse GeoJSON for {zone_name} due to the following error: {e}"
|
516
|
+
)
|
517
|
+
continue
|
518
|
+
|
519
|
+
if not zone_geojson["type"] == "FeatureCollection":
|
520
|
+
flash(
|
521
|
+
f"Pasted GeoJSON for {zone_name} must be of type 'FeatureCollection'.",
|
522
|
+
category="danger",
|
523
|
+
)
|
524
|
+
continue
|
525
|
+
|
526
|
+
features = zone_geojson["features"]
|
527
|
+
|
528
|
+
if not len(features) == 1:
|
529
|
+
flash(
|
530
|
+
f"Pasted GeoJSON for {zone_name} must contain exactly one feature. You cannot have multiple shapes for one privacy zone",
|
531
|
+
category="danger",
|
532
|
+
)
|
533
|
+
continue
|
534
|
+
|
535
|
+
feature = features[0]
|
536
|
+
geometry = feature["geometry"]
|
537
|
+
|
538
|
+
if not geometry["type"] == "Polygon":
|
539
|
+
flash(
|
540
|
+
f"Geometry for {zone_name} is not a polygon. You need to create a polygon (or circle or rectangle).",
|
541
|
+
category="danger",
|
542
|
+
)
|
543
|
+
continue
|
544
|
+
|
545
|
+
coordinates = geometry["coordinates"]
|
546
|
+
|
547
|
+
if not len(coordinates) == 1:
|
548
|
+
flash(
|
549
|
+
f"Polygon for {zone_name} consists of multiple polygons. Please supply a simple one.",
|
550
|
+
category="danger",
|
551
|
+
)
|
552
|
+
continue
|
553
|
+
|
554
|
+
points = coordinates[0]
|
555
|
+
|
556
|
+
new_zone_config[zone_name] = points
|
557
|
+
|
558
|
+
config_accessor().privacy_zones = new_zone_config
|
559
|
+
config_accessor.save()
|
560
|
+
flash("Updated privacy zones.", category="success")
|
@@ -11,6 +11,7 @@ from flask import url_for
|
|
11
11
|
|
12
12
|
from ...core.activities import ActivityRepository
|
13
13
|
from ...core.config import Config
|
14
|
+
from ...core.datamodel import Activity
|
14
15
|
from ...core.datamodel import DB
|
15
16
|
from ...core.datamodel import Kind
|
16
17
|
from ...core.enrichment import populate_database_from_extracted
|
@@ -78,9 +79,12 @@ def make_upload_blueprint(
|
|
78
79
|
config,
|
79
80
|
skip_strava=True,
|
80
81
|
)
|
81
|
-
|
82
|
-
|
83
|
-
|
82
|
+
latest_activity = DB.session.scalar(
|
83
|
+
sqlalchemy.select(Activity).order_by(Activity.id.desc()).limit(1)
|
84
|
+
)
|
85
|
+
assert latest_activity is not None
|
86
|
+
flash(f"Activity was saved with ID {latest_activity.id}.", "success")
|
87
|
+
return redirect(f"/activity/{latest_activity.id}")
|
84
88
|
|
85
89
|
@blueprint.route("/refresh")
|
86
90
|
@needs_authentication(authenticator)
|
@@ -9,7 +9,9 @@
|
|
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
|
+
{% if elevation_gain_last_30_days_plot %}
|
12
13
|
{{ vega_direct("elevation-gain-last-30-days", elevation_gain_last_30_days_plot) }}
|
14
|
+
{% endif %}
|
13
15
|
</div>
|
14
16
|
</div>
|
15
17
|
|
@@ -103,10 +103,12 @@
|
|
103
103
|
|
104
104
|
<div class="tab-content mb-3" id="myTabContent">
|
105
105
|
{% for year, plot in plot_distance_heatmaps.items() %}
|
106
|
+
{% if year %}
|
106
107
|
<div class="tab-pane fade {% if loop.last %} show active {% endif %}" id="heatmap-{{ year }}-pane" role="tabpanel"
|
107
108
|
aria-labelledby="heatmap-{{ year }}" tabindex="0">
|
108
109
|
{{ vega_direct("plot_distance_heatmap_%d"|format(year), plot) }}
|
109
110
|
</div>
|
111
|
+
{% endif %}
|
110
112
|
{% endfor %}
|
111
113
|
</div>
|
112
114
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|