diff --git a/requirements.txt b/requirements.txt index 5dfec22a..51503c01 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,13 +8,13 @@ atomicwrites==1.3.0 attrs==19.1.0 backcall==0.1.0 beautifulsoup4==4.7.1 -billiard==3.5.0.5 +billiard==3.6.0.0 bleach==3.1.0 bokeh==1.0.4 boto==2.49.0 braintree==3.51.0 cairocffi==1.0.2 -celery==4.2.2 +celery==4.3.0 certifi==2019.3.9 cffi==1.12.2 chardet==3.0.4 @@ -46,6 +46,7 @@ django-leaflet==0.24.0 django-mailbox==4.7.1 django-oauth-toolkit==1.2.0 django-oauth2-provider==0.2.6.1 +django-redis==4.10.0 django-rest-framework==0.1.0 django-rest-swagger==2.2.0 django-rq==1.3.1 @@ -64,8 +65,11 @@ execnet==1.5.0 factory-boy==2.11.1 Faker==1.0.4 fitparse==1.1.0 +Flask==1.0.2 future==0.17.1 +GDAL==2.3.3 geocoder==1.38.1 +geos==0.2.1 holoviews==1.11.3 html5lib==1.0.1 htmlmin==0.1.12 @@ -81,6 +85,7 @@ ipython-genutils==0.2.0 ipywidgets==7.4.2 iso8601==0.1.12 isodate==0.6.0 +itsdangerous==1.1.0 itypes==1.1.0 jedi==0.13.3 jeepney==0.4 @@ -94,7 +99,7 @@ jupyterlab==0.35.4 jupyterlab-server==0.3.0 keyring==18.0.0 kiwisolver==1.0.1 -kombu==4.3.0 +kombu==4.5.0 lxml==4.3.2 Markdown==3.0.1 MarkupSafe==1.1.1 @@ -154,7 +159,7 @@ ratelim==0.1.6 redis==3.2.1 requests==2.21.0 requests-oauthlib==1.2.0 -rowingdata==2.2.5 +rowingdata==2.2.6 rowingphysics==0.5.0 rq==0.13.0 scipy==1.2.1 @@ -184,7 +189,9 @@ VerbalExpressions==0.0.2 vine==1.3.0 wcwidth==0.1.7 webencodings==0.5.1 +Werkzeug==0.15.1 widgetsnbextension==3.4.2 +winkerberos==0.7.0 xmltodict==0.12.0 yamjam==0.1.7 yamllint==1.15.0 diff --git a/requirements_win.txt b/requirements_win.txt index b0454d00..16c9d193 100644 --- a/requirements_win.txt +++ b/requirements_win.txt @@ -30,25 +30,26 @@ cycler==0.10.0 dask==1.1.4 decorator==4.4.0 defusedxml==0.5.0 -Django==1.9.5 +Django==2.1.7 django-analytical==2.5.0 django-async-messages==0.3.1 django-braces==1.13.0 django-classy-tags==0.8.0 django-cookie-law==2.0.1 -django-cors-headers==2.4.0 +django-cors-headers==2.5.2 django-countries==5.3.3 django-datetime-widget==0.9.3 -django-debug-toolbar==1.4 +django-debug-toolbar==1.11 django-extensions==2.1.6 -django-htmlmin==0.10.0 +django-htmlmin==0.11.0 django-leaflet==0.24.0 django-mailbox==4.7.1 -django-oauth-toolkit==0.10.0 +django-oauth-toolkit==1.2.0 django-oauth2-provider==0.2.6.1 +django-redis==4.10.0 django-rest-framework==0.1.0 django-rest-swagger==2.2.0 -django-rq==1.3.0 +django-rq==1.3.1 django-rq-dashboard==0.3.3 django-ses==0.8.10 django-shell-plus==1.1.7 @@ -56,7 +57,7 @@ django-social-share==1.3.2 django-suit==0.2.26 django-suit-rq==1.0.1 django-tz-detect==0.2.9 -djangorestframework==3.5.4 +djangorestframework==3.9.2 docopt==0.6.2 docutils==0.14 entrypoints==0.3 @@ -64,9 +65,11 @@ execnet==1.5.0 factory-boy==2.11.1 Faker==1.0.4 fitparse==1.1.0 +Flask==1.0.2 future==0.17.1 GDAL==2.3.3 geocoder==1.38.1 +geos==0.2.1 holoviews==1.11.3 html5lib==1.0.1 htmlmin==0.1.12 @@ -77,11 +80,12 @@ idna==2.8 image==1.5.27 importlib-resources==1.0.2 ipykernel==5.1.0 -ipython==7.3.0 +ipython==7.4.0 ipython-genutils==0.2.0 ipywidgets==7.4.2 iso8601==0.1.12 isodate==0.6.0 +itsdangerous==1.1.0 itypes==1.1.0 jedi==0.13.3 jeepney==0.4 @@ -92,7 +96,7 @@ jupyter-client==5.2.4 jupyter-console==6.0.0 jupyter-core==4.4.0 jupyterlab==0.35.4 -jupyterlab-server==0.2.0 +jupyterlab-server==0.3.0 keyring==18.0.0 kiwisolver==1.0.1 kombu==4.3.0 @@ -112,7 +116,7 @@ nose-parameterized==0.6.0 notebook==5.7.6 numpy==1.16.2 oauth2==1.9.0.post1 -oauthlib==1.0.3 +oauthlib==3.0.1 openapi-codec==1.3.2 packaging==19.0 pandas==0.24.2 @@ -155,7 +159,7 @@ ratelim==0.1.6 redis==3.2.1 requests==2.21.0 requests-oauthlib==1.2.0 -rowingdata==2.2.3 +rowingdata==2.2.5 rowingphysics==0.5.0 rq==0.13.0 scipy==1.2.1 @@ -185,6 +189,7 @@ VerbalExpressions==0.0.2 vine==1.3.0 wcwidth==0.1.7 webencodings==0.5.1 +Werkzeug==0.15.1 widgetsnbextension==3.4.2 winkerberos==0.7.0 xmltodict==0.12.0 diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 141bc9f0..2545cd36 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -4360,8 +4360,11 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line', try: tseconds = datadf.loc[:,'time'] except KeyError: - tseconds = datadf.loc[:,xparam] - + try: + tseconds = datadf.loc[:,xparam] + except: + return ['','

