Metadata-Version: 2.1
Name: workoutizer
Version: 0.8.1
Summary: Browser-based Sport Workout Organizer to analyze your Activities locally
Home-page: https://github.com/fgebhart/workoutizer
Author: Fabian Gebhart
License: UNKNOWN
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.2
Classifier: Framework :: Django :: 3.0
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: asgiref (==3.2.10)
Requires-Dist: bokeh (==1.4.0)
Requires-Dist: certifi (==2020.6.20)
Requires-Dist: chardet (==3.0.4)
Requires-Dist: click (==7.1.2)
Requires-Dist: coloredlogs (==14.0)
Requires-Dist: django-colorfield (==0.3.1)
Requires-Dist: django-leaflet (==0.26.0)
Requires-Dist: django (==3.0.8)
Requires-Dist: djangorestframework (==3.11.0)
Requires-Dist: fitparse (==1.1.0)
Requires-Dist: geographiclib (==1.50)
Requires-Dist: geopy (==2.0.0)
Requires-Dist: gpxpy (==1.4.2)
Requires-Dist: humanfriendly (==8.2)
Requires-Dist: idna (==2.10)
Requires-Dist: jinja2 (==2.11.2)
Requires-Dist: markupsafe (==1.1.1)
Requires-Dist: numpy (==1.19.0)
Requires-Dist: packaging (==20.4)
Requires-Dist: pandas (==1.0.5)
Requires-Dist: pillow (==7.2.0)
Requires-Dist: pyparsing (==2.4.7)
Requires-Dist: python-dateutil (==2.8.1)
Requires-Dist: pytz (==2020.1)
Requires-Dist: pyyaml (==5.3.1)
Requires-Dist: requests (==2.24.0)
Requires-Dist: six (==1.15.0)
Requires-Dist: sqlparse (==0.3.1)
Requires-Dist: tornado (==6.0.4)
Requires-Dist: urllib3 (==1.25.9)
Provides-Extra: testing
Requires-Dist: ansible (==2.9.10) ; extra == 'testing'
Requires-Dist: appdirs (==1.4.4) ; extra == 'testing'
Requires-Dist: attrs (==19.3.0) ; extra == 'testing'
Requires-Dist: backcall (==0.2.0) ; extra == 'testing'
Requires-Dist: black (==20.8b1) ; extra == 'testing'
Requires-Dist: cffi (==1.14.0) ; extra == 'testing'
Requires-Dist: cfgv (==3.2.0) ; extra == 'testing'
Requires-Dist: click (==7.1.2) ; extra == 'testing'
Requires-Dist: cryptography (==3.2) ; extra == 'testing'
Requires-Dist: decorator (==4.4.2) ; extra == 'testing'
Requires-Dist: distlib (==0.3.1) ; extra == 'testing'
Requires-Dist: filelock (==3.0.12) ; extra == 'testing'
Requires-Dist: flake8 (==3.8.4) ; extra == 'testing'
Requires-Dist: identify (==1.5.10) ; extra == 'testing'
Requires-Dist: ipython-genutils (==0.2.0) ; extra == 'testing'
Requires-Dist: ipython (==7.18.1) ; extra == 'testing'
Requires-Dist: jedi (==0.17.2) ; extra == 'testing'
Requires-Dist: jinja2 (==2.11.2) ; extra == 'testing'
Requires-Dist: lxml (==4.5.2) ; extra == 'testing'
Requires-Dist: markupsafe (==1.1.1) ; extra == 'testing'
Requires-Dist: mccabe (==0.6.1) ; extra == 'testing'
Requires-Dist: more-itertools (==8.4.0) ; extra == 'testing'
Requires-Dist: mypy-extensions (==0.4.3) ; extra == 'testing'
Requires-Dist: nodeenv (==1.5.0) ; extra == 'testing'
Requires-Dist: packaging (==20.4) ; extra == 'testing'
Requires-Dist: parso (==0.7.1) ; extra == 'testing'
Requires-Dist: pathspec (==0.8.0) ; extra == 'testing'
Requires-Dist: pexpect (==4.8.0) ; extra == 'testing'
Requires-Dist: pickleshare (==0.7.5) ; extra == 'testing'
Requires-Dist: pip-tools (==5.2.1) ; extra == 'testing'
Requires-Dist: pluggy (==0.13.1) ; extra == 'testing'
Requires-Dist: pre-commit (==2.9.3) ; extra == 'testing'
Requires-Dist: prompt-toolkit (==3.0.7) ; extra == 'testing'
Requires-Dist: ptyprocess (==0.6.0) ; extra == 'testing'
Requires-Dist: py (==1.9.0) ; extra == 'testing'
Requires-Dist: pycodestyle (==2.6.0) ; extra == 'testing'
Requires-Dist: pycparser (==2.20) ; extra == 'testing'
Requires-Dist: pyflakes (==2.2.0) ; extra == 'testing'
Requires-Dist: pygments (==2.7.1) ; extra == 'testing'
Requires-Dist: pyparsing (==2.4.7) ; extra == 'testing'
Requires-Dist: pytest-django (==3.9.0) ; extra == 'testing'
Requires-Dist: pytest (==5.4.3) ; extra == 'testing'
Requires-Dist: pyyaml (==5.3.1) ; extra == 'testing'
Requires-Dist: regex (==2020.10.15) ; extra == 'testing'
Requires-Dist: selenium (==3.141.0) ; extra == 'testing'
Requires-Dist: six (==1.15.0) ; extra == 'testing'
Requires-Dist: toml (==0.10.1) ; extra == 'testing'
Requires-Dist: traitlets (==5.0.4) ; extra == 'testing'
Requires-Dist: typed-ast (==1.4.1) ; extra == 'testing'
Requires-Dist: typing-extensions (==3.7.4.3) ; extra == 'testing'
Requires-Dist: urllib3 (==1.25.9) ; extra == 'testing'
Requires-Dist: virtualenv (==20.2.2) ; extra == 'testing'
Requires-Dist: wcwidth (==0.2.5) ; extra == 'testing'

