geo-activity-playground 1.1.0__py3-none-any.whl → 1.3.0__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/alembic/versions/85fe0348e8a2_add_time_series_uuid_field.py +28 -0
- geo_activity_playground/alembic/versions/f2f50843be2d_make_all_fields_in_activity_nullable.py +34 -0
- geo_activity_playground/core/coordinates.py +12 -1
- geo_activity_playground/core/copernicus_dem.py +95 -0
- geo_activity_playground/core/datamodel.py +78 -22
- geo_activity_playground/core/enrichment.py +226 -164
- geo_activity_playground/core/paths.py +8 -0
- geo_activity_playground/core/test_pandas_timezone.py +36 -0
- geo_activity_playground/core/test_time_zone_from_location.py +7 -0
- geo_activity_playground/core/test_time_zone_import.py +93 -0
- geo_activity_playground/core/test_timezone_sqlalchemy.py +44 -0
- geo_activity_playground/core/tiles.py +4 -1
- geo_activity_playground/core/time_conversion.py +42 -14
- geo_activity_playground/explorer/tile_visits.py +7 -4
- geo_activity_playground/importers/activity_parsers.py +21 -22
- geo_activity_playground/importers/directory.py +62 -108
- geo_activity_playground/importers/strava_api.py +53 -36
- geo_activity_playground/importers/strava_checkout.py +30 -56
- geo_activity_playground/webui/app.py +40 -2
- geo_activity_playground/webui/blueprints/activity_blueprint.py +13 -11
- geo_activity_playground/webui/blueprints/entry_views.py +1 -1
- geo_activity_playground/webui/blueprints/explorer_blueprint.py +1 -7
- geo_activity_playground/webui/blueprints/heatmap_blueprint.py +2 -2
- geo_activity_playground/webui/blueprints/photo_blueprint.py +65 -56
- geo_activity_playground/webui/blueprints/settings_blueprint.py +20 -14
- geo_activity_playground/webui/blueprints/summary_blueprint.py +6 -6
- geo_activity_playground/webui/blueprints/time_zone_fixer_blueprint.py +69 -0
- geo_activity_playground/webui/blueprints/upload_blueprint.py +3 -16
- geo_activity_playground/webui/columns.py +9 -1
- geo_activity_playground/webui/templates/activity/show.html.j2 +3 -1
- geo_activity_playground/webui/templates/equipment/index.html.j2 +3 -3
- geo_activity_playground/webui/templates/hall_of_fame/index.html.j2 +2 -3
- geo_activity_playground/webui/templates/home.html.j2 +4 -10
- geo_activity_playground/webui/templates/page.html.j2 +2 -0
- geo_activity_playground/webui/templates/photo/new.html.j2 +1 -1
- geo_activity_playground/webui/templates/settings/index.html.j2 +9 -0
- geo_activity_playground/webui/templates/settings/tile-source.html.j2 +33 -0
- geo_activity_playground/webui/templates/time_zone_fixer/index.html.j2 +31 -0
- {geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/METADATA +7 -3
- {geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/RECORD +43 -34
- geo_activity_playground/core/test_time_conversion.py +0 -37
- {geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/LICENSE +0 -0
- {geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/WHEEL +0 -0
- {geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
import sqlalchemy
|
4
|
+
from flask import Blueprint
|
5
|
+
from flask import redirect
|
6
|
+
from flask import render_template
|
7
|
+
from flask import Response
|
8
|
+
from flask import url_for
|
9
|
+
|
10
|
+
from ...core.config import Config
|
11
|
+
from ...core.datamodel import Activity
|
12
|
+
from ...core.datamodel import DB
|
13
|
+
from ...core.enrichment import enrichment_set_timezone
|
14
|
+
from ...core.enrichment import update_and_commit
|
15
|
+
from ...explorer.tile_visits import TileVisitAccessor
|
16
|
+
from ..authenticator import Authenticator
|
17
|
+
from ..authenticator import needs_authentication
|
18
|
+
|
19
|
+
logger = logging.getLogger(__name__)
|
20
|
+
|
21
|
+
|
22
|
+
def make_time_zone_fixer_blueprint(
|
23
|
+
authenticator: Authenticator, config: Config, tile_visit_accessor: TileVisitAccessor
|
24
|
+
) -> Blueprint:
|
25
|
+
|
26
|
+
blueprint = Blueprint("time_zone_fixer", __name__, template_folder="templates")
|
27
|
+
|
28
|
+
@blueprint.route("/")
|
29
|
+
def index() -> str:
|
30
|
+
return render_template("time_zone_fixer/index.html.j2")
|
31
|
+
|
32
|
+
@blueprint.route("/local-to-utc")
|
33
|
+
@needs_authentication(authenticator)
|
34
|
+
def local_to_utc():
|
35
|
+
convert(True)
|
36
|
+
return redirect(url_for("index"))
|
37
|
+
|
38
|
+
@blueprint.route("/utc-to-utc")
|
39
|
+
@needs_authentication(authenticator)
|
40
|
+
def utc_to_utc():
|
41
|
+
convert(False)
|
42
|
+
return redirect(url_for("index"))
|
43
|
+
|
44
|
+
def convert(from_iana: bool) -> None:
|
45
|
+
for activity in DB.session.scalars(sqlalchemy.select(Activity)).all():
|
46
|
+
if activity.start is None:
|
47
|
+
continue
|
48
|
+
|
49
|
+
logger.info(f"Changing time zone for {activity.name} …")
|
50
|
+
|
51
|
+
time_series = activity.raw_time_series
|
52
|
+
enrichment_set_timezone(activity, time_series, config)
|
53
|
+
if time_series["time"].dt.tz is None:
|
54
|
+
time_series["time"] = time_series["time"].dt.tz_localize(
|
55
|
+
activity.iana_timezone if from_iana else "UTC"
|
56
|
+
)
|
57
|
+
time_series["time"] = time_series["time"].dt.tz_convert("UTC")
|
58
|
+
update_and_commit(activity, time_series, config)
|
59
|
+
|
60
|
+
@blueprint.route("/truncate-activities")
|
61
|
+
@needs_authentication(authenticator)
|
62
|
+
def truncate_activities():
|
63
|
+
DB.session.query(Activity).delete()
|
64
|
+
DB.session.commit()
|
65
|
+
tile_visit_accessor.reset()
|
66
|
+
tile_visit_accessor.save()
|
67
|
+
return redirect(url_for("upload.reload"))
|
68
|
+
|
69
|
+
return blueprint
|
@@ -13,13 +13,9 @@ from ...core.activities import ActivityRepository
|
|
13
13
|
from ...core.config import Config
|
14
14
|
from ...core.datamodel import Activity
|
15
15
|
from ...core.datamodel import DB
|
16
|
-
from ...core.datamodel import Kind
|
17
|
-
from ...core.enrichment import populate_database_from_extracted
|
18
|
-
from ...core.tasks import work_tracker_path
|
19
16
|
from ...explorer.tile_visits import compute_tile_evolution
|
20
17
|
from ...explorer.tile_visits import compute_tile_visits_new
|
21
18
|
from ...explorer.tile_visits import TileVisitAccessor
|
22
|
-
from ...importers.directory import get_file_hash
|
23
19
|
from ...importers.directory import import_from_directory
|
24
20
|
from ...importers.strava_api import import_from_strava_api
|
25
21
|
from ...importers.strava_checkout import import_from_strava_checkout
|
@@ -122,22 +118,13 @@ def scan_for_activities(
|
|
122
118
|
skip_strava: bool = False,
|
123
119
|
) -> None:
|
124
120
|
if pathlib.Path("Activities").exists():
|
125
|
-
import_from_directory(
|
121
|
+
import_from_directory(repository, tile_visit_accessor, config)
|
126
122
|
if pathlib.Path("Strava Export").exists():
|
127
|
-
import_from_strava_checkout()
|
123
|
+
import_from_strava_checkout(config)
|
128
124
|
if config.strava_client_code and not skip_strava:
|
129
|
-
import_from_strava_api(config)
|
130
|
-
|
131
|
-
populate_database_from_extracted(config)
|
125
|
+
import_from_strava_api(config, repository, tile_visit_accessor)
|
132
126
|
|
133
127
|
if len(repository) > 0:
|
134
|
-
kinds = DB.session.scalars(sqlalchemy.select(Kind)).all()
|
135
|
-
if all(kind.consider_for_achievements == False for kind in kinds):
|
136
|
-
for kind in kinds:
|
137
|
-
kind.consider_for_achievements = True
|
138
|
-
DB.session.commit()
|
139
|
-
tile_visit_accessor.reset()
|
140
|
-
work_tracker_path("tile-state").unlink(missing_ok=True)
|
141
128
|
compute_tile_visits_new(repository, tile_visit_accessor)
|
142
129
|
compute_tile_evolution(tile_visit_accessor.tile_state, config)
|
143
130
|
tile_visit_accessor.save()
|
@@ -60,6 +60,7 @@ column_speed = ColumnDescription(
|
|
60
60
|
unit="km/h",
|
61
61
|
format=".1f",
|
62
62
|
)
|
63
|
+
|
63
64
|
column_elevation = ColumnDescription(
|
64
65
|
name="elevation",
|
65
66
|
display_name="Elevation",
|
@@ -67,4 +68,11 @@ column_elevation = ColumnDescription(
|
|
67
68
|
format=".0f",
|
68
69
|
)
|
69
70
|
|
70
|
-
|
71
|
+
column_copernicus_elevation = ColumnDescription(
|
72
|
+
name="copernicus_elevation",
|
73
|
+
display_name="Elevation (Copernicus DEM)",
|
74
|
+
unit="m",
|
75
|
+
format=".0f",
|
76
|
+
)
|
77
|
+
|
78
|
+
TIME_SERIES_COLUMNS = [column_speed, column_elevation, column_copernicus_elevation]
|
@@ -44,7 +44,7 @@
|
|
44
44
|
(60/activity.average_speed_elapsed_kmh)|round(1) }} min/km</dd>
|
45
45
|
<dt>Start time</dt>
|
46
46
|
<dd><a href="{{ url_for('activity.day', year=date.year, month=date.month, day=date.day) }}">{{ date }}</a>
|
47
|
-
{{ time }}
|
47
|
+
{{ time }} {{ activity.iana_timezone }}
|
48
48
|
</dd>
|
49
49
|
{% endif %}
|
50
50
|
|
@@ -79,6 +79,8 @@
|
|
79
79
|
<dd>{{ activity.upstream_id }}</dd>
|
80
80
|
<dt>Source path</dt>
|
81
81
|
<dd><a href="{{ url_for('.download_original', id=activity.id) }}">{{ activity.path }}</a></dd>
|
82
|
+
<dt>Time series path</dt>
|
83
|
+
<dd>{{ activity.time_series_path }}</dd>
|
82
84
|
</dl>
|
83
85
|
|
84
86
|
<a href="{{ url_for('.edit', id=activity['id']) }}" class="btn btn-secondary btn-small">Edit</a>
|
@@ -49,13 +49,13 @@
|
|
49
49
|
<h3>{{ equipment }}</h3>
|
50
50
|
<div class="row mb-3">
|
51
51
|
<div class="col-md-4">
|
52
|
-
{{ vega_direct(data.
|
52
|
+
{{ vega_direct(data.total_distances_plot) }}
|
53
53
|
</div>
|
54
54
|
<div class="col-md-4">
|
55
|
-
{{ vega_direct(data.
|
55
|
+
{{ vega_direct(data.yearly_distance_plot) }}
|
56
56
|
</div>
|
57
57
|
<div class="col-md-4">
|
58
|
-
{{ vega_direct(data.
|
58
|
+
{{ vega_direct(data.usages_plot) }}
|
59
59
|
</div>
|
60
60
|
</div>
|
61
61
|
{% endfor %}
|
@@ -44,9 +44,8 @@
|
|
44
44
|
{% endfor %}
|
45
45
|
</ul>
|
46
46
|
</p>
|
47
|
-
<p class="card-text"><small class="text-body-secondary"></small>{{ activity.
|
48
|
-
|
49
|
-
activity.elapsed_time|td }} on {{ activity.start|dt }}</small></p>
|
47
|
+
<p class="card-text"><small class="text-body-secondary"></small>{{ activity.emoji_string }} on {{
|
48
|
+
activity.start_local_tz|dt }} {{ activity.iana_timezone }}</small></p>
|
50
49
|
</div>
|
51
50
|
</div>
|
52
51
|
</div>
|
@@ -46,17 +46,11 @@
|
|
46
46
|
<h5 class="card-title">{{ elem.activity.name }}</h5>
|
47
47
|
</a>
|
48
48
|
<p class="card-text">
|
49
|
-
{{ elem.activity.
|
50
|
-
📏 {{ (elem.activity.distance_km)|round(1) }} km
|
51
|
-
{% if elem.activity.elapsed_time %}
|
52
|
-
⏱️ {{ elem.activity.elapsed_time|td }}
|
53
|
-
{% endif %}
|
54
|
-
{% if elem.activity.elevation_gain %}
|
55
|
-
⛰️ {{ (elem.activity.elevation_gain)|round|int }} m
|
56
|
-
{% endif %}
|
49
|
+
{{ elem.activity.emoji_string }}
|
57
50
|
</p>
|
58
|
-
{% if elem.activity.
|
59
|
-
<p class="card-text"><small class="text-body-secondary">{{ elem.activity.
|
51
|
+
{% if elem.activity.start_local_tz %}
|
52
|
+
<p class="card-text"><small class="text-body-secondary">{{ elem.activity.start_local_tz|dt }} {{
|
53
|
+
elem.activity.iana_timezone }}</small></p>
|
60
54
|
{% endif %}
|
61
55
|
</div>
|
62
56
|
</div>
|
@@ -151,6 +151,8 @@
|
|
151
151
|
</li>
|
152
152
|
<li><a class="dropdown-item" href="{{ url_for('settings.index') }}">Settings</a></li>
|
153
153
|
<li><a class="dropdown-item" href="{{ url_for('export.index') }}">Data Export</a></li>
|
154
|
+
<li><a class="dropdown-item" href="{{ url_for('time_zone_fixer.index') }}">Time Zone
|
155
|
+
Fixer</a></li>
|
154
156
|
</ul>
|
155
157
|
</li>
|
156
158
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<form method="POST" enctype="multipart/form-data">
|
7
7
|
<div class="mb-3">
|
8
8
|
<label for="file" class="form-label">Photo file</label>
|
9
|
-
<input type="file" name="file" id="file" class="form-control">
|
9
|
+
<input type="file" name="file" id="file" class="form-control" multiple>
|
10
10
|
</div>
|
11
11
|
<button type="submit" class="btn btn-primary">Upload</button>
|
12
12
|
</form>
|
@@ -56,6 +56,15 @@
|
|
56
56
|
</div>
|
57
57
|
</div>
|
58
58
|
</div>
|
59
|
+
<div class="col">
|
60
|
+
<div class="card">
|
61
|
+
<div class="card-body">
|
62
|
+
<h5 class="card-title">Map tile source</h5>
|
63
|
+
<p class="card-text">Change the source of the map tiles.</p>
|
64
|
+
<a href="{{ url_for('.tile_source') }}" class="btn btn-primary">Change tile source</a>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
</div>
|
59
68
|
<div class="col">
|
60
69
|
<div class="card">
|
61
70
|
<div class="card-body">
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{% extends "page.html.j2" %}
|
2
|
+
|
3
|
+
{% block container %}
|
4
|
+
|
5
|
+
<h1 class="mb-3">Tile Source</h1>
|
6
|
+
|
7
|
+
<p>You can change the tile source to be whatever you like. Be aware that different sources have different licensing
|
8
|
+
constraints. It is on you to make sure that you are allowed to use the tiles from the source that you enter. See <a
|
9
|
+
href="https://wiki.openstreetmap.org/wiki/Raster_tile_providers" target="_blank">this list of raster tile
|
10
|
+
providers</a> for inspiration.</p>
|
11
|
+
|
12
|
+
|
13
|
+
<form action="" method="POST" class="mb-3">
|
14
|
+
<div class="mb-3">
|
15
|
+
<label for="map_tile_url" class="form-label">Map tile URL</label>
|
16
|
+
<input type="text" class="form-control" id="map_tile_url" name="map_tile_url" value="{{ map_tile_url }}" />
|
17
|
+
</div>
|
18
|
+
<div class="mb-3">
|
19
|
+
<label for="map_tile_attribution" class="form-label">Map tile attribution</label>
|
20
|
+
<input type="text" class="form-control" id="map_tile_attribution" name="map_tile_attribution"
|
21
|
+
value="{{ map_tile_attribution|e }}" />
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<button type="submit" class="btn btn-primary">Save</button>
|
25
|
+
</form>
|
26
|
+
|
27
|
+
<h2>Test image</h2>
|
28
|
+
|
29
|
+
<p>This is a tile using your current tile source:</p>
|
30
|
+
|
31
|
+
<p><img src="{{ test_url }}"></p>
|
32
|
+
|
33
|
+
{% endblock %}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
{% extends "page.html.j2" %}
|
2
|
+
|
3
|
+
{% block container %}
|
4
|
+
|
5
|
+
<h1 class="mb-3">Time Zone Fixer</h1>
|
6
|
+
|
7
|
+
<p>Prior to version 1.3.0, activity times were interpreted in the local time zone. If your software recorded in UTC, it
|
8
|
+
was assumed that this was your local time zone. This assumption was often wrong. With version 1.3.0, this got fixed.
|
9
|
+
Activities will be imported using UTC or specified time zone. They will then be localized into the time zone of the
|
10
|
+
activity position.</p>
|
11
|
+
|
12
|
+
<p>Use this tool to fix activities which were imported with an older version.</p>
|
13
|
+
|
14
|
+
<p>Your activities are shown in the local time zone of the activity but no time zone is shown. </p>
|
15
|
+
<p><a class="btn btn-small btn-danger" href="{{ url_for('.local_to_utc') }}"
|
16
|
+
onclick="if(!confirm('Are you sure to run this?')){ event.preventDefault() }">Interpret times as local time
|
17
|
+
zone</a></p>
|
18
|
+
|
19
|
+
<p>Your activities seem to be UTC and don't confirm to the local time zone. You have the impression that all the times
|
20
|
+
are off.</p>
|
21
|
+
<p><a class="btn btn-small btn-danger" href="{{ url_for('.utc_to_utc') }}"
|
22
|
+
onclick="if(!confirm('Are you sure to run this?')){ event.preventDefault() }">Interpret times as UTC</a></p>
|
23
|
+
|
24
|
+
<p>Everything seems broken. You want to reload all your activities. Be aware that with Strava API that can take ages due
|
25
|
+
to the rate limiting. Also be aware that this will delete all changes that you did after importing the activity
|
26
|
+
(changing the name, equipment, adding tags, trimming the activity). </p>
|
27
|
+
<p><a class="btn btn-small btn-danger" href="{{ url_for('.truncate_activities') }}"
|
28
|
+
onclick="if(!confirm('Are you sure to run this?')){ event.preventDefault() }">Throw all activities away and
|
29
|
+
rescan</a></p>
|
30
|
+
|
31
|
+
{% endblock %}
|
{geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/METADATA
RENAMED
@@ -1,14 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: geo-activity-playground
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.3.0
|
4
4
|
Summary: Analysis of geo data activities like rides, runs or hikes.
|
5
5
|
License: MIT
|
6
6
|
Author: Martin Ueding
|
7
7
|
Author-email: mu@martin-ueding.de
|
8
|
-
Requires-Python: >=3.
|
8
|
+
Requires-Python: >=3.11,<3.14
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
12
11
|
Classifier: Programming Language :: Python :: 3.11
|
13
12
|
Classifier: Programming Language :: Python :: 3.12
|
14
13
|
Classifier: Programming Language :: Python :: 3.13
|
@@ -16,6 +15,7 @@ Requires-Dist: Pillow (>=11.0.0,<12.0.0)
|
|
16
15
|
Requires-Dist: alembic (>=1.15.2,<2.0.0)
|
17
16
|
Requires-Dist: altair (>=5.5.0,<6.0.0)
|
18
17
|
Requires-Dist: appdirs (>=1.4.4,<2.0.0)
|
18
|
+
Requires-Dist: boto3 (>=1.38.45,<2.0.0)
|
19
19
|
Requires-Dist: charset-normalizer (>=3.3.2,<4.0.0)
|
20
20
|
Requires-Dist: coloredlogs (>=15.0.1,<16.0.0)
|
21
21
|
Requires-Dist: exifread (>=3.2.0,<4.0.0)
|
@@ -24,15 +24,19 @@ Requires-Dist: flask (>=3.0.0,<4.0.0)
|
|
24
24
|
Requires-Dist: flask-alembic (>=3.1.1,<4.0.0)
|
25
25
|
Requires-Dist: flask-sqlalchemy (>=3.1.1,<4.0.0)
|
26
26
|
Requires-Dist: geojson (>=3.0.1,<4.0.0)
|
27
|
+
Requires-Dist: geotiff (>=0.2.10,<0.3.0)
|
27
28
|
Requires-Dist: gpxpy (>=1.5.0,<2.0.0)
|
29
|
+
Requires-Dist: imagecodecs (>=2025.3.30,<2026.0.0)
|
28
30
|
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
|
29
31
|
Requires-Dist: matplotlib (>=3.10.1,<4.0.0)
|
32
|
+
Requires-Dist: numcodecs (<0.15.0)
|
30
33
|
Requires-Dist: numpy (>=2.2.3,<3.0.0)
|
31
34
|
Requires-Dist: openpyxl (>=3.1.5,<4.0.0)
|
32
35
|
Requires-Dist: pandas (>=2.2.3,<3.0.0)
|
33
36
|
Requires-Dist: pyarrow (>=19.0.1,<20.0.0)
|
34
37
|
Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
|
35
38
|
Requires-Dist: requests (>=2.28.1,<3.0.0)
|
39
|
+
Requires-Dist: scipy (>=1.16.0,<2.0.0)
|
36
40
|
Requires-Dist: shapely (>=2.0.5,<3.0.0)
|
37
41
|
Requires-Dist: sqlalchemy (>=2.0.40,<3.0.0)
|
38
42
|
Requires-Dist: stravalib (>=2.0,<3.0)
|
@@ -7,25 +7,28 @@ geo_activity_playground/alembic/versions/0f02b92c4f94_add_tag_color.py,sha256=gW
|
|
7
7
|
geo_activity_playground/alembic/versions/38882503dc7c_add_tags_to_activities.py,sha256=HmvYgHlVodHB7xyigg7zHkFXSi1znWqKfOHcd6y9sZE,3157
|
8
8
|
geo_activity_playground/alembic/versions/451e7836b53d_add_square_planner_bookmark.py,sha256=WrmlDllnJECg6cSOeS05wYCa977_SXbJUV5khDSzntw,1082
|
9
9
|
geo_activity_playground/alembic/versions/63d3b7f6f93c_initial_version.py,sha256=YTnnENkQ8WqLz7PFof7tUWNkWcoHGkAfAM52x1N9umo,3029
|
10
|
+
geo_activity_playground/alembic/versions/85fe0348e8a2_add_time_series_uuid_field.py,sha256=BLvofqUnySKGnUisiZxxcDISEMo6GIo9djLaXCnmKPg,861
|
10
11
|
geo_activity_playground/alembic/versions/93cc82ad1b60_add_parametricplotspec.py,sha256=P9nG348kz6Wi2lD8lJ_f-0juBtlJb1tqBWYqP2XMQPE,1365
|
11
12
|
geo_activity_playground/alembic/versions/ab83b9d23127_add_upstream_id.py,sha256=Wz02lBP2r7-09DjuQP8u8i7ypQ2SZU5RUc422-_ZBDk,851
|
12
13
|
geo_activity_playground/alembic/versions/b03491c593f6_add_crop_indices.py,sha256=1pt7aes0PWJXZ98HxqeDK-ehaU9KLApjCmZYoqCa8V0,975
|
13
14
|
geo_activity_playground/alembic/versions/da2cba03b71d_add_photos.py,sha256=_DvUge61HsoF9LppXuavIzjAhoe1kp-dnaynxtd9h30,1394
|
14
15
|
geo_activity_playground/alembic/versions/dc8073871da7_add_plotspec_group_by.py,sha256=AekV_JiJM5Q2RNf57XjnJpknAQZQ1cGBvKjj7Jtn304,845
|
15
16
|
geo_activity_playground/alembic/versions/e02e27876deb_add_square_planner_bookmark_name.py,sha256=Y0OMxp5z_-CQ83rww6GEBFRawXu0J0pLrLArgSjJ7wQ,866
|
17
|
+
geo_activity_playground/alembic/versions/f2f50843be2d_make_all_fields_in_activity_nullable.py,sha256=b0GnskwsjyyftveEDD8Kaff8Vk1gZjikZPrkAW9AbHY,1321
|
16
18
|
geo_activity_playground/alembic/versions/script.py.mako,sha256=3qBrHBf7F7ChKDUIdiNItiSXrDpgQdM7sR0YKzpaC50,689
|
17
19
|
geo_activity_playground/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
20
|
geo_activity_playground/core/activities.py,sha256=apP_-Rg1ub3lh7RARMGXf2BOmJTiahxqpX_soEnYF3E,4681
|
19
21
|
geo_activity_playground/core/config.py,sha256=mmdMQ5iCLNGnAlriT1ETEVS-gM6Aq_9sg22QECHj4n8,5358
|
20
|
-
geo_activity_playground/core/coordinates.py,sha256=
|
21
|
-
geo_activity_playground/core/
|
22
|
-
geo_activity_playground/core/
|
22
|
+
geo_activity_playground/core/coordinates.py,sha256=rW_OmMRpTUyIsQwrT6mgT9Y6uPGuwqTo5XDDMS7mGuo,1140
|
23
|
+
geo_activity_playground/core/copernicus_dem.py,sha256=U6pvUAymLCX4CpbQKvUoXRj8LYdlaQTKtEVlrlHH3kw,2934
|
24
|
+
geo_activity_playground/core/datamodel.py,sha256=3LdTm7lqykeLM6KYviW9WamgnS61nGNl-NHSEQdwTXY,15765
|
25
|
+
geo_activity_playground/core/enrichment.py,sha256=gb8amLAjpcEYTeseQl6U6kOy8o1p63pzvoOf2f7iryY,8597
|
23
26
|
geo_activity_playground/core/export.py,sha256=ayOmhWL72263oP9NLIZRYCg_Db0GLUFhgNIL_MCrV-E,4435
|
24
27
|
geo_activity_playground/core/heart_rate.py,sha256=-S3WAhS7AOywrw_Lk5jfuo_fu6zvZQ1VtjwEKSycWpU,1542
|
25
28
|
geo_activity_playground/core/meta_search.py,sha256=nyvCuR7v0pd6KjA8W5Kr71bBafRdE_ol7uSFRJs4eAM,6662
|
26
29
|
geo_activity_playground/core/missing_values.py,sha256=HjonaLV0PFMICnuMrbdUNnK9uy_8PBh_RxI5GuEMQK0,250
|
27
30
|
geo_activity_playground/core/parametric_plot.py,sha256=8CKB8dey7EmZtQnl6IOgBhpxkw0UCpQPWeiBw5PqW8k,5737
|
28
|
-
geo_activity_playground/core/paths.py,sha256=
|
31
|
+
geo_activity_playground/core/paths.py,sha256=qQ4ujaIHmsxTGEWzf-76XS8FclEI2RC5COTUeuLEbDI,2938
|
29
32
|
geo_activity_playground/core/privacy_zones.py,sha256=4TumHsVUN1uW6RG3ArqTXDykPVipF98DCxVBe7YNdO8,512
|
30
33
|
geo_activity_playground/core/raster_map.py,sha256=Cq8dNLdxVQg3Agzn2bmXVu0-8kZf56QrSe-LKNn3jaU,7994
|
31
34
|
geo_activity_playground/core/similarity.py,sha256=L2de3DPRdDeDY5AxZwLDcH7FjHWRWklr41VNU06q9kQ,3117
|
@@ -34,49 +37,53 @@ geo_activity_playground/core/tasks.py,sha256=-_9cxekoHSWzCW4XblNeqrwi2tTqr5AE7_-
|
|
34
37
|
geo_activity_playground/core/test_datamodel.py,sha256=-VrGHgx5Z3MSQPqHGmmm7atRJYbg5y_ukvRHKxk22PI,569
|
35
38
|
geo_activity_playground/core/test_meta_search.py,sha256=zhuD343Xce-4Fkznw81DHQ7pK5eyX5UbcyCHuYRKsr8,3091
|
36
39
|
geo_activity_playground/core/test_missing_values.py,sha256=7yvg6dUu7p8PR_rxUxgFaJCrGzfYUcF8Zf6y7bCEYKw,356
|
40
|
+
geo_activity_playground/core/test_pandas_timezone.py,sha256=-MDiLoLG5tDMqkI0iKno24kFn9X3tslh9ZpoDYLWNJU,771
|
37
41
|
geo_activity_playground/core/test_summary_stats.py,sha256=qH_45mPRFD2H-Rr0Ku-RYc67vhC7qKxbPr7J2F36uV8,3081
|
38
42
|
geo_activity_playground/core/test_tiles.py,sha256=zce1FxNfsSpOQt66jMehdQRVoNdl-oiFydx6iVBHZXM,764
|
39
|
-
geo_activity_playground/core/
|
40
|
-
geo_activity_playground/core/
|
41
|
-
geo_activity_playground/core/
|
43
|
+
geo_activity_playground/core/test_time_zone_from_location.py,sha256=PKxDysm8D0FJjyuc4Kzrv65UxzP-ogUtFHQZ7mGKZQw,229
|
44
|
+
geo_activity_playground/core/test_time_zone_import.py,sha256=1CAJyGTHYPoxabBNVRfLhaRNbvvWcAYjJyDR-qvbRjg,3349
|
45
|
+
geo_activity_playground/core/test_timezone_sqlalchemy.py,sha256=OXjdowGXM-DsM4-Mpab8c3j3AtdW_yXp2NgI-B_cbvA,1172
|
46
|
+
geo_activity_playground/core/tiles.py,sha256=LBn2V6WAvMxZeXSIQ8ruZL71iyvOXoFZMz7PZgNUf7M,2189
|
47
|
+
geo_activity_playground/core/time_conversion.py,sha256=F-vQ-MdbTOqPTAELplDjT5m7kdaf1RsqBXELfsR5eOU,1329
|
42
48
|
geo_activity_playground/explorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
43
49
|
geo_activity_playground/explorer/grid_file.py,sha256=YNL_c4O1-kxaajATJwj4ZLywCL5Hpj9qy2h-F7rk8Yg,3260
|
44
|
-
geo_activity_playground/explorer/tile_visits.py,sha256=
|
50
|
+
geo_activity_playground/explorer/tile_visits.py,sha256=WK_H5fdy3S69BT4zZGP0R92qq5MlNRJMp25BrMj6O2Q,13884
|
45
51
|
geo_activity_playground/explorer/video.py,sha256=7j6Qv3HG6On7Tn7xh7Olwrx_fbQnfzS7CeRg3TEApHg,4397
|
46
52
|
geo_activity_playground/heatmap_video.py,sha256=I8i1uVvbbPUXVtvLAROaLy58nQoUPnuMCZkERWNkQjg,3318
|
47
53
|
geo_activity_playground/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
geo_activity_playground/importers/activity_parsers.py,sha256=
|
54
|
+
geo_activity_playground/importers/activity_parsers.py,sha256=HVkW4Ql5vVRPlrhHgJEWeCEc1yTEWQTgJ6rkKOPWAfQ,10955
|
49
55
|
geo_activity_playground/importers/csv_parser.py,sha256=O1pP5GLhWhnWcy2Lsrr9g17Zspuibpt-GtZ3ZS5eZF4,2143
|
50
|
-
geo_activity_playground/importers/directory.py,sha256=
|
51
|
-
geo_activity_playground/importers/strava_api.py,sha256=
|
52
|
-
geo_activity_playground/importers/strava_checkout.py,sha256=
|
56
|
+
geo_activity_playground/importers/directory.py,sha256=kkutzFliffBjxj1GJrqhMp2cLeiAK6ZGE9Gi6Ptl-NY,3255
|
57
|
+
geo_activity_playground/importers/strava_api.py,sha256=LG8M8NRSv3kK3npf9gSY20YcqzJ0xiQoVEv0oeDXbNY,8309
|
58
|
+
geo_activity_playground/importers/strava_checkout.py,sha256=eDzjK0r3rMICSMBtfSlSwwkRxRthWjRUA5zAnblhmNQ,8910
|
53
59
|
geo_activity_playground/importers/test_csv_parser.py,sha256=nOTVTdlzIY0TDcbWp7xNyNaIO6Mkeu55hVziVl22QE4,1092
|
54
60
|
geo_activity_playground/importers/test_directory.py,sha256=_fn_-y98ZyElbG0BRxAmGFdtGobUShPU86SdEOpuv-A,691
|
55
61
|
geo_activity_playground/importers/test_strava_api.py,sha256=7b8bl5Rh2BctCmvTPEhCadxtUOq3mfzuadD6F5XxRio,398
|
56
62
|
geo_activity_playground/webui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
|
-
geo_activity_playground/webui/app.py,sha256=
|
63
|
+
geo_activity_playground/webui/app.py,sha256=gvvzPpYTlC5KhMOdpvDtiH2jPyvsLMM9Wf4yWkCoyzc,10020
|
58
64
|
geo_activity_playground/webui/authenticator.py,sha256=dhREYOu_TCD_nzFNuSlHIbf5K6TmwKdXtr1wxD8fBcc,1491
|
59
65
|
geo_activity_playground/webui/blueprints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
60
|
-
geo_activity_playground/webui/blueprints/activity_blueprint.py,sha256=
|
66
|
+
geo_activity_playground/webui/blueprints/activity_blueprint.py,sha256=kfI7GrQUm36GuSNWv8vYQEmT7bshDFrLkWchqesa_9k,26793
|
61
67
|
geo_activity_playground/webui/blueprints/auth_blueprint.py,sha256=iCm3hZphQKR9qFgytOrfnSmr-Og1gHuQ1Djiv2o_bkE,1031
|
62
68
|
geo_activity_playground/webui/blueprints/bubble_chart_blueprint.py,sha256=8R1rUVoyofGhUgesPunys1HoLPYinvhA46BBnMvEn9Q,2880
|
63
69
|
geo_activity_playground/webui/blueprints/calendar_blueprint.py,sha256=SmOu5AfNNoWcJJNduEfPtaPRvr4EZLYAeIDLUK9P1LY,2939
|
64
70
|
geo_activity_playground/webui/blueprints/eddington_blueprints.py,sha256=Ya5GJxfVESwmRlgMTYe9g75g8JHHTAAvYFmSD-3Uz4Q,8987
|
65
|
-
geo_activity_playground/webui/blueprints/entry_views.py,sha256=
|
71
|
+
geo_activity_playground/webui/blueprints/entry_views.py,sha256=SDCzpUSb1FAb84tM0SnmrZQvtaTlO-Rqdj94hyIMDSc,2936
|
66
72
|
geo_activity_playground/webui/blueprints/equipment_blueprint.py,sha256=8L_7NZGErvu4jyigi2gg7HN_gegZRdsSFahUH7Dz6Lw,5727
|
67
|
-
geo_activity_playground/webui/blueprints/explorer_blueprint.py,sha256=
|
73
|
+
geo_activity_playground/webui/blueprints/explorer_blueprint.py,sha256=wlInaRbh1Wp-Va9mqcaHsVelBUQsqHusoTvkiynoU2E,22985
|
68
74
|
geo_activity_playground/webui/blueprints/export_blueprint.py,sha256=C9yFH5gEJs2YtWE-EhcGDEyGwwaLgC1umybgIRi6duE,1036
|
69
75
|
geo_activity_playground/webui/blueprints/hall_of_fame_blueprint.py,sha256=zNYKw7ps9Yx9995Zsj4psAlOLnt4tFi2Hwp74-kjmzw,2806
|
70
|
-
geo_activity_playground/webui/blueprints/heatmap_blueprint.py,sha256=
|
71
|
-
geo_activity_playground/webui/blueprints/photo_blueprint.py,sha256=
|
76
|
+
geo_activity_playground/webui/blueprints/heatmap_blueprint.py,sha256=qPwvcZLZgAH1g8FQAzjIc5LxKp2bkc7YbZwkjxVJVWc,8730
|
77
|
+
geo_activity_playground/webui/blueprints/photo_blueprint.py,sha256=ZBh7Gt5vEzeW8JDK3t-3RcLTT40mbOqRkttkicgcIRM,7885
|
72
78
|
geo_activity_playground/webui/blueprints/plot_builder_blueprint.py,sha256=nGtYblRTJ0rasJvl_L35cs1Iry4LONPy_9TY4ytXB-Q,3838
|
73
79
|
geo_activity_playground/webui/blueprints/search_blueprint.py,sha256=Sv_KL1Cdai26y51qVfI-5jZLhtElREsEar1dbR_VAC4,2275
|
74
|
-
geo_activity_playground/webui/blueprints/settings_blueprint.py,sha256=
|
80
|
+
geo_activity_playground/webui/blueprints/settings_blueprint.py,sha256=cwes3QmRrC_HMP1g-Yc-x2BJycF4jF3StJl75v9acWo,20377
|
75
81
|
geo_activity_playground/webui/blueprints/square_planner_blueprint.py,sha256=xVaxJxmt8Dysl3UL9f2y__LVLtTH2Np1Ust4OSXKRAk,4746
|
76
|
-
geo_activity_playground/webui/blueprints/summary_blueprint.py,sha256=
|
82
|
+
geo_activity_playground/webui/blueprints/summary_blueprint.py,sha256=ZF9Mocewddpn09pElSqrVS6jkqajhEJMn-7KbIvZodY,6751
|
77
83
|
geo_activity_playground/webui/blueprints/tile_blueprint.py,sha256=YzZf9OrNdjhc1_j4MtO1DMcw1uCv29ueNsYd-mWqgbg,837
|
78
|
-
geo_activity_playground/webui/blueprints/
|
79
|
-
geo_activity_playground/webui/
|
84
|
+
geo_activity_playground/webui/blueprints/time_zone_fixer_blueprint.py,sha256=PEHsk3kRHx2EvQ-6VPD4xeOmXGjh64GMAagFkQ0wbeg,2301
|
85
|
+
geo_activity_playground/webui/blueprints/upload_blueprint.py,sha256=K7bWCN9kotklbkrjPR-IV08p9O2aekzG_vuksduSJB4,4609
|
86
|
+
geo_activity_playground/webui/columns.py,sha256=FP0YfX-WFQk1JEXhrywv3NUEVq-x7Hv0or35X3Ltf9c,1525
|
80
87
|
geo_activity_playground/webui/flasher.py,sha256=Covc1D9cO_jjokRWnvyiXCc2tfp3aZ8XkNqFdA1AXtk,500
|
81
88
|
geo_activity_playground/webui/plot_util.py,sha256=5Uesjj-xcMskQX2z9viDZYHSxLGrH2a5dHA1ogsJW9U,261
|
82
89
|
geo_activity_playground/webui/search_util.py,sha256=gH2cOM1FTAozZUlSQ4C1dR1xlV-8e82pD1PPi_pPBNY,2647
|
@@ -119,7 +126,7 @@ geo_activity_playground/webui/templates/activity/day.html.j2,sha256=CHEvxlZralCm
|
|
119
126
|
geo_activity_playground/webui/templates/activity/edit.html.j2,sha256=r979JPqaZi_2ymTykxpkjdpw0D2tsB9VJaf7OaGPaME,1961
|
120
127
|
geo_activity_playground/webui/templates/activity/lines.html.j2,sha256=_ZDg1ruW-9UMJfOudy1-uY_-IcSSaagq7tPCih5Bb8g,1079
|
121
128
|
geo_activity_playground/webui/templates/activity/name.html.j2,sha256=RYbNGzPexa4gRUWRjw-C9nWvp5lI7agAZZCS3Du7nAs,2661
|
122
|
-
geo_activity_playground/webui/templates/activity/show.html.j2,sha256=
|
129
|
+
geo_activity_playground/webui/templates/activity/show.html.j2,sha256=e-jMjZ4fBwK4-u0qZmbiN76ZqrptD4xrGYhxwaUQsEE,10913
|
123
130
|
geo_activity_playground/webui/templates/activity/trim.html.j2,sha256=3oAXQab6QqWjGBC9KCvWNOVn8uRmxoDLj3hx_O63TXc,1836
|
124
131
|
geo_activity_playground/webui/templates/auth/index.html.j2,sha256=wzA0uxpiT1ktDadgnjvFXc9iUGMFm9GhjDkavl3S1h4,646
|
125
132
|
geo_activity_playground/webui/templates/bubble_chart/index.html.j2,sha256=yd7lWjtxxVmJZqCiXb0Y1gMEOQ7LQYJXEdpE7JB1OZY,1616
|
@@ -128,15 +135,15 @@ geo_activity_playground/webui/templates/calendar/month.html.j2,sha256=IEhGqknL69
|
|
128
135
|
geo_activity_playground/webui/templates/eddington/distance.html.j2,sha256=9cLlIrImgMYYE9AKjhqHMpjpTem8sMEnVHt78krWf7w,3508
|
129
136
|
geo_activity_playground/webui/templates/eddington/elevation_gain.html.j2,sha256=h2mI1Uc1-P7rN_SeCVP_uadpQqX09ZpBG3Z6N8QWNLw,4723
|
130
137
|
geo_activity_playground/webui/templates/elevation_eddington/index.html.j2,sha256=WjquRFWaMzIZrvByhRIuhJbSCUW2HTfMck6THQHZI-I,4743
|
131
|
-
geo_activity_playground/webui/templates/equipment/index.html.j2,sha256=
|
138
|
+
geo_activity_playground/webui/templates/equipment/index.html.j2,sha256=6pzSCJACMXA1fKgsO_KrCTvpumAKlelzj5f9dReey14,1742
|
132
139
|
geo_activity_playground/webui/templates/explorer/server-side.html.j2,sha256=ynejXeUjb-ZwkvPtbD20R8R1KLUIFsyM5VJgwW7vzM8,3133
|
133
140
|
geo_activity_playground/webui/templates/export/index.html.j2,sha256=vxqpAm9KnT405Qz7q0_td-HZ4mCjcPR4Lp6EnIEWisg,1652
|
134
|
-
geo_activity_playground/webui/templates/hall_of_fame/index.html.j2,sha256=
|
141
|
+
geo_activity_playground/webui/templates/hall_of_fame/index.html.j2,sha256=P15fVPjXf0Wf6K_hd_lCMuw6-Q8_qfNqsBOWNpMfoXw,1804
|
135
142
|
geo_activity_playground/webui/templates/heatmap/index.html.j2,sha256=uM-l4gmDKw6307ZH_zb8zroMTKBuOkrR0Bu4fTEJE0s,1231
|
136
|
-
geo_activity_playground/webui/templates/home.html.j2,sha256=
|
137
|
-
geo_activity_playground/webui/templates/page.html.j2,sha256=
|
143
|
+
geo_activity_playground/webui/templates/home.html.j2,sha256=L6U44p05IagWERPxJ99cUMZzZCyhmA5IV7PL-QaO_mg,2258
|
144
|
+
geo_activity_playground/webui/templates/page.html.j2,sha256=X3dXpmcV4486St3BLHIBbhZYcb6X_dYBOBSZi_M3Aio,12188
|
138
145
|
geo_activity_playground/webui/templates/photo/map.html.j2,sha256=MWhqt5Q8ExiRhgxndcEnwngOj1qw0E0u4hKuiuY24Gg,1437
|
139
|
-
geo_activity_playground/webui/templates/photo/new.html.j2,sha256=
|
146
|
+
geo_activity_playground/webui/templates/photo/new.html.j2,sha256=0BO4ZJgJQM1Hlp9SHylEOfthpQlywDc-xFs8K_Spptc,392
|
140
147
|
geo_activity_playground/webui/templates/plot-macros.html.j2,sha256=lzsu8c8fcsVjgpdcmpwCa1e6EPALZtCS9RbvQ-DAtAs,2861
|
141
148
|
geo_activity_playground/webui/templates/plot_builder/edit.html.j2,sha256=S_ReKqpSmtf4wPvkRjdNz8WXUBfSIXQ3aJnLMIkLJaY,2519
|
142
149
|
geo_activity_playground/webui/templates/plot_builder/import-spec.html.j2,sha256=jCumhh-xdxKhVEZtkWHFMWPMiE5wdBZVpQVcrbnXr2c,668
|
@@ -146,7 +153,7 @@ geo_activity_playground/webui/templates/search_form.html.j2,sha256=BBxT2aAUlOZ41
|
|
146
153
|
geo_activity_playground/webui/templates/settings/admin-password.html.j2,sha256=VYwddpObD1RpeTH5Dm4y7VtmT7kwURDCIjxyzJeq08c,495
|
147
154
|
geo_activity_playground/webui/templates/settings/color-schemes.html.j2,sha256=iR91Wxd2_TMuIo9dBDZBrWSUGHNwTwzC6O8oNH-XBt4,1653
|
148
155
|
geo_activity_playground/webui/templates/settings/heart-rate.html.j2,sha256=UPT3MegRgSeff36lhCo0l3ZwhqNSIg5gM6h2s32GkCY,4255
|
149
|
-
geo_activity_playground/webui/templates/settings/index.html.j2,sha256=
|
156
|
+
geo_activity_playground/webui/templates/settings/index.html.j2,sha256=mapSC1TTS_cFg7K0eNuTbENTMg2EFb1atPdIj14xU_c,5468
|
150
157
|
geo_activity_playground/webui/templates/settings/manage-equipments.html.j2,sha256=vPGGlwyG_xMZc4a6JdajwWMJBfN1lBNBtDSt6QPJBiY,1585
|
151
158
|
geo_activity_playground/webui/templates/settings/manage-kinds.html.j2,sha256=382VW-cEe0iPJ8TNL2jrcRtVYb_RFdzDyeC1ncpWZ9M,1616
|
152
159
|
geo_activity_playground/webui/templates/settings/metadata-extraction.html.j2,sha256=0g9RlHFKipN45RaH_FANWnY1lfXUkKjtc_9B-vJ19LQ,2298
|
@@ -157,13 +164,15 @@ geo_activity_playground/webui/templates/settings/strava.html.j2,sha256=GCE5gskQ6
|
|
157
164
|
geo_activity_playground/webui/templates/settings/tags-edit.html.j2,sha256=Lna2QBacuMwaFODGCVulOpHSHHjqCdhNJg2c6i-ogY0,586
|
158
165
|
geo_activity_playground/webui/templates/settings/tags-list.html.j2,sha256=6giFWtVCTLXLC_Ojh56XhB_1Rouit9YzIs_YHIiayLg,369
|
159
166
|
geo_activity_playground/webui/templates/settings/tags-new.html.j2,sha256=xi6KbwydDVrUJM4_ty4KbMa74k3QaoyZhZAn2paERnM,358
|
167
|
+
geo_activity_playground/webui/templates/settings/tile-source.html.j2,sha256=C9kRBBuorjZ8Ctx8_0Hft7EHLBQHbypFFLq4eQX6GVI,1228
|
160
168
|
geo_activity_playground/webui/templates/square_planner/index.html.j2,sha256=-OnY2nQCgZCslOzf28ogZwFykwF8tZm7PgFwOE3eBDk,8176
|
161
169
|
geo_activity_playground/webui/templates/summary/index.html.j2,sha256=VuSed6GU-FzjPC1aCYuEuK5B8Rw2D8NcseNLTFIGxkA,1441
|
162
170
|
geo_activity_playground/webui/templates/summary/vega-chart.html.j2,sha256=mw8HtigeSnShTFZNG56UGUqHLJe70kvFR3o0TT71dBI,94
|
171
|
+
geo_activity_playground/webui/templates/time_zone_fixer/index.html.j2,sha256=s9r6BJMXmd7kLSyjkvH4xLi6e01S5bpGRcMgMMJyCAE,1760
|
163
172
|
geo_activity_playground/webui/templates/upload/index.html.j2,sha256=I1Ix8tDS3YBdi-HdaNfjkzYXVVCjfUTe5PFTnap1ydc,775
|
164
173
|
geo_activity_playground/webui/templates/upload/reload.html.j2,sha256=YZWX5eDeNyqKJdQAywDBcU8DZBm22rRBbZqFjrFrCvQ,556
|
165
|
-
geo_activity_playground-1.
|
166
|
-
geo_activity_playground-1.
|
167
|
-
geo_activity_playground-1.
|
168
|
-
geo_activity_playground-1.
|
169
|
-
geo_activity_playground-1.
|
174
|
+
geo_activity_playground-1.3.0.dist-info/LICENSE,sha256=4RpAwKO8bPkfXH2lnpeUW0eLkNWglyG4lbrLDU_MOwY,1070
|
175
|
+
geo_activity_playground-1.3.0.dist-info/METADATA,sha256=CWWk8dBKRARHREz5Ux11u0U_qtrwqIRHJC-toP7hsLM,2045
|
176
|
+
geo_activity_playground-1.3.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
177
|
+
geo_activity_playground-1.3.0.dist-info/entry_points.txt,sha256=pbNlLI6IIZIp7nPYCfAtiSiz2oxJSCl7DODD6SPkLKk,81
|
178
|
+
geo_activity_playground-1.3.0.dist-info/RECORD,,
|
@@ -1,37 +0,0 @@
|
|
1
|
-
import datetime
|
2
|
-
|
3
|
-
import numpy as np
|
4
|
-
import pandas as pd
|
5
|
-
|
6
|
-
from .time_conversion import convert_to_datetime_ns
|
7
|
-
|
8
|
-
target = np.datetime64(datetime.datetime(2000, 1, 2, 3, 4, 5))
|
9
|
-
|
10
|
-
|
11
|
-
def test_convert_to_datetime_ns() -> None:
|
12
|
-
dt_local = datetime.datetime(2000, 1, 2, 3, 4, 5)
|
13
|
-
dt_tz = datetime.datetime(
|
14
|
-
2000, 1, 2, 3, 4, 5, tzinfo=datetime.timezone(datetime.timedelta(hours=3))
|
15
|
-
)
|
16
|
-
dt_utc = datetime.datetime(2000, 1, 2, 3, 4, 5, tzinfo=datetime.timezone.utc)
|
17
|
-
|
18
|
-
inputs = [
|
19
|
-
dt_local,
|
20
|
-
dt_tz,
|
21
|
-
dt_utc,
|
22
|
-
pd.Timestamp(dt_local),
|
23
|
-
pd.Timestamp(dt_tz),
|
24
|
-
pd.Timestamp(dt_utc),
|
25
|
-
]
|
26
|
-
|
27
|
-
for d in inputs:
|
28
|
-
actual = convert_to_datetime_ns(d)
|
29
|
-
# assert pd.api.types.is_dtype_equal(actual.dtype, "datetime64[ns]")
|
30
|
-
assert actual == target
|
31
|
-
|
32
|
-
actual = convert_to_datetime_ns(pd.Series([d]))
|
33
|
-
assert actual.iloc[0] == target
|
34
|
-
|
35
|
-
|
36
|
-
def test_NaT() -> None:
|
37
|
-
assert pd.isna(convert_to_datetime_ns(pd.NaT))
|
File without changes
|
File without changes
|
{geo_activity_playground-1.1.0.dist-info → geo_activity_playground-1.3.0.dist-info}/entry_points.txt
RENAMED
File without changes
|