geo-activity-playground 0.35.1__py3-none-any.whl → 0.36.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- geo_activity_playground/core/activities.py +21 -13
- geo_activity_playground/core/raster_map.py +9 -13
- geo_activity_playground/importers/directory.py +6 -15
- geo_activity_playground/webui/app.py +27 -35
- geo_activity_playground/webui/{auth/blueprint.py → auth_blueprint.py} +1 -1
- geo_activity_playground/webui/{eddington/controller.py → eddington_blueprint.py} +17 -13
- geo_activity_playground/webui/heatmap/blueprint.py +36 -10
- geo_activity_playground/webui/heatmap/heatmap_controller.py +142 -60
- geo_activity_playground/webui/heatmap/templates/heatmap/index.html.j2 +30 -12
- geo_activity_playground/webui/{search/blueprint.py → search_blueprint.py} +1 -1
- geo_activity_playground/webui/settings/blueprint.py +1 -2
- geo_activity_playground/webui/square_planner_blueprint.py +118 -0
- geo_activity_playground/webui/{summary/controller.py → summary_blueprint.py} +23 -23
- geo_activity_playground/webui/templates/page.html.j2 +17 -11
- geo_activity_playground/webui/tile_blueprint.py +42 -0
- geo_activity_playground/webui/upload_blueprint.py +1 -3
- {geo_activity_playground-0.35.1.dist-info → geo_activity_playground-0.36.1.dist-info}/METADATA +1 -1
- {geo_activity_playground-0.35.1.dist-info → geo_activity_playground-0.36.1.dist-info}/RECORD +26 -34
- geo_activity_playground/webui/eddington/__init__.py +0 -0
- geo_activity_playground/webui/eddington/blueprint.py +0 -16
- geo_activity_playground/webui/square_planner/__init__.py +0 -0
- geo_activity_playground/webui/square_planner/blueprint.py +0 -38
- geo_activity_playground/webui/square_planner/controller.py +0 -101
- geo_activity_playground/webui/summary/__init__.py +0 -0
- geo_activity_playground/webui/summary/blueprint.py +0 -14
- geo_activity_playground/webui/tile/__init__.py +0 -0
- geo_activity_playground/webui/tile/blueprint.py +0 -29
- geo_activity_playground/webui/tile/controller.py +0 -36
- /geo_activity_playground/webui/{auth/templates → templates}/auth/index.html.j2 +0 -0
- /geo_activity_playground/webui/{eddington/templates → templates}/eddington/index.html.j2 +0 -0
- /geo_activity_playground/webui/{search/templates → templates}/search/index.html.j2 +0 -0
- /geo_activity_playground/webui/{square_planner/templates → templates}/square_planner/index.html.j2 +0 -0
- /geo_activity_playground/webui/{summary/templates → templates}/summary/index.html.j2 +0 -0
- {geo_activity_playground-0.35.1.dist-info → geo_activity_playground-0.36.1.dist-info}/LICENSE +0 -0
- {geo_activity_playground-0.35.1.dist-info → geo_activity_playground-0.36.1.dist-info}/WHEEL +0 -0
- {geo_activity_playground-0.35.1.dist-info → geo_activity_playground-0.36.1.dist-info}/entry_points.txt +0 -0
@@ -7,20 +7,38 @@
|
|
7
7
|
</div>
|
8
8
|
</div>
|
9
9
|
|
10
|
-
<
|
11
|
-
|
12
|
-
|
10
|
+
<form action="" method="GET">
|
11
|
+
|
12
|
+
<div class="row mb-3">
|
13
|
+
<label class="col-sm-2 col-form-label">Kinds</label>
|
14
|
+
|
15
|
+
<div class="col-sm-10">
|
13
16
|
{% for kind in available_kinds %}
|
14
|
-
<div class="form-check form-check-inline form-switch">
|
15
|
-
<input class="form-check-input" type="checkbox" role="switch" id="{{
|
16
|
-
value="{{
|
17
|
-
<label class="form-check-label" for="{{
|
17
|
+
<div class="form-check form-check-inline form-switch ">
|
18
|
+
<input class="form-check-input" type="checkbox" role="switch" id="kind{{ loop.index0 }}" name="kind"
|
19
|
+
value="{{ loop.index0 }}" {{ 'checked' if loop.index0 in kinds else '' }} />
|
20
|
+
<label class="form-check-label" for="kind{{ loop.index0 }}">{{ kind }}</label>
|
18
21
|
</div>
|
19
22
|
{% endfor %}
|
20
|
-
|
21
|
-
</form>
|
23
|
+
</div>
|
22
24
|
</div>
|
23
|
-
|
25
|
+
|
26
|
+
<div class="row mb-3">
|
27
|
+
<label class="col-sm-2 col-form-label">Date range</label>
|
28
|
+
<div class="col-sm-5">
|
29
|
+
<input type="date" id="date-start" name="date-start" value="{{ date_start }}" />
|
30
|
+
<label for="date-start" class="form-label">Start date</label>
|
31
|
+
</div>
|
32
|
+
<div class="col-sm-5">
|
33
|
+
<input type="date" id="date-end" name="date-end" value="{{ date_end }}" />
|
34
|
+
<label for="date-start" class="form-label">End date</label>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div class="mb-3">
|
39
|
+
<button type="submit" class="btn btn-primary">Filter heatmap</button>
|
40
|
+
</div>
|
41
|
+
</form>
|
24
42
|
|
25
43
|
<div class="row mb-3">
|
26
44
|
<div class="col">
|
@@ -33,7 +51,7 @@
|
|
33
51
|
center: [{{ center.latitude }}, {{ center.longitude }}],
|
34
52
|
zoom: 12
|
35
53
|
});
|
36
|
-
L.tileLayer('/heatmap/tile/{z}/{x}/{y}
|
54
|
+
L.tileLayer('/heatmap/tile/{z}/{x}/{y}.png?{{ extra_args|safe }}', {
|
37
55
|
maxZoom: 19,
|
38
56
|
attribution: '{{ map_tile_attribution|safe }}'
|
39
57
|
}).addTo(map)
|
@@ -47,7 +65,7 @@
|
|
47
65
|
function downloadAs() {
|
48
66
|
bounds = map.getBounds()
|
49
67
|
window.location.href =
|
50
|
-
`/heatmap/download/${bounds.getNorth()}/${bounds.getEast()}/${bounds.getSouth()}/${bounds.getWest()}/{{
|
68
|
+
`/heatmap/download/${bounds.getNorth()}/${bounds.getEast()}/${bounds.getSouth()}/${bounds.getWest()}/heatmap.png?{{ extra_args|safe }}`
|
51
69
|
}
|
52
70
|
</script>
|
53
71
|
</div>
|
@@ -0,0 +1,118 @@
|
|
1
|
+
import geojson
|
2
|
+
from flask import Blueprint
|
3
|
+
from flask import redirect
|
4
|
+
from flask import render_template
|
5
|
+
from flask import Response
|
6
|
+
from flask import url_for
|
7
|
+
|
8
|
+
from geo_activity_playground.explorer.grid_file import make_explorer_rectangle
|
9
|
+
from geo_activity_playground.explorer.grid_file import make_explorer_tile
|
10
|
+
from geo_activity_playground.explorer.grid_file import make_grid_file_geojson
|
11
|
+
from geo_activity_playground.explorer.grid_file import make_grid_file_gpx
|
12
|
+
from geo_activity_playground.explorer.grid_file import make_grid_points
|
13
|
+
from geo_activity_playground.explorer.tile_visits import TileVisitAccessor
|
14
|
+
|
15
|
+
|
16
|
+
def make_square_planner_blueprint(tile_visit_accessor: TileVisitAccessor) -> Blueprint:
|
17
|
+
tile_visits = tile_visit_accessor.tile_state["tile_visits"]
|
18
|
+
|
19
|
+
blueprint = Blueprint("square_planner", __name__, template_folder="templates")
|
20
|
+
|
21
|
+
@blueprint.route("/<int:zoom>")
|
22
|
+
def landing(zoom: int):
|
23
|
+
explored = tile_visit_accessor.tile_state["evolution_state"][zoom]
|
24
|
+
return redirect(
|
25
|
+
url_for(
|
26
|
+
"square_planner.index",
|
27
|
+
zoom=zoom,
|
28
|
+
x=explored.square_x,
|
29
|
+
y=explored.square_y,
|
30
|
+
size=explored.max_square_size,
|
31
|
+
)
|
32
|
+
)
|
33
|
+
|
34
|
+
@blueprint.route("/<int:zoom>/<int:x>/<int:y>/<int:size>")
|
35
|
+
def index(zoom: int, x: int, y: int, size: int):
|
36
|
+
square_geojson = geojson.dumps(
|
37
|
+
geojson.FeatureCollection(
|
38
|
+
features=[
|
39
|
+
make_explorer_rectangle(
|
40
|
+
x,
|
41
|
+
y,
|
42
|
+
x + size,
|
43
|
+
y + size,
|
44
|
+
zoom,
|
45
|
+
)
|
46
|
+
]
|
47
|
+
)
|
48
|
+
)
|
49
|
+
|
50
|
+
missing_geojson = geojson.dumps(
|
51
|
+
geojson.FeatureCollection(
|
52
|
+
features=[
|
53
|
+
make_explorer_tile(
|
54
|
+
tile_x,
|
55
|
+
tile_y,
|
56
|
+
{},
|
57
|
+
zoom,
|
58
|
+
)
|
59
|
+
for tile_x in range(x, x + size)
|
60
|
+
for tile_y in range(y, y + size)
|
61
|
+
if (tile_x, tile_y) not in set(tile_visits[zoom].keys())
|
62
|
+
]
|
63
|
+
)
|
64
|
+
)
|
65
|
+
|
66
|
+
return render_template(
|
67
|
+
"square_planner/index.html.j2",
|
68
|
+
explored_geojson=_get_explored_geojson(tile_visits[zoom].keys(), zoom),
|
69
|
+
missing_geojson=missing_geojson,
|
70
|
+
square_geojson=square_geojson,
|
71
|
+
zoom=zoom,
|
72
|
+
square_x=x,
|
73
|
+
square_y=y,
|
74
|
+
square_size=size,
|
75
|
+
)
|
76
|
+
|
77
|
+
@blueprint.route("/<int:zoom>/<int:x>/<int:y>/<int:size>/missing.<suffix>")
|
78
|
+
def square_planner_missing(zoom: int, x: int, y: int, size: int, suffix: str):
|
79
|
+
points = make_grid_points(
|
80
|
+
(
|
81
|
+
(tile_x, tile_y)
|
82
|
+
for tile_x in range(x, x + size)
|
83
|
+
for tile_y in range(y, y + size)
|
84
|
+
if (tile_x, tile_y) not in set(tile_visits[zoom].keys())
|
85
|
+
),
|
86
|
+
zoom,
|
87
|
+
)
|
88
|
+
if suffix == "geojson":
|
89
|
+
response = make_grid_file_geojson(points)
|
90
|
+
elif suffix == "gpx":
|
91
|
+
response = make_grid_file_gpx(points)
|
92
|
+
else:
|
93
|
+
raise RuntimeError(f"Unsupported suffix {suffix}.")
|
94
|
+
|
95
|
+
mimetypes = {"geojson": "application/json", "gpx": "application/xml"}
|
96
|
+
return Response(
|
97
|
+
response,
|
98
|
+
mimetype=mimetypes[suffix],
|
99
|
+
headers={"Content-disposition": "attachment"},
|
100
|
+
)
|
101
|
+
|
102
|
+
return blueprint
|
103
|
+
|
104
|
+
|
105
|
+
def _get_explored_geojson(tile_visits: list[tuple[int, int]], zoom: int) -> str:
|
106
|
+
return geojson.dumps(
|
107
|
+
geojson.FeatureCollection(
|
108
|
+
features=[
|
109
|
+
make_explorer_tile(
|
110
|
+
tile_x,
|
111
|
+
tile_y,
|
112
|
+
{},
|
113
|
+
zoom,
|
114
|
+
)
|
115
|
+
for tile_x, tile_y in tile_visits
|
116
|
+
]
|
117
|
+
)
|
118
|
+
)
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import collections
|
2
2
|
import datetime
|
3
|
-
import functools
|
4
3
|
|
5
4
|
import altair as alt
|
6
5
|
import pandas as pd
|
6
|
+
from flask import Blueprint
|
7
|
+
from flask import render_template
|
7
8
|
|
8
9
|
from geo_activity_playground.core.activities import ActivityRepository
|
9
10
|
from geo_activity_playground.core.activities import make_geojson_from_time_series
|
@@ -11,15 +12,13 @@ from geo_activity_playground.core.config import Config
|
|
11
12
|
from geo_activity_playground.webui.plot_util import make_kind_scale
|
12
13
|
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
self._repository = repository
|
17
|
-
self._config = config
|
15
|
+
def make_summary_blueprint(repository: ActivityRepository, config: Config) -> Blueprint:
|
16
|
+
blueprint = Blueprint("summary", __name__, template_folder="templates")
|
18
17
|
|
19
|
-
@
|
20
|
-
def
|
21
|
-
kind_scale = make_kind_scale(
|
22
|
-
df = embellished_activities(
|
18
|
+
@blueprint.route("/")
|
19
|
+
def index():
|
20
|
+
kind_scale = make_kind_scale(repository.meta, config)
|
21
|
+
df = embellished_activities(repository.meta)
|
23
22
|
# df = df.loc[df["consider_for_achievements"]]
|
24
23
|
|
25
24
|
year_kind_total = (
|
@@ -29,28 +28,29 @@ class SummaryController:
|
|
29
28
|
.reset_index()
|
30
29
|
)
|
31
30
|
|
32
|
-
return
|
33
|
-
"
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
return render_template(
|
32
|
+
"summary/index.html.j2",
|
33
|
+
plot_distance_heatmaps=plot_distance_heatmaps(df, config),
|
34
|
+
plot_monthly_distance=plot_monthly_distance(df, kind_scale),
|
35
|
+
plot_yearly_distance=plot_yearly_distance(year_kind_total, kind_scale),
|
36
|
+
plot_year_cumulative=plot_year_cumulative(df),
|
37
|
+
tabulate_year_kind_mean=tabulate_year_kind_mean(df)
|
38
38
|
.reset_index()
|
39
39
|
.to_dict(orient="split"),
|
40
|
-
|
41
|
-
|
40
|
+
plot_weekly_distance=plot_weekly_distance(df, kind_scale),
|
41
|
+
nominations=[
|
42
42
|
(
|
43
|
-
|
43
|
+
repository.get_activity_by_id(activity_id),
|
44
44
|
reasons,
|
45
45
|
make_geojson_from_time_series(
|
46
|
-
|
46
|
+
repository.get_time_series(activity_id)
|
47
47
|
),
|
48
48
|
)
|
49
|
-
for activity_id, reasons in nominate_activities(
|
50
|
-
self._repository.meta
|
51
|
-
).items()
|
49
|
+
for activity_id, reasons in nominate_activities(repository.meta).items()
|
52
50
|
],
|
53
|
-
|
51
|
+
)
|
52
|
+
|
53
|
+
return blueprint
|
54
54
|
|
55
55
|
|
56
56
|
def nominate_activities(meta: pd.DataFrame) -> dict[int, list[str]]:
|
@@ -8,21 +8,18 @@
|
|
8
8
|
<title>Geo Activity Playground</title>
|
9
9
|
|
10
10
|
<!-- Bootstrap CSS. -->
|
11
|
-
<link href="/static/bootstrap.min.css" rel="stylesheet"
|
12
|
-
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
11
|
+
<link href="/static/bootstrap.min.css" rel="stylesheet">
|
13
12
|
|
14
13
|
<!-- Leaflet for interactive maps. -->
|
15
|
-
<link rel="stylesheet" href="/static/leaflet.css"
|
16
|
-
|
17
|
-
<script src="/static/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
18
|
-
crossorigin=""></script>
|
14
|
+
<link rel="stylesheet" href="/static/leaflet.css" />
|
15
|
+
<script src="/static/leaflet.js"></script>
|
19
16
|
|
20
17
|
<!-- Fullscreen button for Leaflet. -->
|
21
18
|
<link href='/static/leaflet.fullscreen.css' rel='stylesheet' />
|
22
19
|
<script src='/static/Leaflet.fullscreen.min.js'></script>
|
23
20
|
|
24
|
-
<link rel="stylesheet" href="/static/MarkerCluster.css"
|
25
|
-
<link rel="stylesheet" href="/static/MarkerCluster.Default.css"
|
21
|
+
<link rel="stylesheet" href="/static/MarkerCluster.css" />
|
22
|
+
<link rel="stylesheet" href="/static/MarkerCluster.Default.css" />
|
26
23
|
<script src="/static/leaflet.markercluster.js"></script>
|
27
24
|
|
28
25
|
<!-- Vega for plots.-->
|
@@ -97,6 +94,17 @@
|
|
97
94
|
Tiles (Zoom 14)</a></li>
|
98
95
|
<li><a class="dropdown-item" href="{{ url_for('explorer.map', zoom=17) }}">Squadratinhos
|
99
96
|
(Zoom 17)</a></li>
|
97
|
+
|
98
|
+
<li>
|
99
|
+
<hr class="dropdown-divider">
|
100
|
+
</li>
|
101
|
+
|
102
|
+
<li><a class="dropdown-item"
|
103
|
+
href="{{ url_for('square_planner.landing', zoom=14) }}">Square Planner
|
104
|
+
(Zoom 14)</a></li>
|
105
|
+
<li><a class="dropdown-item"
|
106
|
+
href="{{ url_for('square_planner.landing', zoom=17) }}">Square Planner
|
107
|
+
(Zoom 17)</a></li>
|
100
108
|
</ul>
|
101
109
|
</li>
|
102
110
|
|
@@ -204,9 +212,7 @@
|
|
204
212
|
</div>
|
205
213
|
</div>
|
206
214
|
|
207
|
-
<script src="/static/bootstrap.bundle.min.js"
|
208
|
-
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
|
209
|
-
crossorigin="anonymous"></script>
|
215
|
+
<script src="/static/bootstrap.bundle.min.js"></script>
|
210
216
|
</body>
|
211
217
|
|
212
218
|
</html>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import io
|
2
|
+
|
3
|
+
import matplotlib.pyplot as pl
|
4
|
+
import numpy as np
|
5
|
+
from flask import Blueprint
|
6
|
+
from flask import Response
|
7
|
+
|
8
|
+
from geo_activity_playground.core.config import Config
|
9
|
+
from geo_activity_playground.core.raster_map import get_tile
|
10
|
+
|
11
|
+
|
12
|
+
def make_tile_blueprint(config: Config) -> Blueprint:
|
13
|
+
blueprint = Blueprint("tiles", __name__, template_folder="templates")
|
14
|
+
|
15
|
+
@blueprint.route("/color/<int:z>/<int:x>/<int:y>.png")
|
16
|
+
def tile_color(x: int, y: int, z: int):
|
17
|
+
map_tile = np.array(get_tile(z, x, y, config.map_tile_url)) / 255
|
18
|
+
f = io.BytesIO()
|
19
|
+
pl.imsave(f, map_tile, format="png")
|
20
|
+
return Response(bytes(f.getbuffer()), mimetype="image/png")
|
21
|
+
|
22
|
+
@blueprint.route("/grayscale/<int:z>/<int:x>/<int:y>.png")
|
23
|
+
def tile_grayscale(x: int, y: int, z: int):
|
24
|
+
map_tile = np.array(get_tile(z, x, y, config.map_tile_url)) / 255
|
25
|
+
map_tile = np.sum(map_tile * [0.2126, 0.7152, 0.0722], axis=2) # to grayscale
|
26
|
+
map_tile = np.dstack((map_tile, map_tile, map_tile)) # to rgb
|
27
|
+
f = io.BytesIO()
|
28
|
+
pl.imsave(f, map_tile, format="png")
|
29
|
+
return Response(bytes(f.getbuffer()), mimetype="image/png")
|
30
|
+
|
31
|
+
@blueprint.route("/pastel/<int:z>/<int:x>/<int:y>.png")
|
32
|
+
def tile_pastel(x: int, y: int, z: int):
|
33
|
+
map_tile = np.array(get_tile(z, x, y, config.map_tile_url)) / 255
|
34
|
+
averaged_tile = np.sum(map_tile * [0.2126, 0.7152, 0.0722], axis=2)
|
35
|
+
grayscale_tile = np.dstack((averaged_tile, averaged_tile, averaged_tile))
|
36
|
+
factor = 0.7
|
37
|
+
pastel_tile = factor * grayscale_tile + (1 - factor) * map_tile
|
38
|
+
f = io.BytesIO()
|
39
|
+
pl.imsave(f, pastel_tile, format="png")
|
40
|
+
return Response(bytes(f.getbuffer()), mimetype="image/png")
|
41
|
+
|
42
|
+
return blueprint
|
@@ -108,9 +108,7 @@ def scan_for_activities(
|
|
108
108
|
skip_strava: bool = False,
|
109
109
|
) -> None:
|
110
110
|
if pathlib.Path("Activities").exists():
|
111
|
-
import_from_directory(
|
112
|
-
config.metadata_extraction_regexes, config.num_processes, config
|
113
|
-
)
|
111
|
+
import_from_directory(config.metadata_extraction_regexes, config)
|
114
112
|
if pathlib.Path("Strava Export").exists():
|
115
113
|
import_from_strava_checkout()
|
116
114
|
if config.strava_client_code and not skip_strava:
|
{geo_activity_playground-0.35.1.dist-info → geo_activity_playground-0.36.1.dist-info}/RECORD
RENAMED
@@ -1,14 +1,14 @@
|
|
1
1
|
geo_activity_playground/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
geo_activity_playground/__main__.py,sha256=vFKB0Jjk8ImDHqok6Fddb5CRWHEnxyn5r4Zs0A1EsCQ,4585
|
3
3
|
geo_activity_playground/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
geo_activity_playground/core/activities.py,sha256=
|
4
|
+
geo_activity_playground/core/activities.py,sha256=CYIr7bw9IJ7QQjjt1AWMGXcjZwl7PT-4gaxBOmuO2Qg,7197
|
5
5
|
geo_activity_playground/core/config.py,sha256=uqiwk7CgcuGx8JemHSsRKjRwyNT1YTb7V0gX0OJhfaI,5109
|
6
6
|
geo_activity_playground/core/coordinates.py,sha256=tDfr9mlXhK6E_MMIJ0vYWVCoH0Lq8uyuaqUgaa8i0jg,966
|
7
7
|
geo_activity_playground/core/enrichment.py,sha256=fUmk6avy_rqePlHmJQFTQhAxjgIRaxxmq18N2OSXBBg,7771
|
8
8
|
geo_activity_playground/core/heart_rate.py,sha256=IwMt58TpjOYqpAxtsj07zP2ttpN_J3GZeiv-qGhYyJc,1598
|
9
9
|
geo_activity_playground/core/paths.py,sha256=RBeUi38riP_msTGPy1TsPRNiblzE-lFivaJSLULE8b0,2503
|
10
10
|
geo_activity_playground/core/privacy_zones.py,sha256=4TumHsVUN1uW6RG3ArqTXDykPVipF98DCxVBe7YNdO8,512
|
11
|
-
geo_activity_playground/core/raster_map.py,sha256=
|
11
|
+
geo_activity_playground/core/raster_map.py,sha256=RrbpotWIIT1friSewSxRczk4FY6v8ofOO6kO1ERMWvM,6962
|
12
12
|
geo_activity_playground/core/similarity.py,sha256=Jo8jRViuORCxdIGvyaflgsQhwu9S_jn10a450FRL18A,3159
|
13
13
|
geo_activity_playground/core/tasks.py,sha256=aMDBWJqp6ek2ao6G6Xa8GOSZbcQqXoWL74SGRowRPIk,2942
|
14
14
|
geo_activity_playground/core/test_tiles.py,sha256=zce1FxNfsSpOQt66jMehdQRVoNdl-oiFydx6iVBHZXM,764
|
@@ -23,7 +23,7 @@ geo_activity_playground/heatmap_video.py,sha256=Oc3EAAsW27zhG28Rmy3i2GoN1rjm1UFg
|
|
23
23
|
geo_activity_playground/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
geo_activity_playground/importers/activity_parsers.py,sha256=5MvtjmXruPAoUO1KlDycoj677NeETgODiyxsFjXNppg,11103
|
25
25
|
geo_activity_playground/importers/csv_parser.py,sha256=O1pP5GLhWhnWcy2Lsrr9g17Zspuibpt-GtZ3ZS5eZF4,2143
|
26
|
-
geo_activity_playground/importers/directory.py,sha256=
|
26
|
+
geo_activity_playground/importers/directory.py,sha256=v9YC65cSXMmZBDW094HHUfTC-4H98sEkatRZJ38OHos,5454
|
27
27
|
geo_activity_playground/importers/strava_api.py,sha256=cJCZsLemhOlxTtZh0z_npidgae9SD5HyEUry2uvem_A,7775
|
28
28
|
geo_activity_playground/importers/strava_checkout.py,sha256=dAKW1wVqlA5zRw25SvpYZZrEikJtaUluInyhJ0RfsFc,10002
|
29
29
|
geo_activity_playground/importers/test_csv_parser.py,sha256=LXqva7GuSAfXYE2zZQrg-69lCtfy5MxLSq6BRwL_VyI,1191
|
@@ -38,19 +38,15 @@ geo_activity_playground/webui/activity/templates/activity/edit.html.j2,sha256=ck
|
|
38
38
|
geo_activity_playground/webui/activity/templates/activity/lines.html.j2,sha256=_ZDg1ruW-9UMJfOudy1-uY_-IcSSaagq7tPCih5Bb8g,1079
|
39
39
|
geo_activity_playground/webui/activity/templates/activity/name.html.j2,sha256=tKviMqMouHEGv3xBQVIsJgwj_hjwAsmGVefM3UMqlYg,2437
|
40
40
|
geo_activity_playground/webui/activity/templates/activity/show.html.j2,sha256=bEx37UGSTeeJl7gN4fjyOpINFQwZ5Zm-HOKpLqcJGfs,6905
|
41
|
-
geo_activity_playground/webui/app.py,sha256=
|
42
|
-
geo_activity_playground/webui/
|
43
|
-
geo_activity_playground/webui/auth/templates/auth/index.html.j2,sha256=ILQ5HvTEYc3OrtOAIFt1VrqWorVD70V9DC342znmP70,579
|
41
|
+
geo_activity_playground/webui/app.py,sha256=eXF7reuw6bX-Ez3hDK3nPacePrD4XRcElp0gBRdyWoI,5440
|
42
|
+
geo_activity_playground/webui/auth_blueprint.py,sha256=sERpBU6cXdBuVjMMiRQBGJMibFZCfrUXMPj4ukzd_Ug,783
|
44
43
|
geo_activity_playground/webui/authenticator.py,sha256=k278OEVuOfAmTGT4F2X4pqSTwwkK_FA87EIhAeysEqc,1416
|
45
44
|
geo_activity_playground/webui/calendar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
46
45
|
geo_activity_playground/webui/calendar/blueprint.py,sha256=Kjyx9lkJoM5tL8vNba0Y7HhJuFRVId4F-ONZsXpKyyg,721
|
47
46
|
geo_activity_playground/webui/calendar/controller.py,sha256=QpSAkR2s1sbLSu6P_fNNTccgGglOzEH2PIv1XwKxeVY,2778
|
48
47
|
geo_activity_playground/webui/calendar/templates/calendar/index.html.j2,sha256=xoR6R4cUgTQNRHQv3m3f4Bc-yCjJEsJj5d4_CWlJsRo,1427
|
49
48
|
geo_activity_playground/webui/calendar/templates/calendar/month.html.j2,sha256=sRIiNo_Rp9CHary6e-lnpKJKOuAonoDEBvKMxzbTLQE,1802
|
50
|
-
geo_activity_playground/webui/
|
51
|
-
geo_activity_playground/webui/eddington/blueprint.py,sha256=2VUiH0HXqp4hK86PmcyOtZ2WTlunJqmsArOYRpVLaAc,452
|
52
|
-
geo_activity_playground/webui/eddington/controller.py,sha256=ly7JSkSS79kO4CL_xugB62uRuuWKVqOjbN-pheelv94,2910
|
53
|
-
geo_activity_playground/webui/eddington/templates/eddington/index.html.j2,sha256=XHKeUymQMS5x00PLOVlg-nSRCz_jHB2pvD8QunULWJ4,1839
|
49
|
+
geo_activity_playground/webui/eddington_blueprint.py,sha256=70Jyrlv9s2HAbspJ-7JAOZsH02PrIbMCRL28wNomVgk,3084
|
54
50
|
geo_activity_playground/webui/entry_controller.py,sha256=McxbyouKWHJ3a2R9agPazZoG7VHiFO1RvnkBr08dMH8,2168
|
55
51
|
geo_activity_playground/webui/equipment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
52
|
geo_activity_playground/webui/equipment/blueprint.py,sha256=kJhCSdakke_UhT2RIP-fMoAMaC1oFttRoCPeiAIaB6g,491
|
@@ -61,13 +57,12 @@ geo_activity_playground/webui/explorer/blueprint.py,sha256=iLmdayavR7B1_l67VvkMG
|
|
61
57
|
geo_activity_playground/webui/explorer/controller.py,sha256=pIzWh0TpLJgKQZlS325-QT7nA1q9ms7fRqQIp24PNfo,11705
|
62
58
|
geo_activity_playground/webui/explorer/templates/explorer/index.html.j2,sha256=3t9ikAF6oMvEaVlS3Kb1tj9ngomIQlatzqPnqVsEDKA,6908
|
63
59
|
geo_activity_playground/webui/heatmap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
64
|
-
geo_activity_playground/webui/heatmap/blueprint.py,sha256
|
65
|
-
geo_activity_playground/webui/heatmap/heatmap_controller.py,sha256=
|
66
|
-
geo_activity_playground/webui/heatmap/templates/heatmap/index.html.j2,sha256=
|
60
|
+
geo_activity_playground/webui/heatmap/blueprint.py,sha256=-Cd-b2_3uU-6tBDsqlbyrVacftDod8SoIZnDRsIC5H8,2548
|
61
|
+
geo_activity_playground/webui/heatmap/heatmap_controller.py,sha256=kO9IrRdaIcCuTu6d5lSOi8rLbBl_gqbht9psGtPzbIk,10709
|
62
|
+
geo_activity_playground/webui/heatmap/templates/heatmap/index.html.j2,sha256=lO3WdD7CkLSnTuQeQMvCkuFpJbL_TDp7Zocbwbug0wg,2512
|
67
63
|
geo_activity_playground/webui/plot_util.py,sha256=pTTQoqOCkLVjkgOit7mbry28kMruZIL8amZozSzEpxQ,283
|
68
|
-
geo_activity_playground/webui/
|
69
|
-
geo_activity_playground/webui/
|
70
|
-
geo_activity_playground/webui/settings/blueprint.py,sha256=GIrCOBNw-uNWDmKj4uduYOiKpoTLEfFbGmUmXkoBqro,9405
|
64
|
+
geo_activity_playground/webui/search_blueprint.py,sha256=3EBj70BHxEj8ZInK0Fj04p3JJMcHByj-xwOISmaj_4E,3299
|
65
|
+
geo_activity_playground/webui/settings/blueprint.py,sha256=l5H9kxjwMpqPQoF8moIp3r6oU-RQmuWr38yiHUZYU00,9391
|
71
66
|
geo_activity_playground/webui/settings/controller.py,sha256=MIZVBfoGNvmJnB_ECV_x5eH2i6gDZvkWSQ4PcSKyLKs,9170
|
72
67
|
geo_activity_playground/webui/settings/templates/settings/admin-password.html.j2,sha256=VYwddpObD1RpeTH5Dm4y7VtmT7kwURDCIjxyzJeq08c,495
|
73
68
|
geo_activity_playground/webui/settings/templates/settings/color-schemes.html.j2,sha256=iR91Wxd2_TMuIo9dBDZBrWSUGHNwTwzC6O8oNH-XBt4,1653
|
@@ -81,10 +76,7 @@ geo_activity_playground/webui/settings/templates/settings/privacy-zones.html.j2,
|
|
81
76
|
geo_activity_playground/webui/settings/templates/settings/segmentation.html.j2,sha256=QV72TZcIxqql-vEsq2lKHzo5UxoxeeXkRA9se46GWKU,1187
|
82
77
|
geo_activity_playground/webui/settings/templates/settings/sharepic.html.j2,sha256=qZkfEpd4CtKKMaSSVadqvNEgMRYLV-0X-pw5-nJvukk,678
|
83
78
|
geo_activity_playground/webui/settings/templates/settings/strava.html.j2,sha256=FrXgT-m1PgvsQWo9kMKpk8QenKeifSDBCZFqKgsHRxQ,1827
|
84
|
-
geo_activity_playground/webui/
|
85
|
-
geo_activity_playground/webui/square_planner/blueprint.py,sha256=r2VkSM547chX85g6c1BQ8NC-tkdqGdYp-2ZALBiiDTc,1320
|
86
|
-
geo_activity_playground/webui/square_planner/controller.py,sha256=ML6ftOyr3tTh7D4DBcRP76CvkyTxqI5QWgMeG9wC8FE,3561
|
87
|
-
geo_activity_playground/webui/square_planner/templates/square_planner/index.html.j2,sha256=xFbYBQtkOl3U4WGkvIuU_5uazGHn8ObvQfNgPGq0Gqg,6469
|
79
|
+
geo_activity_playground/webui/square_planner_blueprint.py,sha256=A-bTwSsT1JpMyQ6qVlXoitAW1u4OXAoNAbA61RrGgow,3975
|
88
80
|
geo_activity_playground/webui/static/Leaflet.fullscreen.min.js,sha256=MMWj_yFOercjzhk8wKIIKyDCK7olXrwk_7R7TjDhGYs,3677
|
89
81
|
geo_activity_playground/webui/static/MarkerCluster.Default.css,sha256=LWhzWaQGZRsWFrrJxg-6Zn8TT84k0_trtiHBc6qcGpY,1346
|
90
82
|
geo_activity_playground/webui/static/MarkerCluster.css,sha256=-bdWuWOXMFkX0v9Cvr3OWClPiYefDQz9GGZP_7xZxdc,886
|
@@ -114,20 +106,20 @@ geo_activity_playground/webui/static/vega-lite@4,sha256=roXmcY9bUF91uB9V-eSEUHEg
|
|
114
106
|
geo_activity_playground/webui/static/vega@5,sha256=5DLHUaY2P0ph2mKSDMfX69E88J2ClJ-PSGJI-Acdw84,514536
|
115
107
|
geo_activity_playground/webui/static/web-app-manifest-192x192.png,sha256=eEImN6iWfSv-EnSNPL5WbX84PKakse_8VZMBPWWye3o,13582
|
116
108
|
geo_activity_playground/webui/static/web-app-manifest-512x512.png,sha256=vU9oQ4HnQerFDZVzcAT9twj4_Doc6_9v9wVvoRI-f_E,48318
|
117
|
-
geo_activity_playground/webui/
|
118
|
-
geo_activity_playground/webui/
|
119
|
-
geo_activity_playground/webui/
|
120
|
-
geo_activity_playground/webui/summary/templates/summary/index.html.j2,sha256=ctOx3Qjx6nRDpUtFf1DlJhK_gtU77Vwx_S6euLz9-W4,5183
|
109
|
+
geo_activity_playground/webui/summary_blueprint.py,sha256=FrPQgx6-lOX3DiaCveJu_n0a_mSTt-XUMxWVcHNkUUU,9399
|
110
|
+
geo_activity_playground/webui/templates/auth/index.html.j2,sha256=ILQ5HvTEYc3OrtOAIFt1VrqWorVD70V9DC342znmP70,579
|
111
|
+
geo_activity_playground/webui/templates/eddington/index.html.j2,sha256=XHKeUymQMS5x00PLOVlg-nSRCz_jHB2pvD8QunULWJ4,1839
|
121
112
|
geo_activity_playground/webui/templates/home.html.j2,sha256=IdCqI_LLcYrpUjjCO-tbXR4s05XYrPOateiJ4idF3bo,2202
|
122
|
-
geo_activity_playground/webui/templates/page.html.j2,sha256=
|
113
|
+
geo_activity_playground/webui/templates/page.html.j2,sha256=CHRvO2HGHjBnMNffX7a-C-pm2544wErKOcW66lghKos,10785
|
114
|
+
geo_activity_playground/webui/templates/search/index.html.j2,sha256=d39uhteoY6JOZePqhLIYLERqkckW3oghMnTUZa7X1J8,3798
|
115
|
+
geo_activity_playground/webui/templates/square_planner/index.html.j2,sha256=xFbYBQtkOl3U4WGkvIuU_5uazGHn8ObvQfNgPGq0Gqg,6469
|
116
|
+
geo_activity_playground/webui/templates/summary/index.html.j2,sha256=ctOx3Qjx6nRDpUtFf1DlJhK_gtU77Vwx_S6euLz9-W4,5183
|
123
117
|
geo_activity_playground/webui/templates/upload/index.html.j2,sha256=I1Ix8tDS3YBdi-HdaNfjkzYXVVCjfUTe5PFTnap1ydc,775
|
124
118
|
geo_activity_playground/webui/templates/upload/reload.html.j2,sha256=YZWX5eDeNyqKJdQAywDBcU8DZBm22rRBbZqFjrFrCvQ,556
|
125
|
-
geo_activity_playground/webui/
|
126
|
-
geo_activity_playground/webui/
|
127
|
-
geo_activity_playground/
|
128
|
-
geo_activity_playground/
|
129
|
-
geo_activity_playground-0.
|
130
|
-
geo_activity_playground-0.
|
131
|
-
geo_activity_playground-0.
|
132
|
-
geo_activity_playground-0.35.1.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
|
133
|
-
geo_activity_playground-0.35.1.dist-info/RECORD,,
|
119
|
+
geo_activity_playground/webui/tile_blueprint.py,sha256=QU8YRjhMf-lhPJGqrCjV49QBX0ATgTny96GYhqJwwyI,1755
|
120
|
+
geo_activity_playground/webui/upload_blueprint.py,sha256=Ha3H5Dsl6YS6YYmFouXamU8viEpLIj1YIE9XJVCiakY,4368
|
121
|
+
geo_activity_playground-0.36.1.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
|
122
|
+
geo_activity_playground-0.36.1.dist-info/METADATA,sha256=FPKNfpP12TAxEuUWa2UBvlP7JWpBc7gculCSzOnPyP8,1573
|
123
|
+
geo_activity_playground-0.36.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
124
|
+
geo_activity_playground-0.36.1.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
|
125
|
+
geo_activity_playground-0.36.1.dist-info/RECORD,,
|
File without changes
|
@@ -1,16 +0,0 @@
|
|
1
|
-
from flask import Blueprint
|
2
|
-
from flask import render_template
|
3
|
-
|
4
|
-
from .controller import EddingtonController
|
5
|
-
|
6
|
-
|
7
|
-
def make_eddington_blueprint(eddington_controller: EddingtonController) -> Blueprint:
|
8
|
-
blueprint = Blueprint("eddington", __name__, template_folder="templates")
|
9
|
-
|
10
|
-
@blueprint.route("/")
|
11
|
-
def index():
|
12
|
-
return render_template(
|
13
|
-
"eddington/index.html.j2", **eddington_controller.render()
|
14
|
-
)
|
15
|
-
|
16
|
-
return blueprint
|
File without changes
|
@@ -1,38 +0,0 @@
|
|
1
|
-
from flask import Blueprint
|
2
|
-
from flask import render_template
|
3
|
-
from flask import Response
|
4
|
-
|
5
|
-
from ...core.activities import ActivityRepository
|
6
|
-
from ...explorer.tile_visits import TileVisitAccessor
|
7
|
-
from .controller import SquarePlannerController
|
8
|
-
|
9
|
-
|
10
|
-
def make_square_planner_blueprint(
|
11
|
-
repository: ActivityRepository, tile_visit_accessor: TileVisitAccessor
|
12
|
-
) -> Blueprint:
|
13
|
-
blueprint = Blueprint("square_planner", __name__, template_folder="templates")
|
14
|
-
controller = SquarePlannerController(repository, tile_visit_accessor)
|
15
|
-
|
16
|
-
@blueprint.route("/<zoom>/<x>/<y>/<size>")
|
17
|
-
def index(zoom, x, y, size):
|
18
|
-
return render_template(
|
19
|
-
"square_planner/index.html.j2",
|
20
|
-
**controller.action_planner(int(zoom), int(x), int(y), int(size))
|
21
|
-
)
|
22
|
-
|
23
|
-
@blueprint.route("/<zoom>/<x>/<y>/<size>/missing.<suffix>")
|
24
|
-
def square_planner_missing(zoom, x, y, size, suffix: str):
|
25
|
-
mimetypes = {"geojson": "application/json", "gpx": "application/xml"}
|
26
|
-
return Response(
|
27
|
-
controller.export_missing_tiles(
|
28
|
-
int(zoom),
|
29
|
-
int(x),
|
30
|
-
int(y),
|
31
|
-
int(size),
|
32
|
-
suffix,
|
33
|
-
),
|
34
|
-
mimetype=mimetypes[suffix],
|
35
|
-
headers={"Content-disposition": "attachment"},
|
36
|
-
)
|
37
|
-
|
38
|
-
return blueprint
|