last pep in rowers dir
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user