# Workoutizer

The Workoutizer is a simple web application for organizing your workouts and sports activities. It is designed to work
locally on any UNIX-like system running Python.

Track your activities to get an overview of your overall training, similar to platforms like
[strava](https://www.strava.com/) or [garmin connect](https://connect.garmin.com/) - but without
uploading all your sensitive health data to some 3rd party cloud.

#### Features
* Automatic import of Garmin `.fit` files and `.gpx` files
* Automatic naming of activities based on daytime, sport and geo location
* Dashboard overview page of all activities
* Render your activity gps data on different OSM maps
* Show either all activities of one sport or only one activity on the map
* Plots of activity specific data like: heart rate, pace, temperature, cadence and altitude
* Integrate laps into both plots and maps
* Connected plots and map via mouse hovering
* Keyboard navigation in browser
* Add untracked activities manually via the GUI
* Export activities as `.gpx` files
* Add as many different sports as you want.
* Convenience CLI for installing, configuring, updating, ...


## Getting Started

Install workoutizer
```shell script
pip install workoutizer
```

Initialize and run workoutizer
```shell script
wkz init
wkz run
```

See the help description of the CLI with `wkz --help` and even subcommands, e.g.: `wkz manage --help`. 

Note: This should work for any Linux and Mac system. Please
[report any occurring issues](https://github.com/fgebhart/workoutizer/issues) when installing workoutizer.

Workoutizer comes bundled with some initial toy activity data, which can be deleted easily on the Settings page.

In case you want to run workoutizer on a Raspberry Pi in your local network, follow the 
[Raspberry Pi setup instructions](https://github.com/fgebhart/workoutizer/tree/master/setup).

## Gallery 

 Dashboard             |  Sport Page
:-------------------------:|:-------------------------:
![](https://i.imgur.com/FcB5JDl.png)  |  ![](https://i.imgur.com/6fwcEZX.png)

 Activity Page 1/2             |  Activity Page 2/2
:-------------------------:|:-------------------------:
![](https://i.imgur.com/iuXhiab.png)  |  ![](https://i.imgur.com/7nV4Ks2.png)

## Thanks

Thanks to the authors of projects I integrated into workoutizer:
* [leaflet-ui](https://github.com/Raruto/leaflet-ui) by [Raruto](https://github.com/Raruto)
* [django-colorfield](https://github.com/fabiocaccamo/django-colorfield) by [Fabio Caccamo](https://github.com/fabiocaccamo)
* [python-fitparse](https://github.com/dtcooper/python-fitparse) by [dtcooper](https://github.com/dtcooper)
* [leaflet-color-markers](https://github.com/pointhi/leaflet-color-markers) by [pointhi](https://github.com/pointhi)
* [Font Awesome Icons](https://fontawesome.com/)

Enjoy!

## Changelog

See the [releases section](https://github.com/fgebhart/workoutizer/releases).

For older releases have a look at the [archived project at gitlab](https://gitlab.com/fgebhart/workoutizer).

## Contributing

Contributions are welcome! Feel free to pick an [open issue](https://github.com/fgebhart/workoutizer/issues), open up 
a pull request or file a new issue.

For local development first clone the repo and install the `dev-requirements.txt` like
```shell script
pip install -r setup/requirements/dev-requirements.txt
``` 
Afterwards I recommend to run the development docker container:
```shell script
./run_docker.sh
```
This will build the image, run the container and initialize workoutizer. Once up and running, run the tests
```shell script
pytest wizer/tests/
```
Once this was successful you are good to go.


