Skip to content

Store your GPX tracks of your running (or other sports activity) in django.

License

Notifications You must be signed in to change notification settings

sr-rolando/django-for-runners

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django-ForRunners

Logo Store your GPX tracks of your running (or other sports activity) in django.

Build Status on travis-ci.org travis-ci.org/jedie/django-for-runners
Coverage Status on codecov.io codecov.io/gh/jedie/django-for-runners
Coverage Status on coveralls.io coveralls.io/r/jedie/django-for-runners
Status on landscape.io landscape.io/github/jedie/django-for-runners/master

(The name Django-ForRunners has the origin from the great Android tracking app ForRunners by Benoît Hervier: http://rvier.fr/#forrunners )

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.)
  • common
    • Multiple user support (However: no rights management and currently only suitable for a handful of users)

try-out

dependencies are:

  • pip (Debian/Ubuntu package name: python3-pip)

Linux

  1. Download the file boot_django_for_runners.sh (right click and use "save under...")
  2. run boot_django_for_runners.sh
  3. double click on ~/Django-ForRunners/Django-ForRunners
  4. insert user name/password in terminal

All in one step, e.g.:

~$ bash <(curl -s https://raw.githubusercontent.com/jedie/django-for-runners/master/boot_django_for_runners.sh)

Just double click on ~/Django-ForRunners/Django-ForRunners in your file manager ;)

Or start by hand, e.g.:

~$ cd ~/Django-ForRunners/bin
~/Django-ForRunners/bin$ ./for_runners run-server

More details:

The shell script creates a python virtual environment and install all needed requirements into:

  • ~/Django-ForRunners

The setup routine will install two commands:

  • ~/Django-ForRunners/bin/for_runners - CLI to start the web server to use Django-ForRunners
  • ~/Django-ForRunners/bin/manage - Run django manage commands with Django-ForRunners project settings

e.g.:

~$ cd Django-ForRunners/
~/Django-ForRunners$ source bin/activate
(Django-ForRunners) ~/Django-ForRunners$ for_runners --help
...
(Django-ForRunners) ~/Django-ForRunners$ manage --help
...

Mac

Database

$ createdb -E 'UTF8' -h localhost -p 5432 -U postgres runners_dev "Django for Runners" $ psql -h localhost -U postgres postgres postgres=# CREATE USER runner WITH ENCRYPTED PASSWORD 'plaintext pw generated by KeePass'; postgres=# \connect runners_dev postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO runner; postgres=# \q

Dev tools

Setup environment variables:

source .env

Run (initial) database migration:

make migrate

Create first user:

python -m for_runners_project createsuperuser

Start development server:

make run

Alternative without using make:

  export PYTHONPATH=.
  python for_runners_project/__main__.py runserver

Windows

TODO: Create shortcut (via pywin32?)

  1. Download the file boot_django_for_runners.cmd (right click and use "save under...")
  2. run boot_django_for_runners.cmd

The batch file creates a python virtual environment and install all needed requirements into:

  • C:\Program Files\Django-ForRunners

Start the development server with the test project by double click on:

"C:\Program Files\Django-ForRunners\Scripts\for_runners.exe"

update existing installation

Just run for_runners update e.g.:

~$ cd Django-ForRunners/
~/Django-ForRunners$ source bin/activate
(Django-ForRunners) ~/Django-ForRunners$ for_runners update

import GPX files

e.g.:

~$ ~/Django-ForRunners/bin/manage 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 DjangoForRunnersEnv/backups/<timestamp>/ e.g.:

~$ cd Django-ForRunners/
~/Django-ForRunners$ source bin/activate
(Django-ForRunners) ~/Django-ForRunners$ for_runners 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

regenerate all SVG files

~$ cd Django-ForRunners/
~/Django-ForRunners$ source bin/activate
(Django-ForRunners) ~/Django-ForRunners$ for_runners recreate-svg

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-runers v0.6.0 2018-07-31 GPX Track.png

for-runners v0.4.0 2018-6-26 GPX info.png

for-runners v0.4.0 2018-6-26 GPX info.png

for-runners v0.6.0 2018-07-19 Event Costs.png

for-runners v0.6.0 2018-07-19 Event Costs.png

print a small overview

for-runners v0.10.0 2010-06-26 print small overview 1.png

for-runners v0.10.0 2010-06-26 print small overview 2.png

run tests

# activate the virtualenv:
~$ cd Django-ForRunners/
~/Django-ForRunners$ source bin/activate

# run the tests:
(Django-ForRunners) ~/Django-ForRunners$ cd src/django-for-runners/
(Django-ForRunners) ~/Django-ForRunners/src/django-for-runners$ ./setup.py test

# run text via tox:
(Django-ForRunners) ~/Django-ForRunners/src/django-for-runners$ ./setup.py tox

Note:

To run all tests, you need:

  • Chromium Browser WebDriver e.g.: apt install chromium-chromedriver
  • Firefox Browser WebDriver aka geckodriver

install geckodriver e.g.:

~$ cd /tmp
/tmp$ wget https://github.com/mozilla/geckodriver/releases/download/v0.20.1/geckodriver-v0.20.1-linux64.tar.gz -O geckodriver.tar.gz
/tmp$ sudo sh -c 'tar -x geckodriver -zf geckodriver.tar.gz -O > /usr/bin/geckodriver'
/tmp$ sudo chmod +x /usr/bin/geckodriver
/tmp$ rm geckodriver.tar.gz
/tmp$ geckodriver --version
geckodriver 0.20.1
...

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.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 .travis.yml and tox.ini)

Backwards-incompatible changes

v0.9

How to update:

~$ cd Django-ForRunners/
~/Django-ForRunners$ source bin/activate
(Django-ForRunners) ~/Django-ForRunners$ cd src/django-for-runners/
(Django-ForRunners) ~/Django-ForRunners/src/django-for-runners$ git pull origin master
(Django-ForRunners) ~/Django-ForRunners/src/django-for-runners$ for_runners update

How to migrate

  • The SQlite database was moved.

If you would like to migrate, move/rename this file

~/Django-ForRunners/src/django-for-runners/test_project_db.sqlite3

to:

~/Django-ForRunners/Django-ForRunners-database.sqlite3

  • cli arguments changed with click v7.0: "_" -> "-", e.g.: "run_server" -> "run-server"

history

  • compare v0.10.1...master dev
    • refactor gpx import code
    • tbc
  • 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 to for_runners_project
  • 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.org/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:

alternatives (OpenSource only)

Online tools:

credits

The whole thing is based on many excellent projects. Especially the following:

donation

About

Store your GPX tracks of your running (or other sports activity) in django.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 75.7%
  • Python 21.3%
  • CSS 1.7%
  • HTML 0.8%
  • Shell 0.3%
  • Batchfile 0.2%