Merge branch 'feature/django4.2' into develop
This commit is contained in:
@@ -432,6 +432,7 @@ def resample(id, r, parent, overwrite='copy'):
|
||||
|
||||
def calculate_goldmedalstandard(rower, workout, recurrance=True):
|
||||
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id)
|
||||
|
||||
try:
|
||||
df = pl.read_parquet(cpfile)
|
||||
except:
|
||||
@@ -445,7 +446,8 @@ def calculate_goldmedalstandard(rower, workout, recurrance=True):
|
||||
if df.is_empty():
|
||||
return 0, 0
|
||||
else:
|
||||
return 0,0
|
||||
return 0,0
|
||||
|
||||
|
||||
if df.is_empty() and recurrance: # pragma: no cover
|
||||
df, delta, cpvalues = setcp(workout, recurrance=False, background=True)
|
||||
@@ -562,7 +564,6 @@ def setcp(workout, background=False, recurrance=True):
|
||||
return pl.DataFrame({'delta': [], 'cp': []}), pl.Series(dtype=pl.Float64), pl.Series(dtype=pl.Float64)
|
||||
csvfile = os.path.abspath(csvfile)
|
||||
|
||||
|
||||
with grpc.insecure_channel(
|
||||
target='localhost:50052',
|
||||
options=[('grpc.lb_policy_name', 'pick_first'),
|
||||
|
||||
@@ -117,7 +117,7 @@ def send_template_email(from_email, to_email, subject,
|
||||
if createmessage:
|
||||
for recipient in to_email:
|
||||
try:
|
||||
soup = BeautifulSoup(html_content)
|
||||
soup = BeautifulSoup(html_content, 'lxml')
|
||||
|
||||
s2 = soup.body
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ from sqlalchemy import create_engine
|
||||
import sqlalchemy as sa
|
||||
from sqlite3 import OperationalError
|
||||
from django.utils import timezone
|
||||
from datetime import timezone as dt_timezone
|
||||
import pandas as pd
|
||||
from dateutil import parser
|
||||
import datetime
|
||||
@@ -99,25 +100,25 @@ smoothingchoices = (
|
||||
|
||||
def half_year_from_now(ttz=None):
|
||||
if ttz is None:
|
||||
return (datetime.datetime.now(tz=timezone.utc)+timezone.timedelta(days=182)).date()
|
||||
return (datetime.datetime.now(tz=dt_timezone.utc)+timezone.timedelta(days=182)).date()
|
||||
return (datetime.datetime.utcnow()+timezone.timedelta(days=182)).astimezone(pytz.timezone(ttz)).date() # pragma: no cover
|
||||
|
||||
|
||||
def a_week_from_now(ttz=None):
|
||||
if ttz is None:
|
||||
return (datetime.datetime.now(tz=timezone.utc)+timezone.timedelta(days=7)).date()
|
||||
return (datetime.datetime.now(tz=dt_timezone.utc)+timezone.timedelta(days=7)).date()
|
||||
return (datetime.datetime.utcnow()+timezone.timedelta(days=7)).astimezone(pytz.timezone(ttz)).date() # pragma: no cover
|
||||
|
||||
|
||||
def current_day(ttz=None):
|
||||
if ttz is None:
|
||||
return (datetime.datetime.now(tz=timezone.utc)).date()
|
||||
return (datetime.datetime.now(tz=dt_timezone.utc)).date()
|
||||
return datetime.datetime.utcnow().astimezone(pytz.timezone(ttz)).date() # pragma: no cover
|
||||
|
||||
|
||||
def current_time(ttz=None): # pragma: no cover
|
||||
if ttz is None:
|
||||
return datetime.datetime.now(tz=timezone.utc)
|
||||
return datetime.datetime.now(tz=dt_timezone.utc)
|
||||
return (datetime.datetime.utcnow()).astimezone(pytz.timezone(ttz)) # pragma: no cover
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Interactions with Rowsandall.com API. Not fully complete.
|
||||
|
||||
# Python
|
||||
import oauth2 as oauth
|
||||
#import oauth2 as oauth
|
||||
import cgi
|
||||
import requests
|
||||
import requests.auth
|
||||
|
||||
@@ -62,7 +62,7 @@ from rowers.utils import NoTokenError
|
||||
from rowers.plannedsessions import get_dates_timeperiod
|
||||
from shutil import copyfile, copy
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from mock import Mock, patch, MagicMock
|
||||
#from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import polars as pl
|
||||
|
||||
@@ -1103,7 +1103,8 @@ class WorkoutStatsTestNew(TestCase):
|
||||
}
|
||||
request.COOKIES = SimpleCookie({'name': 'bla'})
|
||||
# adding session
|
||||
middleware = SessionMiddleware()
|
||||
get_response = MagicMock()
|
||||
middleware = SessionMiddleware(get_response)
|
||||
middleware.process_request(request)
|
||||
|
||||
|
||||
|
||||
@@ -469,7 +469,8 @@ class SessionLinkTest(TestCase):
|
||||
data=form_data)
|
||||
|
||||
# adding session
|
||||
middleware = SessionMiddleware()
|
||||
get_response = MagicMock()
|
||||
middleware = SessionMiddleware(get_response)
|
||||
middleware.process_request(request)
|
||||
request.session.save()
|
||||
|
||||
@@ -484,7 +485,7 @@ class SessionLinkTest(TestCase):
|
||||
# and adding a get
|
||||
request = self.factory.get(url)
|
||||
# adding session
|
||||
middleware = SessionMiddleware()
|
||||
middleware = SessionMiddleware(get_response)
|
||||
middleware.process_request(request)
|
||||
request.session.save()
|
||||
|
||||
|
||||
@@ -856,7 +856,8 @@ class ChallengesTest(TestCase):
|
||||
data=form_data)
|
||||
|
||||
# adding session
|
||||
middleware = SessionMiddleware()
|
||||
get_response = MagicMock()
|
||||
middleware = SessionMiddleware(get_response)
|
||||
middleware.process_request(request)
|
||||
request.session.save()
|
||||
|
||||
|
||||
@@ -41,7 +41,9 @@ class OtherUnitTests(TestCase):
|
||||
# Test get_dates_timeperiod
|
||||
def test_get_dates_timeperiod(self):
|
||||
rq = RequestFactory().get('/rowers/plannedsessions/')
|
||||
middleware = SessionMiddleware()
|
||||
get_response = MagicMock()
|
||||
|
||||
middleware = SessionMiddleware(get_response)
|
||||
middleware.process_request(rq)
|
||||
|
||||
# blanco should just run
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
from oauth2_provider.views import base
|
||||
#from oauth2_provider.views import base
|
||||
from django.conf import settings
|
||||
from django.conf.urls import url, include, handler404, handler500
|
||||
from django.conf.urls import include, handler404, handler500
|
||||
from django.urls import path, re_path
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
@@ -42,14 +42,14 @@ from rowers.forms import ForceCurveMultipleCompareForm
|
||||
from rowers.models import ForceCurveAnalysis
|
||||
from rowers.interactiveplots import forcecurve_multi_interactive_chart, instroke_multi_interactive_chart
|
||||
|
||||
from oauth2_provider.views import (
|
||||
AuthorizedTokensListView,
|
||||
AuthorizedTokenDeleteView,
|
||||
)
|
||||
#from oauth2_provider.views import (
|
||||
# AuthorizedTokensListView,
|
||||
# AuthorizedTokenDeleteView,
|
||||
#)
|
||||
|
||||
from oauth2_provider.views.base import (
|
||||
RevokeTokenView
|
||||
)
|
||||
#from oauth2_provider.views.base import (
|
||||
# RevokeTokenView
|
||||
#)
|
||||
|
||||
|
||||
class PlannedSessionViewSet(viewsets.ModelViewSet):
|
||||
@@ -237,8 +237,10 @@ handler500 = views.error500_view
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
re_path(r'^o/authorize/$', base.AuthorizationView.as_view(), name="authorize"),
|
||||
re_path(r'^o/token/$', base.TokenView.as_view(), name="token"),
|
||||
# re_path(r'^oauth2/', include('provider.oauth2.urls', namespace = 'oauth2')),
|
||||
# re_path(r'^o/authorize/$', base.AuthorizationView.as_view(), name="authorize"),
|
||||
# re_path(r'^o/token/$', base.TokenView.as_view(), name="token"),
|
||||
re_path('^o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
|
||||
re_path(r'^', include(router.urls)),
|
||||
re_path(r'^api-docs/$', views.schema_view, name='schema_view'),
|
||||
re_path(r'^api-auth/', include('rest_framework.urls',
|
||||
|
||||
@@ -378,7 +378,7 @@ def get_crewnerd_liked(request):
|
||||
# Stroke data views
|
||||
|
||||
@csrf_exempt
|
||||
@login_required()
|
||||
#@login_required()
|
||||
@api_view(["POST"])
|
||||
@permission_required('rower.is_not_freecoach', fn=get_user_by_userid, raise_exception=True)
|
||||
@permission_classes([IsAuthenticated])
|
||||
@@ -481,8 +481,8 @@ def strokedata_tcx(request):
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
@login_required()
|
||||
@api_view(["POST"])
|
||||
#@login_required()
|
||||
@permission_required('rower.is_not_freecoach', fn=get_user_by_userid, raise_exception=True)
|
||||
@permission_classes([IsAuthenticated])
|
||||
def strokedatajson_v3(request):
|
||||
@@ -517,6 +517,7 @@ def strokedatajson_v3(request):
|
||||
}
|
||||
|
||||
"""
|
||||
print("V3")
|
||||
|
||||
if request.method != 'POST':
|
||||
return HttpResponseNotAllowed("Method not supported") # pragma: no cover
|
||||
@@ -620,7 +621,7 @@ def strokedatajson_v3(request):
|
||||
# Process the POSTed stroke data according to the API definition
|
||||
# Return the GET stroke data according to the API definition
|
||||
@csrf_exempt
|
||||
@login_required()
|
||||
#@login_required()
|
||||
@permission_required('rower.is_not_freecoach', fn=get_user_by_userid, raise_exception=True)
|
||||
@api_view(["GET", "POST"])
|
||||
@permission_classes([IsAuthenticated])
|
||||
@@ -780,7 +781,7 @@ def strokedatajson_v2(request, id):
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
@login_required()
|
||||
#@login_required()
|
||||
@permission_required('rower.is_not_freecoach', fn=get_user_by_userid, raise_exception=True)
|
||||
@api_view(['GET', 'POST'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from django.utils.encoding import force_bytes, force_text
|
||||
from django.utils.encoding import force_bytes, force_str
|
||||
from rowers.tokens import account_activation_token
|
||||
from django.contrib.sites.shortcuts import get_current_site
|
||||
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
|
||||
@@ -782,7 +782,7 @@ def downgrade_completed_view(request):
|
||||
|
||||
def useractivate(request, uidb64, token): # pragma: no cover
|
||||
try:
|
||||
uid = force_text(urlsafe_base64_decode(uidb64))
|
||||
uid = force_str(urlsafe_base64_decode(uidb64))
|
||||
user = User.objects.get(id=uid)
|
||||
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
|
||||
user = None
|
||||
|
||||
@@ -3406,12 +3406,16 @@ def workout_data_view(request, id=0):
|
||||
|
||||
columns = datadf.columns.values
|
||||
|
||||
to_be_dropped = [
|
||||
to_be_dropped_all = [
|
||||
'id', 'time', 'hr_an', 'hr_at', 'hr_bottom', 'hr_max',
|
||||
'hr_tr', 'hr_ut1', 'hr_ut2', 'x_right',
|
||||
]
|
||||
|
||||
to_be_dropped = [c for c in to_be_dropped if c in columns]
|
||||
to_be_dropped = []
|
||||
|
||||
for c in to_be_dropped_all:
|
||||
if c in columns:
|
||||
to_be_dropped.append(c)
|
||||
|
||||
datadf.drop(labels=to_be_dropped, inplace=True, axis=1)
|
||||
|
||||
@@ -3686,7 +3690,6 @@ def workflow_default_view(request):
|
||||
@login_required()
|
||||
def workout_workflow_config2_view(request, userid=0):
|
||||
request.session['referer'] = absolute(request)['PATH']
|
||||
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
|
||||
try:
|
||||
workoutid = request.session['lastworkout']
|
||||
except KeyError:
|
||||
@@ -3735,7 +3738,6 @@ def workout_workflow_config2_view(request, userid=0):
|
||||
def workout_workflow_view(request, id):
|
||||
request.session['referer'] = absolute(request)['PATH']
|
||||
request.session['lastworkout'] = id
|
||||
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
|
||||
row = get_workout_by_opaqueid(request, id)
|
||||
|
||||
r = getrower(request.user)
|
||||
@@ -3856,6 +3858,8 @@ def workout_flexchart3_view(request, *args, **kwargs):
|
||||
favoritenr = 0
|
||||
except AssertionError:
|
||||
favoritenr = 0
|
||||
except ValueError:
|
||||
favoritenr = 0
|
||||
|
||||
if 'xparam' in kwargs:
|
||||
xparam = kwargs['xparam']
|
||||
@@ -4324,7 +4328,6 @@ def workout_comment_view(request, id=0):
|
||||
@login_required()
|
||||
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
||||
def workout_edit_view(request, id=0, message="", successmessage=""):
|
||||
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
|
||||
request.session['referer'] = absolute(request)['PATH']
|
||||
|
||||
row = get_workoutuser(id, request)
|
||||
@@ -4581,7 +4584,6 @@ def workout_edit_view(request, id=0, message="", successmessage=""):
|
||||
|
||||
@login_required()
|
||||
def workout_map_view(request, id=0):
|
||||
request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE
|
||||
request.session['referer'] = absolute(request)['PATH']
|
||||
|
||||
w = get_workout(id)
|
||||
@@ -4811,11 +4813,12 @@ def workout_upload_api(request):
|
||||
json_data = json.loads(request.body)
|
||||
secret = json_data['secret']
|
||||
post_data = json_data
|
||||
except (KeyError, JSONDecodeError):
|
||||
except:
|
||||
q = request.POST
|
||||
post_data = {k: q.getlist(k) if len(
|
||||
q.getlist(k)) > 1 else v for k, v in q.items()}
|
||||
|
||||
|
||||
# only allow local host
|
||||
hostt = request.get_host().split(':')
|
||||
if hostt[0] not in ['localhost', '127.0.0.1', 'dev.rowsandall.com', 'rowsandall.com']:
|
||||
@@ -4834,7 +4837,6 @@ def workout_upload_api(request):
|
||||
message = {'status': 'false', 'message': 'invalid credentials'}
|
||||
return JSONResponse(status=403, data=message)
|
||||
|
||||
|
||||
form = DocumentsForm(post_data)
|
||||
optionsform = TeamUploadOptionsForm(post_data)
|
||||
rowerform = TeamInviteForm(post_data)
|
||||
|
||||
Reference in New Issue
Block a user