Private
Public Access
1
0

last pep in rowers dir

This commit is contained in:
Sander Roosendaal
2022-03-14 19:59:48 +01:00
parent a0223bec24
commit ded96b4ccd
3 changed files with 28 additions and 63 deletions

View File

@@ -1,5 +1,4 @@
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required, user_passes_test
from django.urls import reverse from django.urls import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect

View File

@@ -3,7 +3,7 @@ from rowers.metrics import rowingmetrics
from django.db.models.signals import m2m_changed from django.db.models.signals import m2m_changed
from rowers.courseutils import coordinate_in_path from rowers.courseutils import coordinate_in_path
from rowers.utils import ( from rowers.utils import (
workflowleftpanel, workflowmiddlepanel, # workflowleftpanel, workflowmiddlepanel,
defaultleft, defaultmiddle, landingpages, landingpages2, defaultleft, defaultmiddle, landingpages, landingpages2,
steps_read_fit, steps_write_fit, ps_dict_order steps_read_fit, steps_write_fit, ps_dict_order
) )
@@ -15,18 +15,15 @@ import uuid
from django.db import models, IntegrityError from django.db import models, IntegrityError
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.validators import validate_email
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django import forms from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.dispatch import receiver from django.dispatch import receiver
from django.forms.widgets import SplitDateTimeWidget, SelectDateWidget from django.forms.widgets import SplitDateTimeWidget, SelectDateWidget
#from django.forms.extras.widgets import SelectDateWidget
from django.forms.formsets import BaseFormSet from django.forms.formsets import BaseFormSet
#from datetimewidget.widgets import DateTimeWidget
from django.contrib.admin.widgets import AdminDateWidget, AdminTimeWidget, AdminSplitDateTime from django.contrib.admin.widgets import AdminDateWidget, AdminTimeWidget, AdminSplitDateTime
from django.core.validators import validate_email
import os import os
import json import json
import twitter import twitter
@@ -55,8 +52,6 @@ import datetime
from taggit.managers import TaggableManager from taggit.managers import TaggableManager
#from rules.contrib.models import RulesModel
from rowers.rower_rules import * from rowers.rower_rules import *
from rowers.opaque import encoder from rowers.opaque import encoder
@@ -322,7 +317,6 @@ def update_records(url=c2url, verbose=True):
dfs = pd.read_html(url, attrs={'class': 'views-table'}) dfs = pd.read_html(url, attrs={'class': 'views-table'})
df = dfs[0] df = dfs[0]
df.columns = df.columns.str.strip() df.columns = df.columns.str.strip()
success = 1
except: # pragma: no cover except: # pragma: no cover
df = pd.DataFrame() df = pd.DataFrame()
@@ -574,29 +568,16 @@ def course_spline(coordinates):
latitudes = coordinates['latitude'].values latitudes = coordinates['latitude'].values
longitudes = coordinates['longitude'].values longitudes = coordinates['longitude'].values
# spline parameters
s = 1.0
k = min([5, len(latitudes)-1])
nest = -1
t = np.linspace(0, 1, len(latitudes)) t = np.linspace(0, 1, len(latitudes))
tnew = np.linspace(0, 1, 100) tnew = np.linspace(0, 1, 100)
try: try:
#latnew = CubicSpline(t,latitudes,bc_type='not-a-knot')(tnew)
#lonnew = CubicSpline(t,longitudes,bc_type='not-a-knot')(tnew)
latnew = interp1d(t, latitudes)(tnew) latnew = interp1d(t, latitudes)(tnew)
lonnew = interp1d(t, longitudes)(tnew) lonnew = interp1d(t, longitudes)(tnew)
except ValueError: # pragma: no cover except ValueError: # pragma: no cover
latnew = latitudes latnew = latitudes
lonnew = longitudes lonnew = longitudes
# latnew = CubicSpline(t,latitudes,bc_type='natural')(tnew)
# lonnew = CubicSpline(t,longitudes,bc_type='natural')(tnew)
# tckp,u = splprep([t,latitudes,longitudes],s=s,k=k,nest=nest)
# tnew,latnew,lonnew = splev(np.linspace(0,1,100),tckp)
newcoordinates = pd.DataFrame({ newcoordinates = pd.DataFrame({
'latitude': latnew, 'latitude': latnew,
'longitude': lonnew, 'longitude': lonnew,
@@ -673,7 +654,8 @@ def get_delta(vector, polygon):
p = polygon_to_path(polygon) p = polygon_to_path(polygon)
def f(x): return coordinate_in_path(x['lat'], x['lon'], p) def f(x):
return coordinate_in_path(x['lat'], x['lon'], p)
df = pd.DataFrame({'x': x, df = pd.DataFrame({'x': x,
'lat': lat, 'lat': lat,
@@ -795,7 +777,7 @@ class PaidPlan(models.Model):
shortname=self.shortname, shortname=self.shortname,
price=self.price, price=self.price,
paymenttype=self.paymenttype, paymenttype=self.paymenttype,
paymentprocessor=self.paymentprocessor, # paymentprocessor=self.paymentprocessor,
) )
@@ -1346,8 +1328,9 @@ class BaseFavoriteFormSet(BaseFormSet):
xparam = form.cleaned_data['xparam'] xparam = form.cleaned_data['xparam']
yparam1 = form.cleaned_data['yparam1'] yparam1 = form.cleaned_data['yparam1']
yparam2 = form.cleaned_data['yparam2'] yparam2 = form.cleaned_data['yparam2']
plottype = form.cleaned_data['plottype'] # plottype = form.cleaned_data['plottype']
reststrokes = form.cleaned_data['reststrokes'] # reststrokes = form.cleaned_data['reststrokes']
pass
if not xparam: if not xparam:
raise forms.ValidationError( raise forms.ValidationError(
@@ -1402,10 +1385,11 @@ class BaseConditionFormSet(BaseFormSet):
for form in self.forms: for form in self.forms:
if form.cleaned_data: if form.cleaned_data:
metric = form.cleaned_data['metric'] # metric = form.cleaned_data['metric']
condition = form.cleaned_data['condition'] # condition = form.cleaned_data['condition']
value1 = form.cleaned_data['value1'] # value1 = form.cleaned_data['value1']
value2 = form.cleaned_data['value2'] # value2 = form.cleaned_data['value2']
pass
rowchoices = [] rowchoices = []
@@ -1475,7 +1459,7 @@ class Alert(models.Model):
return description return description
def shortdescription(self): # pragma: no cover def shortdescription(self): # pragma: no cover
metricdict = {key: value for (key, value) in parchoicesy1} # metricdict = {key: value for (key, value) in parchoicesy1}
if self.measured.condition == 'between': if self.measured.condition == 'between':
description = '{value1} < {metric} < {value2}'.format( description = '{value1} < {metric} < {value2}'.format(
@@ -1526,7 +1510,7 @@ class GeoCourse(models.Model):
def __str__(self): def __str__(self):
name = self.name name = self.name
country = self.country # country = self.country
d = self.distance d = self.distance
if d == 0: # pragma: no cover if d == 0: # pragma: no cover
self.distance = course_length(self) self.distance = course_length(self)
@@ -1535,7 +1519,7 @@ class GeoCourse(models.Model):
return u'{name} - {d}m'.format( return u'{name} - {d}m'.format(
name=name, name=name,
country=country, # country=country,
d=d, d=d,
) )
@@ -2530,7 +2514,6 @@ class PlannedSession(models.Model):
can_be_shared = models.BooleanField(default=True) can_be_shared = models.BooleanField(default=True)
fitfile = models.FileField(upload_to=get_file_path, blank=True, null=True) fitfile = models.FileField(upload_to=get_file_path, blank=True, null=True)
#steps_json = models.TextField(max_length=10000,default=None,blank=True,null=True)
steps = PlannedSessionStepField(default={}, null=True, max_length=1000) steps = PlannedSessionStepField(default={}, null=True, max_length=1000)
interval_string = models.TextField(max_length=1000, default=None, blank=True, null=True, interval_string = models.TextField(max_length=1000, default=None, blank=True, null=True,
verbose_name='Interval String (optional)') verbose_name='Interval String (optional)')
@@ -2565,7 +2548,7 @@ class PlannedSession(models.Model):
if self.sessionvalue <= 0: # pragma: no cover if self.sessionvalue <= 0: # pragma: no cover
self.sessionvalue = 1 self.sessionvalue = 1
manager = self.manager # manager = self.manager
if self.sessiontype not in ['race', 'indoorrace']: if self.sessiontype not in ['race', 'indoorrace']:
if not can_add_session(self.manager): if not can_add_session(self.manager):
raise ValidationError( raise ValidationError(
@@ -2612,7 +2595,7 @@ class PlannedSession(models.Model):
self.sessionmode = 'distance' self.sessionmode = 'distance'
self.sessionunit = 'm' self.sessionunit = 'm'
self.criterium = 'none' self.criterium = 'none'
if self.course == None: # pragma: no cover if self.course is None: # pragma: no cover
self.course = GeoCourse.objects.all()[0] self.course = GeoCourse.objects.all()[0]
self.sessionvalue = self.course.distance self.sessionvalue = self.course.distance
elif self.sessiontype != 'coursetest' and self.sessiontype != 'race': elif self.sessiontype != 'coursetest' and self.sessiontype != 'race':
@@ -2626,7 +2609,6 @@ class PlannedSession(models.Model):
if self.preferreddate < self.startdate: # pragma: no cover if self.preferreddate < self.startdate: # pragma: no cover
self.preferreddate = self.startdate self.preferreddate = self.startdate
#super(PlannedSession,self).save(*args, **kwargs)
if self.steps: if self.steps:
steps = self.steps steps = self.steps
elif self.fitfile: # pragma: no cover elif self.fitfile: # pragma: no cover
@@ -2640,7 +2622,7 @@ class PlannedSession(models.Model):
steps = self.steps steps = self.steps
steps['filename'] = os.path.join(settings.MEDIA_ROOT, filename) steps['filename'] = os.path.join(settings.MEDIA_ROOT, filename)
fitfile = steps_write_fit(steps) _ = steps_write_fit(steps)
self.fitfile.name = filename self.fitfile.name = filename
self.steps = steps self.steps = steps
@@ -2752,8 +2734,8 @@ class VirtualRace(PlannedSession):
def __str__(self): def __str__(self):
name = self.name name = self.name
startdate = self.startdate # startdate = self.startdate
enddate = self.enddate # enddate = self.enddate
stri = u'Virtual challenge {n}'.format( stri = u'Virtual challenge {n}'.format(
n=name, n=name,
@@ -4031,9 +4013,6 @@ class WorkoutForm(ModelForm):
class AdvancedWorkoutForm(ModelForm): class AdvancedWorkoutForm(ModelForm):
#quick_calc = forms.BooleanField(initial=True,required=False)
#go_service = forms.BooleanField(initial=False,required=False,label='Experimental')
class Meta: class Meta:
model = Workout model = Workout
fields = ['boattype', 'weightvalue', 'boatbrand'] fields = ['boattype', 'weightvalue', 'boatbrand']
@@ -4332,8 +4311,8 @@ class RowerPowerZonesForm(ModelForm):
try: try:
ut3name = cleaned_data['ut3name'] ut3name = cleaned_data['ut3name']
except: except:
ut2name = 'UT3' ut3name = 'UT3'
cleaned_data['ut3name'] = 'UT3' cleaned_data['ut3name'] = ut3name
try: try:
ut2name = cleaned_data['ut2name'] ut2name = cleaned_data['ut2name']
except: except:
@@ -4717,10 +4696,10 @@ class SiteAnnouncement(models.Model):
self.modified = timezone.now() self.modified = timezone.now()
if self.dotweet: # pragma: no cover if self.dotweet: # pragma: no cover
try: try:
status = tweetapi.PostUpdate(self.announcement) _ = tweetapi.PostUpdate(self.announcement)
except: except:
try: try:
status = tweetapi.PostUpdate(self.announcement[:270]) _ = tweetapi.PostUpdate(self.announcement[:270])
except: except:
pass pass
return super(SiteAnnouncement, self).save(*args, **kwargs) return super(SiteAnnouncement, self).save(*args, **kwargs)

View File

@@ -6,8 +6,6 @@ from rowers.tasks import handle_rp3_async_workout
from rowsandall_app.settings import ( from rowsandall_app.settings import (
C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET,
STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET,
RP3_CLIENT_ID, RP3_CLIENT_SECRET,
RP3_REDIRECT_URI, RP3_CLIENT_KEY,
RP3_CLIENT_ID, RP3_CLIENT_KEY, RP3_REDIRECT_URI, RP3_CLIENT_SECRET, RP3_CLIENT_ID, RP3_CLIENT_KEY, RP3_REDIRECT_URI, RP3_CLIENT_SECRET,
UPLOAD_SERVICE_URL, UPLOAD_SERVICE_SECRET UPLOAD_SERVICE_URL, UPLOAD_SERVICE_SECRET
) )
@@ -29,8 +27,6 @@ queuelow = django_rq.get_queue('low')
queuehigh = django_rq.get_queue('high') queuehigh = django_rq.get_queue('high')
#from async_messages import message_user,messages
oauth_data = { oauth_data = {
'client_id': RP3_CLIENT_ID, 'client_id': RP3_CLIENT_ID,
'client_secret': RP3_CLIENT_SECRET, 'client_secret': RP3_CLIENT_SECRET,
@@ -64,8 +60,6 @@ def do_refresh_token(refreshtoken): # pragma: no cover
def get_token(code): # pragma: no cover def get_token(code): # pragma: no cover
client_auth = requests.auth.HTTPBasicAuth(
RP3_CLIENT_KEY, RP3_CLIENT_SECRET)
post_data = { post_data = {
"client_id": RP3_CLIENT_KEY, "client_id": RP3_CLIENT_KEY,
"grant_type": "authorization_code", "grant_type": "authorization_code",
@@ -73,9 +67,6 @@ def get_token(code): # pragma: no cover
"redirect_uri": RP3_REDIRECT_URI, "redirect_uri": RP3_REDIRECT_URI,
"client_secret": RP3_CLIENT_SECRET, "client_secret": RP3_CLIENT_SECRET,
} }
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
response = requests.post( response = requests.post(
"https://rp3rowing-app.com/oauth/token", "https://rp3rowing-app.com/oauth/token",
@@ -102,8 +93,6 @@ def make_authorization_url(request): # pragma: no cover
def get_rp3_workout_list(user): def get_rp3_workout_list(user):
r = Rower.objects.get(user=user)
auth_token = rp3_open(user) auth_token = rp3_open(user)
headers = {'Authorization': 'Bearer ' + auth_token} headers = {'Authorization': 'Bearer ' + auth_token}
@@ -148,13 +137,13 @@ def get_rp3_workouts(rower, do_async=True): # pragma: no cover
w.uploadedtorp3 for w in Workout.objects.filter(user=rower) w.uploadedtorp3 for w in Workout.objects.filter(user=rower)
]) ])
newids = [rp3id for rp3id in rp3ids if not rp3id in knownrp3ids] newids = [rp3id for rp3id in rp3ids if rp3id not in knownrp3ids]
for id in newids: for id in newids:
startdatetime = workouts_list.loc[id, 'executed_at'] startdatetime = workouts_list.loc[id, 'executed_at']
dologging('rp3_import.log', startdatetime) dologging('rp3_import.log', startdatetime)
job = myqueue( _ = myqueue(
queuehigh, queuehigh,
handle_rp3_async_workout, handle_rp3_async_workout,
rower.user.id, rower.user.id,
@@ -221,7 +210,6 @@ def get_rp3_workout_token(workout_id, auth_token, waittime=3, max_attempts=20):
def get_rp3_workout_link(user, workout_id, waittime=3, max_attempts=20): # pragma: no cover def get_rp3_workout_link(user, workout_id, waittime=3, max_attempts=20): # pragma: no cover
r = Rower.objects.get(user=user)
auth_token = rp3_open(user) auth_token = rp3_open(user)
return get_rp3_workout_token(workout_id, auth_token, waittime=waittime, max_attempts=max_attempts) return get_rp3_workout_token(workout_id, auth_token, waittime=waittime, max_attempts=max_attempts)
@@ -231,7 +219,6 @@ def get_rp3_workout(user, workout_id, startdatetime=None): # pragma: no cover
url = get_rp3_workout_link(user, workout_id) url = get_rp3_workout_link(user, workout_id)
filename = 'media/RP3Import_'+str(workout_id)+'.csv' filename = 'media/RP3Import_'+str(workout_id)+'.csv'
r = Rower.objects.get(user=user)
auth_token = rp3_open(user) auth_token = rp3_open(user)
if not startdatetime: if not startdatetime: