Merge branch 'release-v0.7.14'
							
								
								
									
										10
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						@@ -1,5 +1,15 @@
 | 
			
		||||
# Change log
 | 
			
		||||
 | 
			
		||||
## Version 0.7.14 (2023/03/08)
 | 
			
		||||
 | 
			
		||||
### Bugs Fixed
 | 
			
		||||
 | 
			
		||||
* [#314](https://github.com/SamR1/FitTrackee/issues/314) - GPX file is not deleted when the process fails 
 | 
			
		||||
### Translations
 | 
			
		||||
 | 
			
		||||
* [PR#315](https://github.com/SamR1/FitTrackee/pull/315) - Translations update from Hosted Weblate (Dutch, thanks to @bjornclauw)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Version 0.7.13 (2023/03/05)
 | 
			
		||||
 | 
			
		||||
This version allows to display the instance privacy policy. A user must agree to the privacy policy to register.  
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
# Sphinx build info version 1
 | 
			
		||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
 | 
			
		||||
config: 27f4394ace216ce3fd5ef2a67c1bf1ef
 | 
			
		||||
config: 94de61784a672553b4d9efa055ecf7c6
 | 
			
		||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 568 KiB After Width: | Height: | Size: 568 KiB  | 
| 
		 Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 387 KiB  | 
| 
		 Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB  | 
| 
		 Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 76 KiB  | 
| 
		 Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB  | 
| 
		 Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 123 KiB  | 
| 
		 Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB  | 
| 
		 Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB  | 
@@ -1,5 +1,15 @@
 | 
			
		||||
# Change log
 | 
			
		||||
 | 
			
		||||
## Version 0.7.14 (2023/03/08)
 | 
			
		||||
 | 
			
		||||
### Bugs Fixed
 | 
			
		||||
 | 
			
		||||
* [#314](https://github.com/SamR1/FitTrackee/issues/314) - GPX file is not deleted when the process fails 
 | 
			
		||||
### Translations
 | 
			
		||||
 | 
			
		||||
* [PR#315](https://github.com/SamR1/FitTrackee/pull/315) - Translations update from Hosted Weblate (Dutch, thanks to @bjornclauw)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Version 0.7.13 (2023/03/05)
 | 
			
		||||
 | 
			
		||||
This version allows to display the instance privacy policy. A user must agree to the privacy policy to register.  
 | 
			
		||||
 
 | 
			
		||||
@@ -290,7 +290,7 @@ Map tile server
 | 
			
		||||
.. versionadded:: 0.4.0
 | 
			
		||||
 | 
			
		||||
Default tile server is now **OpenStreetMap**'s standard tile layer (if environment variables are not initialized).
 | 
			
		||||
The tile server can be changed by updating ``TILE_SERVER_URL`` and ``MAP_ATTRIBUTION`` variables (`list of tile servers <https://wiki.openstreetmap.org/wiki/Tile_servers>`__).
 | 
			
		||||
The tile server can be changed by updating ``TILE_SERVER_URL`` and ``MAP_ATTRIBUTION`` variables (`list of tile servers <https://wiki.openstreetmap.org/wiki/Raster_tile_providers>`__).
 | 
			
		||||
 | 
			
		||||
To keep using **ThunderForest Outdoors**, the configuration is:
 | 
			
		||||
 | 
			
		||||
@@ -507,13 +507,13 @@ Production environment
 | 
			
		||||
.. warning::
 | 
			
		||||
    | Note that FitTrackee is under heavy development, some features may be unstable.
 | 
			
		||||
 | 
			
		||||
-  Download the last release (for now, it is the release v0.7.13):
 | 
			
		||||
-  Download the last release (for now, it is the release v0.7.14):
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.13.tar.gz
 | 
			
		||||
   $ mv FitTrackee-0.7.13 FitTrackee
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.14.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.14.tar.gz
 | 
			
		||||
   $ mv FitTrackee-0.7.14 FitTrackee
 | 
			
		||||
   $ cd FitTrackee
 | 
			
		||||
 | 
			
		||||
-  Create **.env** from example and update it
 | 
			
		||||
@@ -633,13 +633,13 @@ Prod environment
 | 
			
		||||
 | 
			
		||||
- Change to the directory where FitTrackee directory is located
 | 
			
		||||
 | 
			
		||||
- Download the last release (for now, it is the release v0.7.13) and overwrite existing files:
 | 
			
		||||
- Download the last release (for now, it is the release v0.7.14) and overwrite existing files:
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.13.tar.gz
 | 
			
		||||
   $ cp -R FitTrackee-0.7.13/* FitTrackee/
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.14.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.14.tar.gz
 | 
			
		||||
   $ cp -R FitTrackee-0.7.14/* FitTrackee/
 | 
			
		||||
   $ cd FitTrackee
 | 
			
		||||
 | 
			
		||||
- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
 | 
			
		||||
 
 | 
			
		||||
@@ -25,4 +25,12 @@ Administrator
 | 
			
		||||
`Map images are not displayed but map is shown in Workout detail`
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
- Check the path in `environment variables <../installation.html#envvar-UPLOAD_FOLDER>`__. ``UPLOAD_FOLDER`` must be set with an absolute path.
 | 
			
		||||
- Check the path in `environment variables <../installation.html#envvar-UPLOAD_FOLDER>`__. ``UPLOAD_FOLDER`` must be set with an absolute path.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
`Failed to upload or download files`
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
- Check ``client_max_body_size`` in **nginx** config. Increase the value to handle larger files (see **nginx** `documentation <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_).
 | 
			
		||||
 | 
			
		||||
- Increase **gunicorn** `timeout <https://docs.gunicorn.org/en/stable/settings.html#timeout>`__ value if the following error is displayed in gunicorn log: ``[CRITICAL] WORKER TIMEOUT``.
 | 
			
		||||
							
								
								
									
										2
									
								
								docs/_static/documentation_options.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,6 +1,6 @@
 | 
			
		||||
var DOCUMENTATION_OPTIONS = {
 | 
			
		||||
    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
 | 
			
		||||
    VERSION: '0.7.13',
 | 
			
		||||
    VERSION: '0.7.14',
 | 
			
		||||
    LANGUAGE: 'en',
 | 
			
		||||
    COLLAPSE_INDEX: false,
 | 
			
		||||
    BUILDER: 'html',
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Authentication and account — FitTrackee 0.7.13
 | 
			
		||||
    <title>Authentication and account — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -1445,7 +1445,7 @@ for other reasons.</p></li>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Configuration — FitTrackee 0.7.13
 | 
			
		||||
    <title>Configuration — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -158,7 +158,7 @@
 | 
			
		||||
<span class="w">    </span><span class="nt">"map_attribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"privacy_policy"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"privacy_policy_date"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.13"</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.14"</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"weather_provider"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
 | 
			
		||||
<span class="w">  </span><span class="p">},</span>
 | 
			
		||||
<span class="w">  </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span>
 | 
			
		||||
@@ -203,7 +203,7 @@
 | 
			
		||||
<span class="w">    </span><span class="nt">"map_attribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"privacy_policy"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"privacy_policy_date"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.13"</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.14"</span><span class="p">,</span>
 | 
			
		||||
<span class="w">    </span><span class="nt">"weather_provider"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
 | 
			
		||||
<span class="w">  </span><span class="p">},</span>
 | 
			
		||||
<span class="w">  </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span>
 | 
			
		||||
@@ -289,7 +289,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>API documentation — FitTrackee 0.7.13
 | 
			
		||||
    <title>API documentation — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -160,7 +160,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>OAuth2 — FitTrackee 0.7.13
 | 
			
		||||
    <title>OAuth2 — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -694,7 +694,7 @@ are supported by FitTrackee)</p></li>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Records — FitTrackee 0.7.13
 | 
			
		||||
    <title>Records — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -262,7 +262,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Sports — FitTrackee 0.7.13
 | 
			
		||||
    <title>Sports — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -492,7 +492,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Statistics — FitTrackee 0.7.13
 | 
			
		||||
    <title>Statistics — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -419,7 +419,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Users — FitTrackee 0.7.13
 | 
			
		||||
    <title>Users — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -663,7 +663,7 @@ one admin.</p>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Workouts — FitTrackee 0.7.13
 | 
			
		||||
    <title>Workouts — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -1187,7 +1187,7 @@ must be provided with ascent)</p></li>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Third-party applications — FitTrackee 0.7.13
 | 
			
		||||
    <title>Third-party applications — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -259,7 +259,7 @@ It is recommended to use PKCE to provide a better security.</p>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Command line interface — FitTrackee 0.7.13
 | 
			
		||||
    <title>Command line interface — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -337,7 +337,7 @@ Can be used if redis is not set (no dramatiq workers running).</p>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Features — FitTrackee 0.7.13
 | 
			
		||||
    <title>Features — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -431,7 +431,7 @@ A user with an inactive account cannot log in. (<em>new in 0.6.0</em>).</p></li>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title>Index — FitTrackee 0.7.13
 | 
			
		||||
    <title>Index — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -40,7 +40,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -190,7 +190,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title>HTTP Routing Table — FitTrackee 0.7.13
 | 
			
		||||
    <title>HTTP Routing Table — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -47,7 +47,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -430,7 +430,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>FitTrackee — FitTrackee 0.7.13
 | 
			
		||||
    <title>FitTrackee — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -42,7 +42,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="#">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -180,7 +180,7 @@ Map</a>.</div>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Installation — FitTrackee 0.7.13
 | 
			
		||||
    <title>Installation — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -594,7 +594,7 @@ see <a class="reference external" href="https://docs.sqlalchemy.org/en/13/core/p
 | 
			
		||||
<p><span class="versionmodified added">New in version 0.4.0.</span></p>
 | 
			
		||||
</div>
 | 
			
		||||
<p>Default tile server is now <strong>OpenStreetMap</strong>’s standard tile layer (if environment variables are not initialized).
 | 
			
		||||
The tile server can be changed by updating <code class="docutils literal notranslate"><span class="pre">TILE_SERVER_URL</span></code> and <code class="docutils literal notranslate"><span class="pre">MAP_ATTRIBUTION</span></code> variables (<a class="reference external" href="https://wiki.openstreetmap.org/wiki/Tile_servers">list of tile servers</a>).</p>
 | 
			
		||||
The tile server can be changed by updating <code class="docutils literal notranslate"><span class="pre">TILE_SERVER_URL</span></code> and <code class="docutils literal notranslate"><span class="pre">MAP_ATTRIBUTION</span></code> variables (<a class="reference external" href="https://wiki.openstreetmap.org/wiki/Raster_tile_providers">list of tile servers</a>).</p>
 | 
			
		||||
<p>To keep using <strong>ThunderForest Outdoors</strong>, the configuration is:</p>
 | 
			
		||||
<ul class="simple">
 | 
			
		||||
<li><p><code class="docutils literal notranslate"><span class="pre">TILE_SERVER_URL=https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=XXXX</span></code> where <strong>XXXX</strong> is <strong>ThunderForest</strong> API key</p></li>
 | 
			
		||||
@@ -826,11 +826,11 @@ $<span class="w"> </span>make<span class="w"> </span>install-db
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
<ul class="simple">
 | 
			
		||||
<li><p>Download the last release (for now, it is the release v0.7.13):</p></li>
 | 
			
		||||
<li><p>Download the last release (for now, it is the release v0.7.14):</p></li>
 | 
			
		||||
</ul>
 | 
			
		||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
 | 
			
		||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.13.tar.gz
 | 
			
		||||
$<span class="w"> </span>mv<span class="w"> </span>FitTrackee-0.7.13<span class="w"> </span>FitTrackee
 | 
			
		||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.14.tar.gz
 | 
			
		||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.14.tar.gz
 | 
			
		||||
$<span class="w"> </span>mv<span class="w"> </span>FitTrackee-0.7.14<span class="w"> </span>FitTrackee
 | 
			
		||||
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>FitTrackee
 | 
			
		||||
</pre></div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -950,11 +950,11 @@ $<span class="w"> </span><span class="nb">source</span><span class="w"> </span>.
 | 
			
		||||
<ul class="simple">
 | 
			
		||||
<li><p>Stop the application</p></li>
 | 
			
		||||
<li><p>Change to the directory where FitTrackee directory is located</p></li>
 | 
			
		||||
<li><p>Download the last release (for now, it is the release v0.7.13) and overwrite existing files:</p></li>
 | 
			
		||||
<li><p>Download the last release (for now, it is the release v0.7.14) and overwrite existing files:</p></li>
 | 
			
		||||
</ul>
 | 
			
		||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
 | 
			
		||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.13.tar.gz
 | 
			
		||||
$<span class="w"> </span>cp<span class="w"> </span>-R<span class="w"> </span>FitTrackee-0.7.13/*<span class="w"> </span>FitTrackee/
 | 
			
		||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.14.tar.gz
 | 
			
		||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.14.tar.gz
 | 
			
		||||
$<span class="w"> </span>cp<span class="w"> </span>-R<span class="w"> </span>FitTrackee-0.7.14/*<span class="w"> </span>FitTrackee/
 | 
			
		||||
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>FitTrackee
 | 
			
		||||
</pre></div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -1217,7 +1217,7 @@ $<span class="w"> </span>make<span class="w"> </span>docker-test-python<span cla
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								docs/objects.inv
									
									
									
									
									
								
							
							
						
						@@ -4,7 +4,7 @@
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title>Search — FitTrackee 0.7.13
 | 
			
		||||
    <title>Search — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -47,7 +47,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -154,7 +154,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Administrator — FitTrackee 0.7.13
 | 
			
		||||
    <title>Administrator — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -85,6 +85,7 @@
 | 
			
		||||
<li><a class="reference internal" href="#">Administrator</a><ul>
 | 
			
		||||
<li><a class="reference internal" href="#fittrackee-fails-to-start"><cite>FitTrackee fails to start</cite></a></li>
 | 
			
		||||
<li><a class="reference internal" href="#map-images-are-not-displayed-but-map-is-shown-in-workout-detail"><cite>Map images are not displayed but map is shown in Workout detail</cite></a></li>
 | 
			
		||||
<li><a class="reference internal" href="#failed-to-upload-or-download-files"><cite>Failed to upload or download files</cite></a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</li>
 | 
			
		||||
</ul>
 | 
			
		||||
@@ -159,6 +160,13 @@
 | 
			
		||||
<li><p>Check the path in <a class="reference external" href="../installation.html#envvar-UPLOAD_FOLDER">environment variables</a>. <code class="docutils literal notranslate"><span class="pre">UPLOAD_FOLDER</span></code> must be set with an absolute path.</p></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</section>
 | 
			
		||||
<section id="failed-to-upload-or-download-files">
 | 
			
		||||
<h2><cite>Failed to upload or download files</cite><a class="headerlink" href="#failed-to-upload-or-download-files" title="Permalink to this heading">¶</a></h2>
 | 
			
		||||
<ul class="simple">
 | 
			
		||||
<li><p>Check <code class="docutils literal notranslate"><span class="pre">client_max_body_size</span></code> in <strong>nginx</strong> config. Increase the value to handle larger files (see <strong>nginx</strong> <a class="reference external" href="https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size">documentation</a>).</p></li>
 | 
			
		||||
<li><p>Increase <strong>gunicorn</strong> <a class="reference external" href="https://docs.gunicorn.org/en/stable/settings.html#timeout">timeout</a> value if the following error is displayed in gunicorn log: <code class="docutils literal notranslate"><span class="pre">[CRITICAL]</span> <span class="pre">WORKER</span> <span class="pre">TIMEOUT</span></code>.</p></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</section>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -174,7 +182,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>Troubleshooting — FitTrackee 0.7.13
 | 
			
		||||
    <title>Troubleshooting — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -137,6 +137,7 @@
 | 
			
		||||
<li class="toctree-l1"><a class="reference internal" href="administrator.html">Administrator</a><ul>
 | 
			
		||||
<li class="toctree-l2"><a class="reference internal" href="administrator.html#fittrackee-fails-to-start"><cite>FitTrackee fails to start</cite></a></li>
 | 
			
		||||
<li class="toctree-l2"><a class="reference internal" href="administrator.html#map-images-are-not-displayed-but-map-is-shown-in-workout-detail"><cite>Map images are not displayed but map is shown in Workout detail</cite></a></li>
 | 
			
		||||
<li class="toctree-l2"><a class="reference internal" href="administrator.html#failed-to-upload-or-download-files"><cite>Failed to upload or download files</cite></a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
</li>
 | 
			
		||||
<li class="toctree-l1"><a class="reference internal" href="user.html">User</a></li>
 | 
			
		||||
@@ -157,7 +158,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 | 
			
		||||
 | 
			
		||||
    <title>User — FitTrackee 0.7.13
 | 
			
		||||
    <title>User — FitTrackee 0.7.14
 | 
			
		||||
 documentation</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
        </button>
 | 
			
		||||
        <a class="navbar-brand" href="../index.html">
 | 
			
		||||
          FitTrackee</a>
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.13
 | 
			
		||||
        <span class="navbar-text navbar-version pull-left"><b>0.7.14
 | 
			
		||||
</b></span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +148,7 @@
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
        © Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
 | 
			
		||||
      Last updated on Mar 05, 2023.<br/>
 | 
			
		||||
      Last updated on Mar 08, 2023.<br/>
 | 
			
		||||
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 568 KiB After Width: | Height: | Size: 568 KiB  | 
| 
		 Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 387 KiB  | 
| 
		 Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB  | 
| 
		 Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 76 KiB  | 
| 
		 Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB  | 
| 
		 Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 123 KiB  | 
| 
		 Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB  | 
| 
		 Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB  | 
@@ -290,7 +290,7 @@ Map tile server
 | 
			
		||||
.. versionadded:: 0.4.0
 | 
			
		||||
 | 
			
		||||
Default tile server is now **OpenStreetMap**'s standard tile layer (if environment variables are not initialized).
 | 
			
		||||
The tile server can be changed by updating ``TILE_SERVER_URL`` and ``MAP_ATTRIBUTION`` variables (`list of tile servers <https://wiki.openstreetmap.org/wiki/Tile_servers>`__).
 | 
			
		||||
The tile server can be changed by updating ``TILE_SERVER_URL`` and ``MAP_ATTRIBUTION`` variables (`list of tile servers <https://wiki.openstreetmap.org/wiki/Raster_tile_providers>`__).
 | 
			
		||||
 | 
			
		||||
To keep using **ThunderForest Outdoors**, the configuration is:
 | 
			
		||||
 | 
			
		||||
@@ -507,13 +507,13 @@ Production environment
 | 
			
		||||
.. warning::
 | 
			
		||||
    | Note that FitTrackee is under heavy development, some features may be unstable.
 | 
			
		||||
 | 
			
		||||
-  Download the last release (for now, it is the release v0.7.13):
 | 
			
		||||
-  Download the last release (for now, it is the release v0.7.14):
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.13.tar.gz
 | 
			
		||||
   $ mv FitTrackee-0.7.13 FitTrackee
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.14.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.14.tar.gz
 | 
			
		||||
   $ mv FitTrackee-0.7.14 FitTrackee
 | 
			
		||||
   $ cd FitTrackee
 | 
			
		||||
 | 
			
		||||
-  Create **.env** from example and update it
 | 
			
		||||
@@ -633,13 +633,13 @@ Prod environment
 | 
			
		||||
 | 
			
		||||
- Change to the directory where FitTrackee directory is located
 | 
			
		||||
 | 
			
		||||
- Download the last release (for now, it is the release v0.7.13) and overwrite existing files:
 | 
			
		||||
- Download the last release (for now, it is the release v0.7.14) and overwrite existing files:
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.13.tar.gz
 | 
			
		||||
   $ cp -R FitTrackee-0.7.13/* FitTrackee/
 | 
			
		||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.14.tar.gz
 | 
			
		||||
   $ tar -xzf v0.7.14.tar.gz
 | 
			
		||||
   $ cp -R FitTrackee-0.7.14/* FitTrackee/
 | 
			
		||||
   $ cd FitTrackee
 | 
			
		||||
 | 
			
		||||
- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
 | 
			
		||||
 
 | 
			
		||||
@@ -25,4 +25,12 @@ Administrator
 | 
			
		||||
`Map images are not displayed but map is shown in Workout detail`
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
- Check the path in `environment variables <../installation.html#envvar-UPLOAD_FOLDER>`__. ``UPLOAD_FOLDER`` must be set with an absolute path.
 | 
			
		||||
- Check the path in `environment variables <../installation.html#envvar-UPLOAD_FOLDER>`__. ``UPLOAD_FOLDER`` must be set with an absolute path.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
`Failed to upload or download files`
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
- Check ``client_max_body_size`` in **nginx** config. Increase the value to handle larger files (see **nginx** `documentation <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_).
 | 
			
		||||
 | 
			
		||||
- Increase **gunicorn** `timeout <https://docs.gunicorn.org/en/stable/settings.html#timeout>`__ value if the following error is displayed in gunicorn log: ``[CRITICAL] WORKER TIMEOUT``.
 | 
			
		||||
@@ -25,7 +25,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix
 | 
			
		||||
from fittrackee.emails.email import EmailService
 | 
			
		||||
from fittrackee.request import CustomRequest
 | 
			
		||||
 | 
			
		||||
VERSION = __version__ = '0.7.13'
 | 
			
		||||
VERSION = __version__ = '0.7.14'
 | 
			
		||||
REDIS_URL = os.getenv('REDIS_URL', 'redis://')
 | 
			
		||||
API_RATE_LIMITS = os.environ.get('API_RATE_LIMITS', '300 per 5 minutes').split(
 | 
			
		||||
    ','
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ def get_application_config() -> Union[Dict, HttpResponse]:
 | 
			
		||||
          "map_attribution": "© <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors",
 | 
			
		||||
          "privacy_policy": null,
 | 
			
		||||
          "privacy_policy_date": null,
 | 
			
		||||
          "version": "0.7.13",
 | 
			
		||||
          "version": "0.7.14",
 | 
			
		||||
          "weather_provider": null
 | 
			
		||||
        },
 | 
			
		||||
        "status": "success"
 | 
			
		||||
@@ -108,7 +108,7 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
 | 
			
		||||
          "map_attribution": "© <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors",
 | 
			
		||||
          "privacy_policy": null,
 | 
			
		||||
          "privacy_policy_date": null,
 | 
			
		||||
          "version": "0.7.13",
 | 
			
		||||
          "version": "0.7.14",
 | 
			
		||||
          "weather_provider": null
 | 
			
		||||
        },
 | 
			
		||||
        "status": "success"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								fittrackee/dist/index.html
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1 +1 @@
 | 
			
		||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="/favicon.ico"><![endif]--><link rel="stylesheet" href="/static/css/fork-awesome.min.css"/><link rel="stylesheet" href="/static/css/leaflet.css"/><title>FitTrackee</title><script defer="defer" src="/static/js/chunk-vendors.504d6d07.js"></script><script defer="defer" src="/static/js/app.4a1985d7.js"></script><link href="/static/css/app.e504ceb2.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="/img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/img/icons/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="no"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="fittrackee_client"><link rel="apple-touch-icon" href="/img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="/img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="/img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><noscript><strong>We're sorry but FitTrackee doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
 | 
			
		||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="/favicon.ico"><![endif]--><link rel="stylesheet" href="/static/css/fork-awesome.min.css"/><link rel="stylesheet" href="/static/css/leaflet.css"/><title>FitTrackee</title><script defer="defer" src="/static/js/chunk-vendors.504d6d07.js"></script><script defer="defer" src="/static/js/app.f25e8d14.js"></script><link href="/static/css/app.e504ceb2.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="/img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/img/icons/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="no"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="fittrackee_client"><link rel="apple-touch-icon" href="/img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="/img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="/img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><noscript><strong>We're sorry but FitTrackee doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
 | 
			
		||||
							
								
								
									
										2
									
								
								fittrackee/dist/service-worker.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										2
									
								
								fittrackee/dist/service-worker.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										2
									
								
								fittrackee/dist/static/js/app.4a1985d7.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										2
									
								
								fittrackee/dist/static/js/app.f25e8d14.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/app.f25e8d14.js.map
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -1,2 +1,2 @@
 | 
			
		||||
"use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[193],{7885:function(e,s,t){t.r(s),t.d(s,{default:function(){return A}});var a=t(6252),r=t(2262),l=t(3577),o=(t(7658),t(9150)),n=t(436);const c={class:"chart-menu"},i={class:"chart-arrow"},u={class:"time-frames custom-checkboxes-group"},d={class:"time-frames-checkboxes custom-checkboxes"},p=["id","name","checked","onInput"],m={class:"chart-arrow"};var v=(0,a.aZ)({__name:"StatsMenu",emits:["arrowClick","timeFrameUpdate"],setup(e,{emit:s}){const t=(0,r.iH)("month"),o=["week","month","year"];function n(e){t.value=e,s("timeFrameUpdate",e)}return(e,r)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",i,[(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true",onClick:r[0]||(r[0]=e=>s("arrowClick",!0))})]),(0,a._)("div",u,[(0,a._)("div",d,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(o,(s=>(0,a._)("div",{class:"time-frame custom-checkbox",key:s},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:s,name:s,checked:t.value===s,onInput:e=>n(s)},null,40,p),(0,a._)("span",null,(0,l.zw)(e.$t(`statistics.TIME_FRAMES.${s}`)),1)])]))),64))])]),(0,a._)("div",m,[(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true",onClick:r[1]||(r[1]=e=>s("arrowClick",!1))})])]))}}),k=t(3744);const _=(0,k.Z)(v,[["__scopeId","data-v-22d55de2"]]);var S=_,w=t(631);const f={class:"sports-menu"},h=["id","name","checked","onInput"],U={class:"sport-label"};var b=(0,a.aZ)({__name:"StatsSportsMenu",props:{userSports:null,selectedSportIds:{default:()=>[]}},emits:["selectedSportIdsUpdate"],setup(e,{emit:s}){const t=e,{t:n}=(0,o.QT)(),c=(0,a.f3)("sportColors"),{selectedSportIds:i}=(0,r.BK)(t),u=(0,a.Fl)((()=>(0,w.xH)(t.userSports,n)));function d(e){s("selectedSportIdsUpdate",e)}return(e,s)=>{const t=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",f,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,r.SU)(u),(e=>((0,a.wg)(),(0,a.iD)("label",{type:"checkbox",key:e.id,style:(0,l.j5)({color:e.color?e.color:(0,r.SU)(c)[e.label]})},[(0,a._)("input",{type:"checkbox",id:e.id,name:e.label,checked:(0,r.SU)(i).includes(e.id),onInput:s=>d(e.id)},null,40,h),(0,a.Wm)(t,{"sport-label":e.label,color:e.color},null,8,["sport-label","color"]),(0,a._)("span",U,(0,l.zw)(e.translatedLabel),1)],4)))),128))])}}});const I=b;var g=I,T=t(9318);const y={key:0,id:"user-statistics"};var C=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const s=e,{t:t}=(0,o.QT)(),{sports:l,user:c}=(0,r.BK)(s),i=(0,r.iH)("month"),u=(0,r.iH)(v(i.value)),d=(0,a.Fl)((()=>(0,w.xH)(s.sports,t))),p=(0,r.iH)(_(s.sports));function m(e){i.value=e,u.value=v(i.value)}function v(e){return(0,T.aZ)(new Date,e,s.user.weekm)}function k(e){u.value=(0,T.FN)(u.value,e,s.user.weekm)}function _(e){return e.map((e=>e.id))}function f(e){p.value.includes(e)?p.value=p.value.filter((s=>s!==e)):p.value.push(e)}return(0,a.YP)((()=>s.sports),(e=>{p.value=_(e)})),(e,s)=>(0,r.SU)(d)?((0,a.wg)(),(0,a.iD)("div",y,[(0,a.Wm)(S,{onTimeFrameUpdate:m,onArrowClick:k}),(0,a.Wm)(n.Z,{sports:(0,r.SU)(l),user:(0,r.SU)(c),chartParams:u.value,"displayed-sport-ids":p.value,fullStats:!0},null,8,["sports","user","chartParams","displayed-sport-ids"]),(0,a.Wm)(g,{"selected-sport-ids":p.value,"user-sports":(0,r.SU)(l),onSelectedSportIdsUpdate:f},null,8,["selected-sport-ids","user-sports"])])):(0,a.kq)("",!0)}});const F=(0,k.Z)(C,[["__scopeId","data-v-30799d13"]]);var Z=F,x=t(5630),D=t(5801),H=t(9917);const E={id:"statistics",class:"view"},R={key:0,class:"container"};var W=(0,a.aZ)({__name:"StatisticsView",setup(e){const s=(0,H.o)(),t=(0,a.Fl)((()=>s.getters[D.YN.GETTERS.AUTH_USER_PROFILE])),o=(0,a.Fl)((()=>s.getters[D.O8.GETTERS.SPORTS].filter((e=>t.value.sports_list.includes(e.id)))));return(e,s)=>{const n=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",E,[(0,r.SU)(t).username?((0,a.wg)(),(0,a.iD)("div",R,[(0,a.Wm)(n,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,l.zw)(e.$t("statistics.STATISTICS")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Z,{class:(0,l.C_)({"stats-disabled":0===(0,r.SU)(t).nb_workouts}),user:(0,r.SU)(t),sports:(0,r.SU)(o)},null,8,["class","user","sports"])])),_:1}),0===(0,r.SU)(t).nb_workouts?((0,a.wg)(),(0,a.j4)(x.Z,{key:0})):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])}}});const P=(0,k.Z)(W,[["__scopeId","data-v-2e341d4e"]]);var A=P}}]);
 | 
			
		||||
//# sourceMappingURL=statistics.d3c3c7bd.js.map
 | 
			
		||||
//# sourceMappingURL=statistics.5228e1ba.js.map
 | 
			
		||||
@@ -217,6 +217,24 @@ def assert_workout_data_wo_gpx(data: Dict) -> None:
 | 
			
		||||
    assert records[3]['value'] == 10.0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def assert_files_are_deleted(
 | 
			
		||||
    app: Flask, user: User, expected_count: Optional[int] = 0
 | 
			
		||||
) -> None:
 | 
			
		||||
    upload_directory = os.path.join(
 | 
			
		||||
        app.config["UPLOAD_FOLDER"], f"workouts/{user.id}"
 | 
			
		||||
    )
 | 
			
		||||
    assert (
 | 
			
		||||
        len(
 | 
			
		||||
            [
 | 
			
		||||
                name
 | 
			
		||||
                for name in os.listdir(upload_directory)
 | 
			
		||||
                if os.path.isfile(os.path.join(upload_directory, name))
 | 
			
		||||
            ]
 | 
			
		||||
        )
 | 
			
		||||
        == expected_count
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestPostWorkoutWithGpx(ApiTestCaseMixin, CallArgsMixin):
 | 
			
		||||
    def test_it_returns_error_if_user_is_not_authenticated(
 | 
			
		||||
        self, app: Flask, sport_1_cycling: Sport, gpx_file: str
 | 
			
		||||
@@ -800,6 +818,96 @@ class TestPostWorkoutWithGpx(ApiTestCaseMixin, CallArgsMixin):
 | 
			
		||||
        )
 | 
			
		||||
        assert 'data' not in data
 | 
			
		||||
 | 
			
		||||
    def test_it_cleans_uploaded_file_on_gpx_processing_error(
 | 
			
		||||
        self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client, auth_token = self.get_test_client_and_auth_token(
 | 
			
		||||
            app, user_1.email
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        with patch(
 | 
			
		||||
            'fittrackee.workouts.utils.workouts.generate_map',
 | 
			
		||||
            side_effect=Exception(),
 | 
			
		||||
        ):
 | 
			
		||||
            client.post(
 | 
			
		||||
                '/api/workouts',
 | 
			
		||||
                data=dict(
 | 
			
		||||
                    file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
 | 
			
		||||
                    data='{"sport_id": 1}',
 | 
			
		||||
                ),
 | 
			
		||||
                headers=dict(
 | 
			
		||||
                    content_type='multipart/form-data',
 | 
			
		||||
                    Authorization=f'Bearer {auth_token}',
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        assert_files_are_deleted(app, user_1)
 | 
			
		||||
 | 
			
		||||
    def test_it_deletes_only_errored_file(
 | 
			
		||||
        self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client, auth_token = self.get_test_client_and_auth_token(
 | 
			
		||||
            app, user_1.email
 | 
			
		||||
        )
 | 
			
		||||
        client.post(
 | 
			
		||||
            '/api/workouts',
 | 
			
		||||
            data=dict(
 | 
			
		||||
                file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
 | 
			
		||||
                data='{"sport_id": 1}',
 | 
			
		||||
            ),
 | 
			
		||||
            headers=dict(
 | 
			
		||||
                content_type='multipart/form-data',
 | 
			
		||||
                Authorization=f'Bearer {auth_token}',
 | 
			
		||||
            ),
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        with patch(
 | 
			
		||||
            'fittrackee.workouts.utils.workouts.generate_map',
 | 
			
		||||
            side_effect=Exception(),
 | 
			
		||||
        ):
 | 
			
		||||
            client.post(
 | 
			
		||||
                '/api/workouts',
 | 
			
		||||
                data=dict(
 | 
			
		||||
                    file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
 | 
			
		||||
                    data='{"sport_id": 2}',
 | 
			
		||||
                ),
 | 
			
		||||
                headers=dict(
 | 
			
		||||
                    content_type='multipart/form-data',
 | 
			
		||||
                    Authorization=f'Bearer {auth_token}',
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        assert_files_are_deleted(app, user_1, expected_count=2)
 | 
			
		||||
        upload_directory = os.path.join(app.config["UPLOAD_FOLDER"])
 | 
			
		||||
        workout = Workout.query.first()
 | 
			
		||||
        os.path.exists(os.path.join(upload_directory, workout.gpx))
 | 
			
		||||
        os.path.exists(os.path.join(upload_directory, workout.map))
 | 
			
		||||
 | 
			
		||||
    def test_it_cleans_uploaded_file_and_static_map_on_segments_creation_error(
 | 
			
		||||
        self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client, auth_token = self.get_test_client_and_auth_token(
 | 
			
		||||
            app, user_1.email
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        with patch(
 | 
			
		||||
            'fittrackee.workouts.utils.workouts.create_segment',
 | 
			
		||||
            side_effect=ValueError(),
 | 
			
		||||
        ):
 | 
			
		||||
            client.post(
 | 
			
		||||
                '/api/workouts',
 | 
			
		||||
                data=dict(
 | 
			
		||||
                    file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
 | 
			
		||||
                    data='{"sport_id": 1}',
 | 
			
		||||
                ),
 | 
			
		||||
                headers=dict(
 | 
			
		||||
                    content_type='multipart/form-data',
 | 
			
		||||
                    Authorization=f'Bearer {auth_token}',
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        assert_files_are_deleted(app, user_1)
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'client_scope, can_access',
 | 
			
		||||
        [
 | 
			
		||||
@@ -1399,6 +1507,31 @@ class TestPostWorkoutWithZipArchive(ApiTestCaseMixin):
 | 
			
		||||
            )
 | 
			
		||||
            assert 'data' not in data
 | 
			
		||||
 | 
			
		||||
    def test_it_cleans_uploaded_file_on_error(
 | 
			
		||||
        self, app: Flask, user_1: User, sport_1_cycling: Sport
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client, auth_token = self.get_test_client_and_auth_token(
 | 
			
		||||
            app, user_1.email
 | 
			
		||||
        )
 | 
			
		||||
        file_path = os.path.join(app.root_path, 'tests/files/gpx_test.zip')
 | 
			
		||||
        # 'gpx_test.zip' contains 3 gpx files (same data) and 1 non-gpx file
 | 
			
		||||
        with open(file_path, 'rb') as zip_file, patch(
 | 
			
		||||
            'fittrackee.workouts.utils.workouts.generate_map',
 | 
			
		||||
            side_effect=Exception(),
 | 
			
		||||
        ):
 | 
			
		||||
            client.post(
 | 
			
		||||
                '/api/workouts',
 | 
			
		||||
                data=dict(
 | 
			
		||||
                    file=(zip_file, 'gpx_test.zip'), data='{"sport_id": 1}'
 | 
			
		||||
                ),
 | 
			
		||||
                headers=dict(
 | 
			
		||||
                    content_type='multipart/form-data',
 | 
			
		||||
                    Authorization=f'Bearer {auth_token}',
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        assert_files_are_deleted(app, user_1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestPostAndGetWorkoutWithGpx(ApiTestCaseMixin):
 | 
			
		||||
    def workout_assertion(
 | 
			
		||||
 
 | 
			
		||||
@@ -40,5 +40,5 @@ class WeatherService:
 | 
			
		||||
        try:
 | 
			
		||||
            return self.weather_api.get_weather(point)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            appLog.error(e)
 | 
			
		||||
            appLog.error(f'error when getting weather data: {e}')
 | 
			
		||||
            return None
 | 
			
		||||
 
 | 
			
		||||
@@ -8,11 +8,10 @@ from uuid import UUID
 | 
			
		||||
import gpxpy.gpx
 | 
			
		||||
import pytz
 | 
			
		||||
from flask import current_app
 | 
			
		||||
from sqlalchemy import exc
 | 
			
		||||
from werkzeug.datastructures import FileStorage
 | 
			
		||||
from werkzeug.utils import secure_filename
 | 
			
		||||
 | 
			
		||||
from fittrackee import db
 | 
			
		||||
from fittrackee import appLog, db
 | 
			
		||||
from fittrackee.files import get_absolute_file_path
 | 
			
		||||
from fittrackee.users.models import User, UserSportPreference
 | 
			
		||||
 | 
			
		||||
@@ -279,12 +278,26 @@ def get_new_file_path(
 | 
			
		||||
    return file_path
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def delete_files(
 | 
			
		||||
    absolute_gpx_filepath: Optional[str], absolute_map_filepath: Optional[str]
 | 
			
		||||
) -> None:
 | 
			
		||||
    try:
 | 
			
		||||
        if absolute_gpx_filepath and os.path.exists(absolute_gpx_filepath):
 | 
			
		||||
            os.remove(absolute_gpx_filepath)
 | 
			
		||||
        if absolute_map_filepath and os.path.exists(absolute_map_filepath):
 | 
			
		||||
            os.remove(absolute_map_filepath)
 | 
			
		||||
    except Exception:
 | 
			
		||||
        appLog.error('Unable to delete files after processing error.')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def process_one_gpx_file(
 | 
			
		||||
    params: Dict, filename: str, stopped_speed_threshold: float
 | 
			
		||||
) -> Workout:
 | 
			
		||||
    """
 | 
			
		||||
    Get all data from a gpx file to create a workout with map image
 | 
			
		||||
    """
 | 
			
		||||
    absolute_gpx_filepath = None
 | 
			
		||||
    absolute_map_filepath = None
 | 
			
		||||
    try:
 | 
			
		||||
        gpx_data, map_data, weather_data = get_gpx_info(
 | 
			
		||||
            params['file_path'], stopped_speed_threshold
 | 
			
		||||
@@ -314,8 +327,10 @@ def process_one_gpx_file(
 | 
			
		||||
        absolute_map_filepath = get_absolute_file_path(map_filepath)
 | 
			
		||||
        generate_map(absolute_map_filepath, map_data)
 | 
			
		||||
    except (gpxpy.gpx.GPXXMLSyntaxException, TypeError) as e:
 | 
			
		||||
        delete_files(absolute_gpx_filepath, absolute_map_filepath)
 | 
			
		||||
        raise WorkoutException('error', 'error during gpx file parsing', e)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        delete_files(absolute_gpx_filepath, absolute_map_filepath)
 | 
			
		||||
        raise WorkoutException('error', 'error during gpx processing', e)
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
@@ -336,8 +351,9 @@ def process_one_gpx_file(
 | 
			
		||||
            db.session.add(new_segment)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        return new_workout
 | 
			
		||||
    except (exc.IntegrityError, ValueError) as e:
 | 
			
		||||
        raise WorkoutException('fail', 'Error during workout save.', e)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        delete_files(absolute_gpx_filepath, absolute_map_filepath)
 | 
			
		||||
        raise WorkoutException('error', 'error when saving workout', e)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def is_gpx_file(filename: str) -> bool:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "fittrackee_client",
 | 
			
		||||
  "version": "0.7.13",
 | 
			
		||||
  "version": "0.7.14",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "serve": "vue-cli-service serve",
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
        "error during gpx file parsing": "Error during gpx file parsing.",
 | 
			
		||||
        "error during gpx processing": "Error during gpx processing.",
 | 
			
		||||
        "error on getting configuration": "Error on getting configuration.",
 | 
			
		||||
        "error when saving workout": "Error when saving workout.",
 | 
			
		||||
        "error when updating configuration": "Error when updating configuration",
 | 
			
		||||
        "error, please try again or contact the administrator": "Error, please try again or contact the administrator.",
 | 
			
		||||
        "error, registration is disabled": "Error, registration is disabled.",
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
        "error during gpx file parsing": "Erreur lors de l'analyse du fichier.",
 | 
			
		||||
        "error during gpx processing": "Erreur lors du traitement du fichier gpx.",
 | 
			
		||||
        "error on getting configuration": "Erreur lors de la récupération de la configuration.",
 | 
			
		||||
        "error when saving workout": "Erreur lors de l'enregistrement de la séance.",
 | 
			
		||||
        "error when updating configuration": "Erreur lors de la mise à jour de la configuration",
 | 
			
		||||
        "error, please try again or contact the administrator": "Erreur, veuillez réessayer ou contacter l'administrateur.",
 | 
			
		||||
        "error, registration is disabled": "Erreur, les inscriptions sont désactivées.",
 | 
			
		||||
 
 | 
			
		||||
@@ -118,7 +118,7 @@
 | 
			
		||||
    "REGISTER_DISABLED": "Sorry, registreren is uitgeschakeld.",
 | 
			
		||||
    "RESENT_ACCOUNT_CONFIRMATION": "Opnieuw zenden van account bevestigingsmail",
 | 
			
		||||
    "RESET_PASSWORD": "Reset uw wachtwoord",
 | 
			
		||||
    "REVIEW": "beoordeling",
 | 
			
		||||
    "REVIEW": "beoordeel",
 | 
			
		||||
    "SHOW_PASSWORD": "toon wachtwoord",
 | 
			
		||||
    "THIS_USER_ACCOUNT_IS_INACTIVE": "Deze account is niet actief.",
 | 
			
		||||
    "USERNAME": "Gebruikersnaam",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
[tool.poetry]
 | 
			
		||||
name = "fittrackee"
 | 
			
		||||
version = "0.7.13"
 | 
			
		||||
version = "0.7.14"
 | 
			
		||||
description = "Self-hosted outdoor workout/activity tracker"
 | 
			
		||||
authors = ["SamR1"]
 | 
			
		||||
license = "AGPL-3.0"
 | 
			
		||||
 
 | 
			
		||||