A chart data error occurred

','','A chart data error occurred'] + yparamname = axlabels[yparam] #datadf = datadf[datadf[yparam] > 0] diff --git a/rowers/tests/test_errorpages.py b/rowers/tests/test_errorpages.py index 8a1a3e67..19941fb5 100644 --- a/rowers/tests/test_errorpages.py +++ b/rowers/tests/test_errorpages.py @@ -14,7 +14,8 @@ class TestErrorPages(TestCase): factory = RequestFactory() request = factory.get('/') - response = error404_view(request) + e = None + response = error404_view(request,e ) self.assertEqual(response.status_code, 404) self.assertIn('404 Page not found', str(response.content)) @@ -22,7 +23,7 @@ class TestErrorPages(TestCase): self.assertEqual(response.status_code, 500) self.assertIn('500 Internal Server Error', str(response.content)) - response = error400_view(request) + response = error400_view(request, e) self.assertEqual(response.status_code, 400) diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index a0b58be9..4096c9da 100644 Binary files a/rowers/tests/testdata/testdata.csv.gz and b/rowers/tests/testdata/testdata.csv.gz differ diff --git a/rowers/views/errorviews.py b/rowers/views/errorviews.py index f0c14f4a..d6f7cc7c 100644 --- a/rowers/views/errorviews.py +++ b/rowers/views/errorviews.py @@ -22,14 +22,14 @@ def error500_view(request): response.status_code = 500 return response -def error404_view(request): +def error404_view(request, exception): response = render(request,'404.html', {},status=404) # context_instance = RequestContext(request)) response.status_code = 404 return response -def error400_view(request): +def error400_view(request, exception): response = render(request,'400.html', {},status=400) # context_instance = RequestContext(request)) diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 7574a68b..a01cf017 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -910,7 +910,8 @@ def virtualevent_compare_view(request,id=0): workouts = [] for id in workoutids: try: - workouts.append(Workout.objects.get(id=encoded.decode_hex(id))) + workouts.append(Workout.objects.get( + id=encoder.decode_hex(id))) except Workout.DoesNotExist: pass @@ -1797,7 +1798,10 @@ def workout_downloadwind_view(request,id=0, windspeed = winddata[0] windbearing = winddata[1] message = winddata[2] - row.notes += "\n"+message + try: + row.notes += "\n"+message + except TypeError: + pass row.save() rowdata.add_wind(windspeed,windbearing) rowdata.write_csv(f1,gzip=True) @@ -1864,7 +1868,11 @@ def workout_downloadmetar_view(request,id=0, windspeed = winddata[0] windbearing = winddata[1] message = winddata[2] - row.notes += "\n"+message + try: + row.notes += "\n"+message + except TypeError: + pass + row.save() rowdata.add_wind(windspeed,windbearing) rowdata.write_csv(f1,gzip=True) @@ -4858,14 +4866,23 @@ def workout_summary_edit_view(request,id,message="",successmessage="" value_power = request.POST['value_power'] value_work = request.POST['value_work'] if powerorpace == 'power': - power = int(value_power) + try: + power = int(value_power) + except ValueError: + int(normp) elif powerorpace == 'pace': try: pace_secs = float(value_pace) except ValueError: - pace_secs = float(value_pace.replace(',','.')) + try: + pace_secs = float(value_pace.replace(',','.')) + except ValueError: + pace_secs = int(500./normv) elif powerorpace == 'work': - work = int(value_work) + try: + work = int(value_work) + except ValueError: + work = int(normw) if powerorpace == 'power' and power is not None: try: