Store your GPX tracks of your running (or other sports activity) in django.
Project description
Django-ForRunners
Store your GPX tracks of your running (or other sports activity) in django.
(The name Django-ForRunners has the origin from the great Android tracking app ForRunners by Benoît Hervier: http://rvier.fr/#forrunners )
django-for-runners_ynh allows you to install Django-ForRunners quickly and simply on a YunoHost server. If you don't have YunoHost, please consult the guide to learn how to install it.
Features:
- GPX track management:
- Upload GPX tracks
- Import GPX tracks from commandline
- Track analysis:
- basics: Track length / Duration / Pace / Hart rate Up-/Downhill
- Display route on OpenStreetMap map
- Graphs with elevation / heart rate / cadence (if available in GPX data)
- Data that is automatically extracted from the web:
- Start/finish Address from OpenStreetMap
- Start/finish weather information from metaweather.com
- Store additional data:
- Ideal track distance (for easier grouping/filtering tracks)
- sports competitions Management:
- Create a List of Sport Events
- Add participation to a event
- link GPX track with a event participation
- Store you event participation:
- official track length
- measured finisher time
- Number of participants who have finished in your discipline
- Add links to webpages relatet to this event
- Record costs (entry fee, T-shirt etc.)
- Create a List of Sport Events
- common
- Multiple user support (However: no rights management and currently only suitable for a handful of users)
Developer information
prepare
To start hacking: Just clone the project and start ./manage.py
to bootstrap a virtual environment:
# Install base requirements for bootstraping:
~$ sudo apt install python3-pip python3-venv
# Get the sources:
~$ git clone https://github.com/jedie/django-for-runners.git
~$ cd django-for-runners/
# Just call manage.py:
~/django-for-runners$ ./manage.py --help
...
[manage_django_project]
code_style
coverage
install
project_info
publish
run_dev_server
safety
tox
update_req
...
This bootstrap is realized with: https://github.com/jedie/manage_django_project
Start Django's dev server:
~/django-for-runners$ ./manage.py run_dev_server
The web page is available in Port 8000, e.g.: http://127.0.0.1:8000/
Run tests, e.g.:
~/django-for-runners$ ./manage.py test
# or with coverage
~/django-for-runners$ ./manage.py coverage
# or via tox:
~/django-for-runners$ ./manage.py tox
import GPX files
e.g.:
~/django-for-runners$ ./manage.py import_gpx --username <django_username> ~/backups/gpx_files
Note: It is no problem to start import_gpx with the same GPX files: Duplicate entries are avoided. The start/finish (time/latitude/longitude) are compared.
backup
Create a backup into .../backups/<timestamp>/
e.g.:
~/django-for-runners$ ./manage.py backup
The backup does:
- backup the database
- export all GPX tracks
- generate .csv files:
- a complete file with all running tracks
- one file for every user
Screenshots
(All screenshots are here: github.com/jedie/jedie.github.io/tree/master/screenshots/django-for-runners)
for-runers v0.6.0 2018-07-31 GPX Track.png
for-runners v0.4.0 2018-6-26 GPX info.png
for-runners v0.6.0 2018-07-19 Event Costs.png
print a small overview
some notes
GPX storage
Currently we store the unchanged GPX data in a TextField.
static files
We collect some JavaScript files, for easier startup. These files are:
Project Homepage | License | storage directory |
---|---|---|
leafletjs.com | Leaflet licensed under BSD | for_runners/static/leaflet/ |
dygraphs.com | dygraphs licensed under MIT | for_runners/static/dygraphs/ |
chartjs.org | Chart.js licensed under MIT | for_runners/static/chartjs/ |
Precision of coordinates
GPX files from Garmin (can) contain:
- latitude with 29 decimal places
- longitude with 28 decimal places
- elevation with 19 decimal places
The route on OpenStreetMap does not look more detailed, with more than 5 decimal places.
See also: https://wiki.openstreetmap.org/wiki/Precision_of_coordinates
Django compatibility
django-for-runners | django version | python |
---|---|---|
>=v0.16.0 | 4.1 | 3.9, 3.10, 3.11 |
>=v0.15.0 | 3.2, 4.0, 4.1 | 3.7, 3.8, 3.9, 3.10 |
>=v0.14.0 | 3.2 | 3.7, 3.8, 3.9, 3.10 |
>=v0.12.0 | 2.2 | 3.7, 3.8, 3.9, 3.10 |
>=v0.11.0 | 2.2 | 3.7, 3.8, 3.9 |
>=v0.7.1 | 2.1 | 3.5, 3.6, 3.7 |
v0.5.x | 2.0 | 3.5, 3.6, 3.7 |
(See also combinations in tox settings in pyproject.toml and github actions)
Backwards-incompatible changes
v0.16.0
We switched from Poetry to pip-tools and https://github.com/jedie/manage_django_project
Just remove the old Poetry venv and bootstrap by call the ./manage.py
, see above.
We also remove different Django Versions from test matrix and just use the current newest version. Because this is a project and not really a reuse-able-app ;)
history
- dev
- TBC
- 03.04.2023 - v0.17.3:
- Bugfix system check on fresh start with Postgres before migration is running
- 02.04.2023 - v0.17.2:
- Bugfix packaging and missing files
- 02.04.2023 - v0.17.0:
- Bugfix edit a
GpxModel
instance in admin with a large GPX track by remove the raw gpx XML as text field from admin change page - Add a admin action to download selected GPX tracks as ZIP archive
- Bugfix edit a
- 13.03.2023 - v0.16.0:
- NEW: Attach files and images to "Event Participations"
- Switch from Poetry to pip-tools
- Add a new way to bootstrap the developer environment
- 29.09.2022 - v0.15.0:
- Update requirements
- Activate auto login for local dev. server, for easier developing.
- Test against different Django Versions: 3.2, 4.0 and 4.1
- Replace creole README with Markdown
- 16.08.2022 - v0.14.0:
- Update to Django v3.2
- Bugfix backup manage command
- 15.04.2022 - v0.13.0:
- Switch git branch from "master" to "main"
- Remove "/development/" and mode "/src/"
- update requirements
- 22.11.2021 - v0.12.1:
- update requirements
- 17.01.2021 - v0.12.0:
- refactor project structure and add a deployment via docker-compose setup
- installation as YunoHost app: https://github.com/YunoHost-Apps/django-for-runners_ynh
- Add django-axes and django-processinfo
- Mock requests in tests
- 04.07.2020 - v0.11.0:
- refactor gpx import code
- update tests
- Use poetry and add Makefile
- update code style
- 09.08.2019 - v0.10.1:
- Enhance "Event Participation" admin view: Add start date and costs in table
- 26.06.2019 - v0.10.0:
- NEW: GPX Admin action to print a small overview from one or a few tracks
- Accept optional server bind address, e.g.:
for_runners run-server 127.0.0.1:8080
- 02.04.2019 - v0.9.0:
- NEW: Update complete environment installation with:
for_runners update
- Move the SQlite database to virtualenv root dir, e.g.:
~/Django-ForRunners/Django-ForRunners-database.sqlite3
- NEW: save every gpx track to disk
- NEW: Backup/export via cli:
$ for_runners backup
- NEW: export GPX Data via
django-import-export
- Create xdg-open desktop starter under linux here:
~/Django-ForRunners/Django-ForRunners
- refactor the startup process:
- auto loop the server process
- open web browser on first start
- enable autotask
- rename
for_runners_test_project
tofor_runners_project
- NEW: Update complete environment installation with:
- 03.09.2018 - v0.8.1:
- Fix "try-out" section in README, again ;(
- 03.09.2018 - v0.8.0:
- NEW: shell script for easier boot/install, see above
- 02.09.2018 - v0.7.1:
- Update to Django 2.1
- Bugfix Tests
- 02.09.2018 - v0.7.0:
- Use dygraphs in GPX Track change admin view
- Sync mouse over from Elevation/Headrate/Cadence dygraphs to leaflet open streep map
- Fix "try-out" section in README (Thanks adsworth for reporting)
- Add links from gpx tracks to other admin change view
- Bugfixes
- internals:
- refactor stuff around track duration/length
- move manipluation of list_display and list_filter contributed by adsworth
- 19.07.2018 - v0.6.0:
- NEW: event participation
- NEW: costs of event participation (e.g.: entry fee for the competition, cost of a T-Shirt etc.)
- NEW: Display statistics of events/costs per user and total
- 04.07.2018 - v0.5.0:
- remove Django-CMS
- update to Django v2.0
- NOTE: The migrations are simply replaced! So you must delete your database, e.g.:
src/django-for-runners$ rm test_project_db.sqlite3
- Add 'net duration' field, for the officially measured time and use it for calculations if available.
- Create django manage command to fill some base data:
$ ./manage.py fill_basedata
- speedup by deactivating some django debug toolbar panels
- 26.06.2018 - v0.4.0:
- combine track filters with statistic views
- NEW: GPX info (See length, point count and Average distance in meters between the points)
- NEW: Display GPX metadata
- Add 'creator' to every track and use it as changelist filter
- remove Streetmap image generated via geotiler
- Speedup by using a cache for gpxpy instances
- 23.06.2018 - v0.3.0:
- Start adding statistics (See screenshot above)
- add weather information from metaweather.com to every track
- 21.06.2018 - v0.2.0:
- Display elevations, heart_rates and cadence_values if available
- Add kilometer markers to OpenStreetMap
- 15.06.2018 - v0.1.1:
- a few bugfixes
- 15.06.2018 - v0.1.0:
- Render interactive OpenStreetMap track map with Leaflet JS
- 12.06.2018 - v0.0.4:
- Better Events model
- GPX error handling
- more tests
- Bugfix for Python 3.5 (Geotiler needs Python 3.6 or later)
- 12.06.2018 - v0.0.3:
- display min/average/max heart rate
- use autotask to generate the MAP in background
- 31.05.2018 - v0.0.2:
- generate SVG 'icon' from GPX track
- v0.0.1 - 30.05.2018
- Just create a pre-alpha release to save the PyPi package name ;)
links
| Homepage | http://github.com/jedie/django-for-runners | | PyPi | https://pypi-hypernode.com/project/django-for-runners/ |
activity exporter
It's sometimes hard to find a working project for exporting activities. So here tools that i use currently:
- Garmin-Connect-Export from rsjrny
alternatives (OpenSource only)
- https://github.com/pytrainer/pytrainer (Desktop Program)
- https://github.com/GoldenCheetah/GoldenCheetah/ (Desktop Program)
Online tools:
credits
The whole thing is based on many excellent projects. Especially the following:
- gpxpy GPX file parser
- Leaflet JS A JS library for interactive maps used to render the track on OpenStreetMap
- dygraphs open source JavaScript charting library
- Chart.js HTML5 Charts
- geopy Get geo location names of the GPX track start/end point
- matplotlib plotting 2D graphics
- autotask schedule background jobs
- svgwrite Generating SVG file
donation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-for-runners-0.17.3.tar.gz
.
File metadata
- Download URL: django-for-runners-0.17.3.tar.gz
- Upload date:
- Size: 953.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad311bb4f91d47c0e008f54f902e896d13b6b206dd86951636aecaebd5a18395 |
|
MD5 | 942d620530e301c1d3f2542a51ca5d92 |
|
BLAKE2b-256 | e009f41a44302bb5940b50c639ecec7aaf30d9bf85b63183b281bca3f46d992f |
File details
Details for the file django_for_runners-0.17.3-py3-none-any.whl
.
File metadata
- Download URL: django_for_runners-0.17.3-py3-none-any.whl
- Upload date:
- Size: 932.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ce81247149a4f7a6f08efb25a6adb90f94d9f170af98121e22b459c48671673 |
|
MD5 | a2058fc6648a6a19d3a71fd9b81b2060 |
|
BLAKE2b-256 | 8499c1094786767693517001f3ae3e970bfaefc219091b8f51e1613a533f64fc |