passes checks in python3
This commit is contained in:
+4
-4
@@ -1,4 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- Coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
@@ -44,7 +44,7 @@ class Member(models.Model):
|
|||||||
verbose_name_plural = _("members")
|
verbose_name_plural = _("members")
|
||||||
ordering = ['user']
|
ordering = ['user']
|
||||||
|
|
||||||
user = models.OneToOneField(User)
|
user = models.OneToOneField(User,on_delete=models.CASCADE)
|
||||||
contributions = models.BooleanField(default=True)
|
contributions = models.BooleanField(default=True)
|
||||||
status = models.CharField(default="member",
|
status = models.CharField(default="member",
|
||||||
choices=statuses,
|
choices=statuses,
|
||||||
@@ -150,8 +150,8 @@ class Outing(models.Model):
|
|||||||
("completed", _("completed")),
|
("completed", _("completed")),
|
||||||
("race", _("race")),
|
("race", _("race")),
|
||||||
)
|
)
|
||||||
boat = models.ForeignKey(Boat)
|
boat = models.ForeignKey(Boat,on_delete=models.CASCADE)
|
||||||
rower = models.ForeignKey(Member)
|
rower = models.ForeignKey(Member,on_delete=models.CASCADE)
|
||||||
race = models.ManyToManyField(Races,blank=True)
|
race = models.ManyToManyField(Races,blank=True)
|
||||||
otherrowers = models.ManyToManyField(Member,related_name="otherrowers")
|
otherrowers = models.ManyToManyField(Member,related_name="otherrowers")
|
||||||
status = models.CharField(_("Status"),default="active",
|
status = models.CharField(_("Status"),default="active",
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
from celery import Celery,app
|
from .celery import Celery,app
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import gc
|
import gc
|
||||||
|
|||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from .tasks import app as celery_app
|
|
||||||
|
|
||||||
|
from rowers.celery import app as celery_app
|
||||||
|
|
||||||
|
__all__ = ('celery_app',)
|
||||||
|
|||||||
+3
-2
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# The interactions with the Concept2 logbook API
|
# The interactions with the Concept2 logbook API
|
||||||
# All C2 related functions should be defined here
|
# All C2 related functions should be defined here
|
||||||
# (There is still some stuff defined directly in views.py. Need to
|
# (There is still some stuff defined directly in views.py. Need to
|
||||||
@@ -6,7 +7,7 @@
|
|||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
import datetime
|
import datetime
|
||||||
from requests import Request, Session
|
from requests import Request, Session
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
from rowers.mytypes import otwtypes
|
from rowers.mytypes import otwtypes
|
||||||
from iso8601 import ParseError
|
from iso8601 import ParseError
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ import django_rq
|
|||||||
queue = django_rq.get_queue('default')
|
queue = django_rq.get_queue('default')
|
||||||
queuelow = django_rq.get_queue('low')
|
queuelow = django_rq.get_queue('low')
|
||||||
queuehigh = django_rq.get_queue('low')
|
queuehigh = django_rq.get_queue('low')
|
||||||
from utils import myqueue
|
from rowers.utils import myqueue
|
||||||
|
|
||||||
oauth_data = {
|
oauth_data = {
|
||||||
'client_id': C2_CLIENT_ID,
|
'client_id': C2_CLIENT_ID,
|
||||||
|
|||||||
+3
-2
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the Courses related methods
|
# All the Courses related methods
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
@@ -28,7 +29,7 @@ import pandas as pd
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from timezonefinder import TimezoneFinder
|
from timezonefinder import TimezoneFinder
|
||||||
|
|
||||||
import dataprep
|
import rowers.dataprep as dataprep
|
||||||
from rowers.utils import geo_distance
|
from rowers.utils import geo_distance
|
||||||
|
|
||||||
ns = {'opengis': 'http://www.opengis.net/kml/2.2'}
|
ns = {'opengis': 'http://www.opengis.net/kml/2.2'}
|
||||||
@@ -47,7 +48,7 @@ from rowers.models import (
|
|||||||
polygon_to_path,coordinate_in_path
|
polygon_to_path,coordinate_in_path
|
||||||
)
|
)
|
||||||
|
|
||||||
from utils import geo_distance
|
|
||||||
from rowers.courseutils import coursetime_paths, coursetime_first,time_in_path
|
from rowers.courseutils import coursetime_paths, coursetime_first,time_in_path
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+15
-14
@@ -1,5 +1,6 @@
|
|||||||
# All the data preparation, data cleaning and data mangling should
|
# All the data preparation, data cleaning and data mangling should
|
||||||
# be defined here
|
# be defined here
|
||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
from rowers.models import Workout, StrokeData,Team
|
from rowers.models import Workout, StrokeData,Team
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
@@ -55,7 +56,7 @@ import pandas as pd
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import itertools
|
import itertools
|
||||||
import math
|
import math
|
||||||
from tasks import (
|
from rowers.tasks import (
|
||||||
handle_sendemail_unrecognized, handle_sendemail_breakthrough,
|
handle_sendemail_unrecognized, handle_sendemail_breakthrough,
|
||||||
handle_sendemail_hard, handle_updatecp,handle_updateergcp,
|
handle_sendemail_hard, handle_updatecp,handle_updateergcp,
|
||||||
handle_calctrimp,
|
handle_calctrimp,
|
||||||
@@ -65,9 +66,9 @@ from django.conf import settings
|
|||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
import sys
|
import sys
|
||||||
import utils
|
import rowers.utils as utils
|
||||||
import datautils
|
import rowers.datautils as datautils
|
||||||
from utils import lbstoN,myqueue,is_ranking_piece,wavg
|
from rowers.utils import lbstoN,myqueue,is_ranking_piece,wavg
|
||||||
|
|
||||||
from timezonefinder import TimezoneFinder
|
from timezonefinder import TimezoneFinder
|
||||||
|
|
||||||
@@ -638,7 +639,7 @@ def deletecpdata_sql(rower_id,table='cpdata'):
|
|||||||
try:
|
try:
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
except:
|
except:
|
||||||
print "Database locked"
|
print("Database locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
@@ -855,7 +856,7 @@ def create_row_df(r,distance,duration,startdatetime,workouttype='rower',
|
|||||||
|
|
||||||
return (id, message)
|
return (id, message)
|
||||||
|
|
||||||
from utils import totaltime_sec_to_string
|
from rowers.utils import totaltime_sec_to_string
|
||||||
|
|
||||||
# Processes painsled CSV file to database
|
# Processes painsled CSV file to database
|
||||||
def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
||||||
@@ -1564,7 +1565,7 @@ def compare_data(id):
|
|||||||
res = conn.execute(query)
|
res = conn.execute(query)
|
||||||
l2 = res.fetchall()[0][0]
|
l2 = res.fetchall()[0][0]
|
||||||
except:
|
except:
|
||||||
print "Database Locked"
|
print("Database Locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
lfile = l1
|
lfile = l1
|
||||||
@@ -1583,13 +1584,13 @@ def repair_data(verbose=False):
|
|||||||
test, ldb, lfile = compare_data(w.id)
|
test, ldb, lfile = compare_data(w.id)
|
||||||
if not test:
|
if not test:
|
||||||
if verbose:
|
if verbose:
|
||||||
print w.id, lfile, ldb
|
print(w.id, lfile, ldb)
|
||||||
try:
|
try:
|
||||||
rowdata = rdata(w.csvfilename)
|
rowdata = rdata(w.csvfilename)
|
||||||
if rowdata and len(rowdata.df):
|
if rowdata and len(rowdata.df):
|
||||||
update_strokedata(w.id, rowdata.df)
|
update_strokedata(w.id, rowdata.df)
|
||||||
|
|
||||||
except IOError, AttributeError:
|
except (IOError, AttributeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if lfile == 0:
|
if lfile == 0:
|
||||||
@@ -1618,10 +1619,10 @@ def repair_data(verbose=False):
|
|||||||
def rdata(file, rower=rrower()):
|
def rdata(file, rower=rrower()):
|
||||||
try:
|
try:
|
||||||
res = rrdata(csvfile=file, rower=rower)
|
res = rrdata(csvfile=file, rower=rower)
|
||||||
except IOError, IndexError:
|
except (IOError, IndexError):
|
||||||
try:
|
try:
|
||||||
res = rrdata(csvfile=file + '.gz', rower=rower)
|
res = rrdata(csvfile=file + '.gz', rower=rower)
|
||||||
except IOError, IndexError:
|
except (IOError, IndexError):
|
||||||
res = rrdata()
|
res = rrdata()
|
||||||
except:
|
except:
|
||||||
res = rrdata()
|
res = rrdata()
|
||||||
@@ -1640,7 +1641,7 @@ def delete_strokedata(id):
|
|||||||
try:
|
try:
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
except:
|
except:
|
||||||
print "Database Locked"
|
print("Database Locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
@@ -1792,7 +1793,7 @@ def prepmultipledata(ids, verbose=False):
|
|||||||
for id in res:
|
for id in res:
|
||||||
rowdata, row = getrowdata(id=id)
|
rowdata, row = getrowdata(id=id)
|
||||||
if verbose:
|
if verbose:
|
||||||
print id
|
print(id)
|
||||||
if rowdata and len(rowdata.df):
|
if rowdata and len(rowdata.df):
|
||||||
data = dataprep(rowdata.df, id=id, bands=True,
|
data = dataprep(rowdata.df, id=id, bands=True,
|
||||||
barchart=True, otwpower=True)
|
barchart=True, otwpower=True)
|
||||||
@@ -2029,7 +2030,7 @@ def fix_newtons(id=0, limit=3000):
|
|||||||
peakforce = rowdata['peakforce']
|
peakforce = rowdata['peakforce']
|
||||||
if peakforce.mean() > limit:
|
if peakforce.mean() > limit:
|
||||||
w = Workout.objects.get(id=id)
|
w = Workout.objects.get(id=id)
|
||||||
print "fixing ", id
|
print("fixing ", id)
|
||||||
rowdata = rdata(w.csvfilename)
|
rowdata = rdata(w.csvfilename)
|
||||||
if rowdata and len(rowdata.df):
|
if rowdata and len(rowdata.df):
|
||||||
update_strokedata(w.id, rowdata.df)
|
update_strokedata(w.id, rowdata.df)
|
||||||
|
|||||||
+13
-13
@@ -18,7 +18,7 @@ import sqlalchemy as sa
|
|||||||
from rowsandall_app.settings import DATABASES
|
from rowsandall_app.settings import DATABASES
|
||||||
from rowsandall_app.settings_dev import DATABASES as DEV_DATABASES
|
from rowsandall_app.settings_dev import DATABASES as DEV_DATABASES
|
||||||
|
|
||||||
from utils import lbstoN
|
from rowers.utils import lbstoN
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -133,7 +133,7 @@ def rdata(file,rower=rrower()):
|
|||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
from utils import totaltime_sec_to_string
|
from rowers.utils import totaltime_sec_to_string
|
||||||
|
|
||||||
|
|
||||||
# Creates C2 stroke data
|
# Creates C2 stroke data
|
||||||
@@ -635,14 +635,14 @@ def delete_strokedata(id,debug=False):
|
|||||||
try:
|
try:
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
except:
|
except:
|
||||||
print "Database Locked"
|
print("Database Locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
def update_strokedata(id,df,debug=False):
|
def update_strokedata(id,df,debug=False):
|
||||||
delete_strokedata(id,debug=debug)
|
delete_strokedata(id,debug=debug)
|
||||||
if debug:
|
if debug:
|
||||||
print "updating ",id
|
print("updating ",id)
|
||||||
rowdata = dataprep(df,id=id,bands=True,barchart=True,otwpower=True,
|
rowdata = dataprep(df,id=id,bands=True,barchart=True,otwpower=True,
|
||||||
debug=debug)
|
debug=debug)
|
||||||
|
|
||||||
@@ -676,11 +676,11 @@ def update_empower(id, inboard, oarlength, boattype, df, f1, debug=False):
|
|||||||
if success:
|
if success:
|
||||||
delete_strokedata(id,debug=debug)
|
delete_strokedata(id,debug=debug)
|
||||||
if debug:
|
if debug:
|
||||||
print "updated ",id
|
print("updated ",id)
|
||||||
print "correction ",corr_factor
|
print("correction ",corr_factor)
|
||||||
else:
|
else:
|
||||||
if debug:
|
if debug:
|
||||||
print "not updated ",id
|
print("not updated ",id)
|
||||||
|
|
||||||
|
|
||||||
rowdata = dataprep(df,id=id,bands=True,barchart=True,otwpower=True,
|
rowdata = dataprep(df,id=id,bands=True,barchart=True,otwpower=True,
|
||||||
@@ -784,8 +784,8 @@ def read_cols_df_sql(ids,columns,debug=False):
|
|||||||
def read_df_sql(id,debug=False):
|
def read_df_sql(id,debug=False):
|
||||||
if debug:
|
if debug:
|
||||||
engine = create_engine(database_url_debug, echo=False)
|
engine = create_engine(database_url_debug, echo=False)
|
||||||
print "read_df",id
|
print("read_df",id)
|
||||||
print database_url_debug
|
print(database_url_debug)
|
||||||
else:
|
else:
|
||||||
engine = create_engine(database_url, echo=False)
|
engine = create_engine(database_url, echo=False)
|
||||||
|
|
||||||
@@ -826,7 +826,7 @@ def deletecpdata_sql(rower_id,table='cpdata',debug=False):
|
|||||||
try:
|
try:
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
except:
|
except:
|
||||||
print "Database locked"
|
print("Database locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
@@ -846,7 +846,7 @@ def delete_agegroup_db(age,sex,weightcategory,debug=False):
|
|||||||
try:
|
try:
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
except:
|
except:
|
||||||
print "Database locked"
|
print("Database locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
@@ -956,11 +956,11 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
|||||||
|
|
||||||
if rowdatadf.empty:
|
if rowdatadf.empty:
|
||||||
if debug:
|
if debug:
|
||||||
print "empty"
|
print("empty")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
print "dataprep",id
|
print("dataprep",id)
|
||||||
|
|
||||||
rowdatadf.set_index([range(len(rowdatadf))],inplace=True)
|
rowdatadf.set_index([range(len(rowdatadf))],inplace=True)
|
||||||
t = rowdatadf.ix[:,'TimeStamp (sec)']
|
t = rowdatadf.ix[:,'TimeStamp (sec)']
|
||||||
|
|||||||
+9
-7
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.admin.widgets import FilteredSelectMultiple
|
from django.contrib.admin.widgets import FilteredSelectMultiple
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
@@ -9,15 +10,16 @@ from rowers.rows import validate_file_extension,must_be_csv,validate_image_exten
|
|||||||
from django.contrib.auth.forms import UserCreationForm
|
from django.contrib.auth.forms import UserCreationForm
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.admin.widgets import AdminDateWidget
|
from django.contrib.admin.widgets import AdminDateWidget
|
||||||
from django.forms.extras.widgets import SelectDateWidget
|
from django.forms.widgets import SelectDateWidget
|
||||||
|
#from django.forms.extras.widgets import SelectDateWidget
|
||||||
from django.utils import timezone,translation
|
from django.utils import timezone,translation
|
||||||
from django.forms import ModelForm, Select
|
from django.forms import ModelForm, Select
|
||||||
import dataprep
|
import rowers.dataprep as dataprep
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
import datetime
|
import datetime
|
||||||
from django.forms import formset_factory
|
from django.forms import formset_factory
|
||||||
from utils import landingpages
|
from rowers.utils import landingpages
|
||||||
from metrics import axes
|
from rowers.metrics import axes
|
||||||
|
|
||||||
class FlexibleDecimalField(forms.DecimalField):
|
class FlexibleDecimalField(forms.DecimalField):
|
||||||
|
|
||||||
@@ -162,7 +164,7 @@ class DocumentsForm(forms.Form):
|
|||||||
super(DocumentsForm, self).__init__(*args, **kwargs)
|
super(DocumentsForm, self).__init__(*args, **kwargs)
|
||||||
# self.fields['offline'].widget = HiddenInput()
|
# self.fields['offline'].widget = HiddenInput()
|
||||||
|
|
||||||
from utils import (
|
from rowers.utils import (
|
||||||
workflowleftpanel,workflowmiddlepanel,
|
workflowleftpanel,workflowmiddlepanel,
|
||||||
defaultleft,defaultmiddle
|
defaultleft,defaultmiddle
|
||||||
)
|
)
|
||||||
@@ -824,7 +826,7 @@ formaxlabelsmultiflex.pop('distance')
|
|||||||
formaxlabelsmultiflex['workoutid'] = 'Workout'
|
formaxlabelsmultiflex['workoutid'] = 'Workout'
|
||||||
parchoicesmultiflex = list(sorted(formaxlabelsmultiflex.items(), key = lambda x:x[1]))
|
parchoicesmultiflex = list(sorted(formaxlabelsmultiflex.items(), key = lambda x:x[1]))
|
||||||
|
|
||||||
from utils import palettes
|
from rowers.utils import palettes
|
||||||
|
|
||||||
palettechoices = tuple((p,p) for p in palettes.keys())
|
palettechoices = tuple((p,p) for p in palettes.keys())
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality to connect to SportTracks
|
# All the functionality to connect to SportTracks
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
@@ -16,7 +17,7 @@ from dateutil import parser
|
|||||||
import time
|
import time
|
||||||
from time import strftime
|
from time import strftime
|
||||||
|
|
||||||
import dataprep
|
import rowers.dataprep as dataprep
|
||||||
import math
|
import math
|
||||||
from math import sin,cos,atan2,sqrt
|
from math import sin,cos,atan2,sqrt
|
||||||
import os,sys
|
import os,sys
|
||||||
@@ -38,7 +39,7 @@ from django.contrib.auth.decorators import login_required
|
|||||||
from rowingdata import rowingdata, make_cumvalues
|
from rowingdata import rowingdata, make_cumvalues
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from rowers.models import Rower,Workout,checkworkoutuser
|
from rowers.models import Rower,Workout,checkworkoutuser
|
||||||
from rowers import mytypes
|
import rowers.mytypes as mytypes
|
||||||
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_ID, STRAVA_REDIRECT_URI,
|
||||||
@@ -46,7 +47,7 @@ from rowsandall_app.settings import (
|
|||||||
SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI
|
SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI
|
||||||
)
|
)
|
||||||
|
|
||||||
from utils import (
|
from rowers.utils import (
|
||||||
NoTokenError, custom_exception_handler, ewmovingaverage,
|
NoTokenError, custom_exception_handler, ewmovingaverage,
|
||||||
geo_distance,isprorower,uniqify
|
geo_distance,isprorower,uniqify
|
||||||
)
|
)
|
||||||
@@ -103,7 +104,6 @@ def imports_open(user,oauth_data):
|
|||||||
oauth_data,
|
oauth_data,
|
||||||
)
|
)
|
||||||
elif tokenexpirydate is None and expirydatename is not None and 'strava' in expirydatename:
|
elif tokenexpirydate is None and expirydatename is not None and 'strava' in expirydatename:
|
||||||
print 'noot'
|
|
||||||
token = imports_token_refresh(
|
token = imports_token_refresh(
|
||||||
user,
|
user,
|
||||||
tokenname,
|
tokenname,
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ from bokeh.core.properties import value
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from courses import (
|
from rowers.courses import (
|
||||||
course_coord_center,course_coord_maxmin,
|
course_coord_center,course_coord_maxmin,
|
||||||
polygon_coord_center
|
polygon_coord_center
|
||||||
)
|
)
|
||||||
@@ -62,7 +62,7 @@ from scipy.signal import savgol_filter
|
|||||||
from scipy.interpolate import griddata
|
from scipy.interpolate import griddata
|
||||||
|
|
||||||
|
|
||||||
import stravastuff
|
import rowers.stravastuff as stravastuff
|
||||||
|
|
||||||
from rowers.dataprep import rdata
|
from rowers.dataprep import rdata
|
||||||
import rowers.dataprep as dataprep
|
import rowers.dataprep as dataprep
|
||||||
@@ -70,9 +70,9 @@ import rowers.metrics as metrics
|
|||||||
|
|
||||||
from rowers.metrics import axes,axlabels,yaxminima,yaxmaxima
|
from rowers.metrics import axes,axlabels,yaxminima,yaxmaxima
|
||||||
|
|
||||||
from utils import lbstoN
|
from rowers.utils import lbstoN
|
||||||
from datautils import p0
|
from rowers.datautils import p0
|
||||||
import datautils
|
import rowers.datautils as datautils
|
||||||
|
|
||||||
watermarkurl = "/static/img/logo7.png"
|
watermarkurl = "/static/img/logo7.png"
|
||||||
watermarksource = ColumnDataSource(dict(
|
watermarksource = ColumnDataSource(dict(
|
||||||
|
|||||||
+3
-3
@@ -72,7 +72,7 @@ def longtask2(aantal,jobid=None,debug=False,secret=''):
|
|||||||
counter = 0
|
counter = 0
|
||||||
progress = int(100.*i/aantal)
|
progress = int(100.*i/aantal)
|
||||||
if debug:
|
if debug:
|
||||||
print progress
|
print(progress)
|
||||||
if jobid != None:
|
if jobid != None:
|
||||||
if debug:
|
if debug:
|
||||||
url = SITE_URL_DEV
|
url = SITE_URL_DEV
|
||||||
@@ -83,8 +83,8 @@ def longtask2(aantal,jobid=None,debug=False,secret=''):
|
|||||||
post_data = {"secret":secret}
|
post_data = {"secret":secret}
|
||||||
s = requests.post(url, data=post_data)
|
s = requests.post(url, data=post_data)
|
||||||
if debug:
|
if debug:
|
||||||
print url
|
print(url)
|
||||||
print s
|
print(s)
|
||||||
|
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ def make_new_workout_from_email(rower, datafile, name, cntr=0,testing=False):
|
|||||||
fileformat = fileformat[2]
|
fileformat = fileformat[2]
|
||||||
|
|
||||||
if testing:
|
if testing:
|
||||||
print 'Fileformat = ',fileformat
|
print('Fileformat = ',fileformat)
|
||||||
|
|
||||||
if fileformat == 'unknown':
|
if fileformat == 'unknown':
|
||||||
# extension = datafilename[-4:].lower()
|
# extension = datafilename[-4:].lower()
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,7 @@
|
|||||||
from utils import lbstoN
|
from __future__ import absolute_import
|
||||||
|
from rowers.utils import lbstoN
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from models import C2WorldClassAgePerformance
|
from rowers.models import C2WorldClassAgePerformance
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from scipy import optimize
|
from scipy import optimize
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|||||||
+47
-47
@@ -1,4 +1,4 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
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
|
||||||
@@ -7,8 +7,8 @@ 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
|
from django.forms.widgets import SplitDateTimeWidget,SelectDateWidget
|
||||||
from django.forms.extras.widgets import SelectDateWidget
|
#from django.forms.extras.widgets import SelectDateWidget
|
||||||
from django.forms.formsets import BaseFormSet
|
from django.forms.formsets import BaseFormSet
|
||||||
from django.contrib.admin.widgets import AdminDateWidget,AdminTimeWidget,AdminSplitDateTime
|
from django.contrib.admin.widgets import AdminDateWidget,AdminTimeWidget,AdminSplitDateTime
|
||||||
from datetimewidget.widgets import DateTimeWidget
|
from datetimewidget.widgets import DateTimeWidget
|
||||||
@@ -35,7 +35,7 @@ from rowers.rows import validate_file_extension
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from timezonefinder import TimezoneFinder
|
from timezonefinder import TimezoneFinder
|
||||||
|
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
from matplotlib import path
|
from matplotlib import path
|
||||||
|
|
||||||
from rowsandall_app.settings import (
|
from rowsandall_app.settings import (
|
||||||
@@ -216,7 +216,7 @@ def update_records(url=c2url,verbose=True):
|
|||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
if verbose:
|
if verbose:
|
||||||
print record
|
print(record)
|
||||||
record.save()
|
record.save()
|
||||||
except:
|
except:
|
||||||
if verbose:
|
if verbose:
|
||||||
@@ -261,7 +261,7 @@ class PowerTimeFitnessMetric(models.Model):
|
|||||||
|
|
||||||
date = models.DateField(default=current_day)
|
date = models.DateField(default=current_day)
|
||||||
last_workout = models.IntegerField(default=0)
|
last_workout = models.IntegerField(default=0)
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User,on_delete=models.CASCADE)
|
||||||
PowerFourMin = models.FloatField(default=0)
|
PowerFourMin = models.FloatField(default=0)
|
||||||
PowerTwoK = models.FloatField(default=0)
|
PowerTwoK = models.FloatField(default=0)
|
||||||
PowerOneHour = models.FloatField(default=0)
|
PowerOneHour = models.FloatField(default=0)
|
||||||
@@ -334,7 +334,7 @@ class Team(models.Model):
|
|||||||
|
|
||||||
name = models.CharField(max_length=150,unique=True,verbose_name='Team Name')
|
name = models.CharField(max_length=150,unique=True,verbose_name='Team Name')
|
||||||
notes = models.CharField(blank=True,max_length=200,verbose_name='Team Purpose')
|
notes = models.CharField(blank=True,max_length=200,verbose_name='Team Purpose')
|
||||||
manager = models.ForeignKey(User, null=True,) # validators=[is_not_basic])
|
manager = models.ForeignKey(User, null=True,on_delete=models.CASCADE) # validators=[is_not_basic])
|
||||||
private = models.CharField(max_length=30,choices=choices,default='open',
|
private = models.CharField(max_length=30,choices=choices,default='open',
|
||||||
verbose_name='Team Type')
|
verbose_name='Team Type')
|
||||||
|
|
||||||
@@ -371,8 +371,8 @@ class TeamForm(ModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TeamInvite(models.Model):
|
class TeamInvite(models.Model):
|
||||||
team = models.ForeignKey(Team)
|
team = models.ForeignKey(Team,on_delete=models.CASCADE)
|
||||||
user = models.ForeignKey(User,null=True)
|
user = models.ForeignKey(User,null=True,on_delete=models.CASCADE)
|
||||||
issuedate = models.DateField(default=current_day)
|
issuedate = models.DateField(default=current_day)
|
||||||
code = models.CharField(max_length=150,unique=True)
|
code = models.CharField(max_length=150,unique=True)
|
||||||
email = models.CharField(max_length=150,null=True,blank=True)
|
email = models.CharField(max_length=150,null=True,blank=True)
|
||||||
@@ -388,17 +388,17 @@ class TeamInviteForm(ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class TeamRequest(models.Model):
|
class TeamRequest(models.Model):
|
||||||
team = models.ForeignKey(Team)
|
team = models.ForeignKey(Team,on_delete=models.CASCADE)
|
||||||
user = models.ForeignKey(User,null=True)
|
user = models.ForeignKey(User,null=True,on_delete=models.CASCADE)
|
||||||
issuedate = models.DateField(default=current_day)
|
issuedate = models.DateField(default=current_day)
|
||||||
code = models.CharField(max_length=150,unique=True)
|
code = models.CharField(max_length=150,unique=True)
|
||||||
|
|
||||||
from utils import (
|
from rowers.utils import (
|
||||||
workflowleftpanel,workflowmiddlepanel,
|
workflowleftpanel,workflowmiddlepanel,
|
||||||
defaultleft,defaultmiddle,landingpages
|
defaultleft,defaultmiddle,landingpages
|
||||||
)
|
)
|
||||||
|
|
||||||
from utils import geo_distance
|
from rowers.utils import geo_distance
|
||||||
|
|
||||||
def polygon_coord_center(polygon):
|
def polygon_coord_center(polygon):
|
||||||
|
|
||||||
@@ -675,7 +675,7 @@ class Rower(models.Model):
|
|||||||
('Workout','Workout'),
|
('Workout','Workout'),
|
||||||
('Yoga','Yoga'),
|
('Yoga','Yoga'),
|
||||||
)
|
)
|
||||||
user = models.OneToOneField(User)
|
user = models.OneToOneField(User,on_delete=models.CASCADE)
|
||||||
|
|
||||||
#billing details
|
#billing details
|
||||||
country = CountryField(default=None, null=True, blank=True)
|
country = CountryField(default=None, null=True, blank=True)
|
||||||
@@ -699,7 +699,7 @@ class Rower(models.Model):
|
|||||||
null=True,blank=True,
|
null=True,blank=True,
|
||||||
default='braintree')
|
default='braintree')
|
||||||
|
|
||||||
paidplan = models.ForeignKey(PaidPlan,null=True,default=None)
|
paidplan = models.ForeignKey(PaidPlan,null=True,default=None,on_delete=models.SET_NULL)
|
||||||
|
|
||||||
planexpires = models.DateField(default=current_day)
|
planexpires = models.DateField(default=current_day)
|
||||||
teamplanexpires = models.DateField(default=current_day)
|
teamplanexpires = models.DateField(default=current_day)
|
||||||
@@ -840,7 +840,7 @@ class Rower(models.Model):
|
|||||||
|
|
||||||
# Friends/Team
|
# Friends/Team
|
||||||
friends = models.ManyToManyField("self",blank=True)
|
friends = models.ManyToManyField("self",blank=True)
|
||||||
mycoachgroup = models.ForeignKey(CoachingGroup,related_name='coachingrole',null=True)
|
mycoachgroup = models.ForeignKey(CoachingGroup,related_name='coachingrole',null=True,on_delete=models.SET_NULL)
|
||||||
coachinggroups = models.ManyToManyField(CoachingGroup,related_name='coaches')
|
coachinggroups = models.ManyToManyField(CoachingGroup,related_name='coaches')
|
||||||
privacy = models.CharField(default='visible',max_length=30,
|
privacy = models.CharField(default='visible',max_length=30,
|
||||||
choices=privacychoices)
|
choices=privacychoices)
|
||||||
@@ -881,15 +881,15 @@ class DeleteUserForm(forms.ModelForm):
|
|||||||
|
|
||||||
# requestor is user
|
# requestor is user
|
||||||
class CoachRequest(models.Model):
|
class CoachRequest(models.Model):
|
||||||
coach = models.ForeignKey(Rower)
|
coach = models.ForeignKey(Rower,on_delete=models.CASCADE)
|
||||||
user = models.ForeignKey(User,null=True)
|
user = models.ForeignKey(User,null=True,on_delete=models.CASCADE)
|
||||||
issuedate = models.DateField(default=current_day)
|
issuedate = models.DateField(default=current_day)
|
||||||
code = models.CharField(max_length=150,unique=True)
|
code = models.CharField(max_length=150,unique=True)
|
||||||
|
|
||||||
# requestor is coach
|
# requestor is coach
|
||||||
class CoachOffer(models.Model):
|
class CoachOffer(models.Model):
|
||||||
coach = models.ForeignKey(Rower)
|
coach = models.ForeignKey(Rower,on_delete=models.CASCADE)
|
||||||
user = models.ForeignKey(User,null=True)
|
user = models.ForeignKey(User,null=True,on_delete=models.CASCADE)
|
||||||
issuedate = models.DateField(default=current_day)
|
issuedate = models.DateField(default=current_day)
|
||||||
code = models.CharField(max_length=150,unique=True)
|
code = models.CharField(max_length=150,unique=True)
|
||||||
|
|
||||||
@@ -956,7 +956,7 @@ class FavoriteChart(models.Model):
|
|||||||
reststrokes = models.BooleanField(default=True,verbose_name="Incl. Rest")
|
reststrokes = models.BooleanField(default=True,verbose_name="Incl. Rest")
|
||||||
notes = models.CharField(max_length=300,verbose_name='Chart Notes',
|
notes = models.CharField(max_length=300,verbose_name='Chart Notes',
|
||||||
default='Flex Chart Notes',blank=True)
|
default='Flex Chart Notes',blank=True)
|
||||||
user = models.ForeignKey(Rower)
|
user = models.ForeignKey(Rower,on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
class FavoriteForm(ModelForm):
|
class FavoriteForm(ModelForm):
|
||||||
@@ -1049,7 +1049,7 @@ def checkviewworkouts(user,rower):
|
|||||||
if rower == r:
|
if rower == r:
|
||||||
return True
|
return True
|
||||||
teams = Team.objects.filter(manager=user)
|
teams = Team.objects.filter(manager=user)
|
||||||
print Rower.objects.filter(team__in=teams)
|
print(Rower.objects.filter(team__in=teams))
|
||||||
if rower in Rower.objects.filter(team__in=teams):
|
if rower in Rower.objects.filter(team__in=teams):
|
||||||
return True
|
return True
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
@@ -1096,7 +1096,7 @@ timezones = (
|
|||||||
# models related to geo data (points, polygon, courses)
|
# models related to geo data (points, polygon, courses)
|
||||||
|
|
||||||
class GeoCourse(models.Model):
|
class GeoCourse(models.Model):
|
||||||
manager = models.ForeignKey(Rower)
|
manager = models.ForeignKey(Rower,null=True,on_delete=models.SET_NULL)
|
||||||
distance = models.IntegerField(default=0)
|
distance = models.IntegerField(default=0)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
country = models.CharField(max_length=150,blank=True)
|
country = models.CharField(max_length=150,blank=True)
|
||||||
@@ -1127,7 +1127,7 @@ class GeoCourseEditForm(ModelForm):
|
|||||||
|
|
||||||
class GeoPolygon(models.Model):
|
class GeoPolygon(models.Model):
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
course = models.ForeignKey(GeoCourse, blank=True)
|
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE)
|
||||||
order_in_course = models.IntegerField(default=0)
|
order_in_course = models.IntegerField(default=0)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
@@ -1146,7 +1146,7 @@ class GeoPolygon(models.Model):
|
|||||||
class GeoPoint(models.Model):
|
class GeoPoint(models.Model):
|
||||||
latitude = models.FloatField(default=0)
|
latitude = models.FloatField(default=0)
|
||||||
longitude = models.FloatField(default=0)
|
longitude = models.FloatField(default=0)
|
||||||
polygon = models.ForeignKey(GeoPolygon,blank=True)
|
polygon = models.ForeignKey(GeoPolygon,blank=True,on_delete=models.CASCADE)
|
||||||
order_in_poly = models.IntegerField(default=0)
|
order_in_poly = models.IntegerField(default=0)
|
||||||
|
|
||||||
# need error checking to "insert" new point into existing polygon? This affects order_in_poly
|
# need error checking to "insert" new point into existing polygon? This affects order_in_poly
|
||||||
@@ -1159,7 +1159,7 @@ class GeoPoint(models.Model):
|
|||||||
class TrainingTarget(models.Model):
|
class TrainingTarget(models.Model):
|
||||||
rowers = models.ManyToManyField(Rower, related_name='targetathletes',
|
rowers = models.ManyToManyField(Rower, related_name='targetathletes',
|
||||||
verbose_name='Athletes')
|
verbose_name='Athletes')
|
||||||
manager = models.ForeignKey(Rower,related_name='targetmanager',null=True)
|
manager = models.ForeignKey(Rower,related_name='targetmanager',null=True,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
date = models.DateField(
|
date = models.DateField(
|
||||||
default=half_year_from_now)
|
default=half_year_from_now)
|
||||||
@@ -1227,10 +1227,10 @@ class TrainingPlan(models.Model):
|
|||||||
|
|
||||||
rowers = models.ManyToManyField(Rower,related_name='planathletes',
|
rowers = models.ManyToManyField(Rower,related_name='planathletes',
|
||||||
verbose_name='Athletes')
|
verbose_name='Athletes')
|
||||||
manager = models.ForeignKey(Rower,related_name='planmanager',null=True)
|
manager = models.ForeignKey(Rower,related_name='planmanager',null=True,on_delete=models.SET_NULL)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
status = models.BooleanField(default=True,verbose_name='Active')
|
status = models.BooleanField(default=True,verbose_name='Active')
|
||||||
target = models.ForeignKey(TrainingTarget,blank=True,null=True)
|
target = models.ForeignKey(TrainingTarget,blank=True,null=True,on_delete=models.SET_NULL)
|
||||||
startdate = models.DateField(default=current_day)
|
startdate = models.DateField(default=current_day)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
default=half_year_from_now)
|
default=half_year_from_now)
|
||||||
@@ -1600,7 +1600,7 @@ def macrocyclecheckdates(plan):
|
|||||||
cycles = cycles[1:]
|
cycles = cycles[1:]
|
||||||
|
|
||||||
class TrainingMacroCycle(models.Model):
|
class TrainingMacroCycle(models.Model):
|
||||||
plan = models.ForeignKey(TrainingPlan)
|
plan = models.ForeignKey(TrainingPlan,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
startdate = models.DateField(default=current_day)
|
startdate = models.DateField(default=current_day)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
@@ -1688,7 +1688,7 @@ class TrainingMacroCycleForm(ModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TrainingMesoCycle(models.Model):
|
class TrainingMesoCycle(models.Model):
|
||||||
plan = models.ForeignKey(TrainingMacroCycle)
|
plan = models.ForeignKey(TrainingMacroCycle,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
startdate = models.DateField(default=current_day)
|
startdate = models.DateField(default=current_day)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
@@ -1764,7 +1764,7 @@ class TrainingMesoCycle(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class TrainingMicroCycle(models.Model):
|
class TrainingMicroCycle(models.Model):
|
||||||
plan = models.ForeignKey(TrainingMesoCycle)
|
plan = models.ForeignKey(TrainingMesoCycle,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
startdate = models.DateField(default=current_day)
|
startdate = models.DateField(default=current_day)
|
||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
@@ -1903,9 +1903,9 @@ class PlannedSession(models.Model):
|
|||||||
('None',None),
|
('None',None),
|
||||||
)
|
)
|
||||||
|
|
||||||
manager = models.ForeignKey(User)
|
manager = models.ForeignKey(User,on_delete=models.PROTECT)
|
||||||
course = models.ForeignKey(GeoCourse,blank=True,null=True,
|
course = models.ForeignKey(GeoCourse,blank=True,null=True,
|
||||||
verbose_name='OTW Course')
|
verbose_name='OTW Course',on_delete=models.SET_NULL)
|
||||||
|
|
||||||
name = models.CharField(max_length=150,blank=True,
|
name = models.CharField(max_length=150,blank=True,
|
||||||
verbose_name='Name')
|
verbose_name='Name')
|
||||||
@@ -2111,7 +2111,7 @@ class VirtualRace(PlannedSession):
|
|||||||
class RaceLogo(models.Model):
|
class RaceLogo(models.Model):
|
||||||
filename = models.CharField(default='',max_length=150)
|
filename = models.CharField(default='',max_length=150)
|
||||||
creationdatetime = models.DateTimeField()
|
creationdatetime = models.DateTimeField()
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
||||||
width = models.IntegerField(default=1200)
|
width = models.IntegerField(default=1200)
|
||||||
height = models.IntegerField(default=600)
|
height = models.IntegerField(default=600)
|
||||||
race = models.ManyToManyField(VirtualRace,related_name='logos')
|
race = models.ManyToManyField(VirtualRace,related_name='logos')
|
||||||
@@ -2121,7 +2121,7 @@ class RaceLogo(models.Model):
|
|||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
os.remove(self.filename)
|
os.remove(self.filename)
|
||||||
print 'file deleted'
|
print('file deleted')
|
||||||
super(RaceLogo,self).delete(*args, **kwargs)
|
super(RaceLogo,self).delete(*args, **kwargs)
|
||||||
|
|
||||||
# Date input utility
|
# Date input utility
|
||||||
@@ -2492,10 +2492,10 @@ class Workout(models.Model):
|
|||||||
privacychoices = mytypes.privacychoices
|
privacychoices = mytypes.privacychoices
|
||||||
adaptivetypes = mytypes.adaptivetypes
|
adaptivetypes = mytypes.adaptivetypes
|
||||||
|
|
||||||
user = models.ForeignKey(Rower)
|
user = models.ForeignKey(Rower,on_delete=models.CASCADE)
|
||||||
team = models.ManyToManyField(Team,blank=True)
|
team = models.ManyToManyField(Team,blank=True)
|
||||||
plannedsession = models.ForeignKey(PlannedSession, blank=True,null=True,
|
plannedsession = models.ForeignKey(PlannedSession, blank=True,null=True,
|
||||||
verbose_name='Session')
|
verbose_name='Session',on_delete=models.SET_NULL)
|
||||||
name = models.CharField(max_length=150,blank=True,null=True)
|
name = models.CharField(max_length=150,blank=True,null=True)
|
||||||
date = models.DateField()
|
date = models.DateField()
|
||||||
workouttype = models.CharField(choices=workouttypes,max_length=50,
|
workouttype = models.CharField(choices=workouttypes,max_length=50,
|
||||||
@@ -2649,7 +2649,7 @@ def auto_delete_strokedata_on_delete(sender, instance, **kwargs):
|
|||||||
try:
|
try:
|
||||||
result = conn.execute(query)
|
result = conn.execute(query)
|
||||||
except:
|
except:
|
||||||
print "Database Locked"
|
print("Database Locked")
|
||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
@@ -2667,7 +2667,7 @@ class VirtualRaceResult(models.Model):
|
|||||||
adaptiveclass = models.CharField(default="None",max_length=50,
|
adaptiveclass = models.CharField(default="None",max_length=50,
|
||||||
choices=mytypes.adaptivetypes,
|
choices=mytypes.adaptivetypes,
|
||||||
verbose_name="Adaptive Class")
|
verbose_name="Adaptive Class")
|
||||||
race = models.ForeignKey(VirtualRace)
|
race = models.ForeignKey(VirtualRace,on_delete=models.CASCADE)
|
||||||
duration = models.TimeField(default=datetime.time(1,0))
|
duration = models.TimeField(default=datetime.time(1,0))
|
||||||
distance = models.IntegerField(default=0)
|
distance = models.IntegerField(default=0)
|
||||||
boatclass = models.CharField(choices=boatclasses,
|
boatclass = models.CharField(choices=boatclasses,
|
||||||
@@ -2726,7 +2726,7 @@ class IndoorVirtualRaceResult(models.Model):
|
|||||||
adaptiveclass = models.CharField(default="None",max_length=50,
|
adaptiveclass = models.CharField(default="None",max_length=50,
|
||||||
choices=mytypes.adaptivetypes,
|
choices=mytypes.adaptivetypes,
|
||||||
verbose_name="Adaptive Class")
|
verbose_name="Adaptive Class")
|
||||||
race = models.ForeignKey(VirtualRace)
|
race = models.ForeignKey(VirtualRace,on_delete=models.CASCADE)
|
||||||
duration = models.TimeField(default=datetime.time(1,0))
|
duration = models.TimeField(default=datetime.time(1,0))
|
||||||
distance = models.IntegerField(default=0)
|
distance = models.IntegerField(default=0)
|
||||||
boatclass = models.CharField(choices=boatclasses,
|
boatclass = models.CharField(choices=boatclasses,
|
||||||
@@ -2769,7 +2769,7 @@ class IndoorVirtualRaceResult(models.Model):
|
|||||||
class CourseTestResult(models.Model):
|
class CourseTestResult(models.Model):
|
||||||
userid = models.IntegerField(default=0)
|
userid = models.IntegerField(default=0)
|
||||||
workoutid = models.IntegerField(null=True)
|
workoutid = models.IntegerField(null=True)
|
||||||
plannedsession = models.ForeignKey(PlannedSession)
|
plannedsession = models.ForeignKey(PlannedSession,on_delete=models.CASCADE)
|
||||||
duration = models.TimeField(default=datetime.time(1,0))
|
duration = models.TimeField(default=datetime.time(1,0))
|
||||||
distance = models.IntegerField(default=0)
|
distance = models.IntegerField(default=0)
|
||||||
coursecompleted = models.BooleanField(default=False)
|
coursecompleted = models.BooleanField(default=False)
|
||||||
@@ -2903,7 +2903,7 @@ class ergcpdata(models.Model):
|
|||||||
class GraphImage(models.Model):
|
class GraphImage(models.Model):
|
||||||
filename = models.CharField(default='',max_length=150,blank=True,null=True)
|
filename = models.CharField(default='',max_length=150,blank=True,null=True)
|
||||||
creationdatetime = models.DateTimeField()
|
creationdatetime = models.DateTimeField()
|
||||||
workout = models.ForeignKey(Workout)
|
workout = models.ForeignKey(Workout,on_delete=models.CASCADE)
|
||||||
width = models.IntegerField(default=1200)
|
width = models.IntegerField(default=1200)
|
||||||
height = models.IntegerField(default=600)
|
height = models.IntegerField(default=600)
|
||||||
|
|
||||||
@@ -2920,7 +2920,7 @@ def auto_delete_image_on_delete(sender,instance, **kwargs):
|
|||||||
if len(others) == 0:
|
if len(others) == 0:
|
||||||
os.remove(instance.filename)
|
os.remove(instance.filename)
|
||||||
else:
|
else:
|
||||||
print "couldn't find the file "+instance.filename
|
print("couldn't find the file "+instance.filename)
|
||||||
|
|
||||||
|
|
||||||
# Form to update Workout data
|
# Form to update Workout data
|
||||||
@@ -3450,8 +3450,8 @@ class WorkoutComment(models.Model):
|
|||||||
created = models.DateTimeField(default=timezone.now)
|
created = models.DateTimeField(default=timezone.now)
|
||||||
read = models.BooleanField(default=False)
|
read = models.BooleanField(default=False)
|
||||||
notification = models.BooleanField(default=True,verbose_name="Subscribe to new comment notifications")
|
notification = models.BooleanField(default=True,verbose_name="Subscribe to new comment notifications")
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
||||||
workout = models.ForeignKey(Workout)
|
workout = models.ForeignKey(Workout,on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'Comment to: {w} by {u1} {u2}'.format(
|
return u'Comment to: {w} by {u1} {u2}'.format(
|
||||||
@@ -3475,8 +3475,8 @@ class PlannedSessionComment(models.Model):
|
|||||||
created = models.DateTimeField(default=timezone.now)
|
created = models.DateTimeField(default=timezone.now)
|
||||||
read = models.BooleanField(default=False)
|
read = models.BooleanField(default=False)
|
||||||
notification = models.BooleanField(default=True,verbose_name="Subscribe to new comment notifications")
|
notification = models.BooleanField(default=True,verbose_name="Subscribe to new comment notifications")
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
||||||
plannedsession = models.ForeignKey(PlannedSession)
|
plannedsession = models.ForeignKey(PlannedSession,on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'Comment to: {w} by {u1} {u2}'.format(
|
return u'Comment to: {w} by {u1} {u2}'.format(
|
||||||
|
|||||||
+7
-5
@@ -1,3 +1,5 @@
|
|||||||
|
from six import iteritems
|
||||||
|
|
||||||
workouttypes = (
|
workouttypes = (
|
||||||
('water','Standard Racing Shell'),
|
('water','Standard Racing Shell'),
|
||||||
('rower','Indoor Rower'),
|
('rower','Indoor Rower'),
|
||||||
@@ -208,15 +210,15 @@ c2mapping = {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c2mappinginv = {value:key for key,value in c2mapping.iteritems() if value is not None}
|
c2mappinginv = {value:key for key,value in iteritems(c2mapping) if value is not None}
|
||||||
|
|
||||||
stravamappinginv = {value:key for key,value in stravamapping.iteritems() if value is not None}
|
stravamappinginv = {value:key for key,value in iteritems(stravamapping) if value is not None}
|
||||||
|
|
||||||
stmappinginv = {value:key for key,value in stmapping.iteritems() if value is not None}
|
stmappinginv = {value:key for key,value in iteritems(stmapping) if value is not None}
|
||||||
|
|
||||||
rkmappinginv = {value:key for key,value in rkmapping.iteritems() if value is not None}
|
rkmappinginv = {value:key for key,value in iteritems(rkmapping) if value is not None}
|
||||||
|
|
||||||
polarmappinginv = {value:key for key,value in polarmapping.iteritems() if value is not None}
|
polarmappinginv = {value:key for key,value in iteritems(polarmapping) if value is not None}
|
||||||
|
|
||||||
otwtypes = (
|
otwtypes = (
|
||||||
'water',
|
'water',
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# Interactions with Rowsandall.com API. Not fully complete.
|
# Interactions with Rowsandall.com API. Not fully complete.
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
@@ -15,7 +16,7 @@ import math
|
|||||||
from math import sin,cos,atan2,sqrt
|
from math import sin,cos,atan2,sqrt
|
||||||
|
|
||||||
import urllib
|
import urllib
|
||||||
import c2stuff
|
import rowers.c2stuff as c2stuff
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# Python
|
# Python
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -10,7 +11,7 @@ import uuid
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import pytz
|
import pytz
|
||||||
from dateutil import parser
|
from dateutil import parser
|
||||||
from utils import myqueue,calculate_age,totaltime_sec_to_string
|
from rowers.utils import myqueue,calculate_age,totaltime_sec_to_string
|
||||||
import re
|
import re
|
||||||
import django_rq
|
import django_rq
|
||||||
queue = django_rq.get_queue('default')
|
queue = django_rq.get_queue('default')
|
||||||
@@ -30,10 +31,10 @@ from rowers.emails import htmlstrip,htmlstripnobr
|
|||||||
|
|
||||||
import rowers.mytypes as mytypes
|
import rowers.mytypes as mytypes
|
||||||
|
|
||||||
import metrics
|
import rowers.metrics as metrics
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import dataprep
|
import rowers.dataprep as dataprep
|
||||||
import courses
|
import rowers.courses as courses
|
||||||
import iso8601
|
import iso8601
|
||||||
from iso8601 import ParseError
|
from iso8601 import ParseError
|
||||||
from rowers.tasks import handle_check_race_course
|
from rowers.tasks import handle_check_race_course
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@ from matplotlib.ticker import MultipleLocator,FuncFormatter,NullFormatter
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from rows import format_pace_tick, format_pace, format_time, format_time_tick
|
from rowers.rows import format_pace_tick, format_pace, format_time, format_time_tick
|
||||||
|
|
||||||
|
|
||||||
# Formatting the distance tick marks
|
# Formatting the distance tick marks
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality needed to connect to Strava
|
# All the functionality needed to connect to Strava
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
@@ -33,8 +34,8 @@ from rowingdata import rowingdata
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
from rowers.models import Rower,Workout
|
from rowers.models import Rower,Workout
|
||||||
from rowers.models import checkworkoutuser
|
from rowers.models import checkworkoutuser
|
||||||
import dataprep
|
import rowers.dataprep as dataprep
|
||||||
from dataprep import columndict
|
from rowers.dataprep import columndict
|
||||||
|
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
@@ -51,8 +52,8 @@ from rowsandall_app.settings import (
|
|||||||
baseurl = 'https://polaraccesslink.com/v3'
|
baseurl = 'https://polaraccesslink.com/v3'
|
||||||
|
|
||||||
|
|
||||||
from utils import NoTokenError, custom_exception_handler
|
from rowers.utils import NoTokenError, custom_exception_handler
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
|
|
||||||
# Exchange access code for long-lived access token
|
# Exchange access code for long-lived access token
|
||||||
def get_token(code):
|
def get_token(code):
|
||||||
@@ -126,7 +127,7 @@ from rowers.utils import isprorower
|
|||||||
def get_all_new_workouts(available_data,testing=False):
|
def get_all_new_workouts(available_data,testing=False):
|
||||||
for record in available_data:
|
for record in available_data:
|
||||||
if testing:
|
if testing:
|
||||||
print record
|
print(record)
|
||||||
if record['data-type'] == 'EXERCISE':
|
if record['data-type'] == 'EXERCISE':
|
||||||
try:
|
try:
|
||||||
r = Rower.objects.get(polaruserid=record['user-id'])
|
r = Rower.objects.get(polaruserid=record['user-id'])
|
||||||
@@ -134,7 +135,7 @@ def get_all_new_workouts(available_data,testing=False):
|
|||||||
if r.polar_auto_import and isprorower(r):
|
if r.polar_auto_import and isprorower(r):
|
||||||
exercise_list = get_polar_workouts(u)
|
exercise_list = get_polar_workouts(u)
|
||||||
if testing:
|
if testing:
|
||||||
print exercise_list
|
print(exercise_list)
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -313,8 +314,6 @@ def get_polar_workout(user,id,transactionid):
|
|||||||
response = requests.get(url,headers = headers2)
|
response = requests.get(url,headers = headers2)
|
||||||
|
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
print response.text
|
|
||||||
|
|
||||||
result = response.text
|
result = response.text
|
||||||
# commit transaction
|
# commit transaction
|
||||||
response = requests.put(url,headers=headers)
|
response = requests.put(url,headers=headers)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality needed to connect to Runkeeper
|
# All the functionality needed to connect to Runkeeper
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
import re
|
import re
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ class StrokeDataSerializer(serializers.Serializer):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# do something
|
# do something
|
||||||
print "fake serializer"
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality to connect to SportTracks
|
# All the functionality to connect to SportTracks
|
||||||
|
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
@@ -9,7 +10,7 @@ from rowsandall_app.settings import (
|
|||||||
SPORTTRACKS_REDIRECT_URI
|
SPORTTRACKS_REDIRECT_URI
|
||||||
)
|
)
|
||||||
|
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
|
|
||||||
oauth_data = {
|
oauth_data = {
|
||||||
'client_id': SPORTTRACKS_CLIENT_ID,
|
'client_id': SPORTTRACKS_CLIENT_ID,
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
# All the functionality needed to connect to Strava
|
# All the functionality needed to connect to Strava
|
||||||
from scipy import optimize
|
from scipy import optimize
|
||||||
from scipy.signal import savgol_filter
|
from scipy.signal import savgol_filter
|
||||||
@@ -10,15 +12,15 @@ queue = django_rq.get_queue('default')
|
|||||||
queuelow = django_rq.get_queue('low')
|
queuelow = django_rq.get_queue('low')
|
||||||
queuehigh = django_rq.get_queue('low')
|
queuehigh = django_rq.get_queue('low')
|
||||||
|
|
||||||
from dataprep import columndict
|
from rowers.dataprep import columndict
|
||||||
|
|
||||||
import stravalib
|
import stravalib
|
||||||
from stravalib.exc import ActivityUploadFailed,TimeoutExceeded
|
from stravalib.exc import ActivityUploadFailed,TimeoutExceeded
|
||||||
|
|
||||||
from iso8601 import ParseError
|
from iso8601 import ParseError
|
||||||
from utils import myqueue
|
from rowers.utils import myqueue
|
||||||
|
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
import gzip
|
import gzip
|
||||||
|
|
||||||
from rowsandall_app.settings import (
|
from rowsandall_app.settings import (
|
||||||
@@ -259,7 +261,7 @@ def create_async_workout(alldata,user,stravaid,debug=False):
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
from utils import get_strava_stream
|
from rowers.utils import get_strava_stream
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+17
-13
@@ -1,4 +1,5 @@
|
|||||||
""" Background tasks done by Celery (develop) or QR (production) """
|
""" Background tasks done by Celery (develop) or QR (production) """
|
||||||
|
from __future__ import absolute_import
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import gc
|
import gc
|
||||||
@@ -16,7 +17,10 @@ from rowingdata import rowingdata as rdata
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
|
|
||||||
from celery import app
|
#from celery import app
|
||||||
|
from rowers.celery import app
|
||||||
|
from celery import shared_task
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import pytz
|
import pytz
|
||||||
import iso8601
|
import iso8601
|
||||||
@@ -39,10 +43,11 @@ from django_rq import job
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.html import strip_tags
|
from django.utils.html import strip_tags
|
||||||
|
|
||||||
from utils import deserialize_list,ewmovingaverage,wavg
|
from rowers.utils import deserialize_list,ewmovingaverage,wavg
|
||||||
from emails import htmlstrip
|
from rowers.emails import htmlstrip
|
||||||
|
|
||||||
from HTMLParser import HTMLParser
|
#from HTMLParser import HTMLParser
|
||||||
|
from html.parser import HTMLParser
|
||||||
class MLStripper(HTMLParser):
|
class MLStripper(HTMLParser):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.reset()
|
self.reset()
|
||||||
@@ -80,13 +85,13 @@ from django.db.utils import OperationalError
|
|||||||
from jinja2 import Template,Environment,FileSystemLoader
|
from jinja2 import Template,Environment,FileSystemLoader
|
||||||
env = Environment(loader = FileSystemLoader(["rowers/templates"]))
|
env = Environment(loader = FileSystemLoader(["rowers/templates"]))
|
||||||
|
|
||||||
import datautils
|
import rowers.datautils as datautils
|
||||||
import utils
|
import rowers.utils as utils
|
||||||
import requests
|
import requests
|
||||||
import longtask
|
import rowers.longtask as longtask
|
||||||
import arrow
|
import arrow
|
||||||
|
|
||||||
from utils import get_strava_stream
|
from rowers.utils import get_strava_stream
|
||||||
|
|
||||||
siteurl = SITE_URL
|
siteurl = SITE_URL
|
||||||
|
|
||||||
@@ -128,7 +133,7 @@ def handle_c2_import_stroke_data(c2token,
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
else:
|
else:
|
||||||
url = "https://log.concept2.com/api/users/me/results/"+str(c2id)
|
url = "https://log.concept2.com/api/users/me/results/{id}".format(id=c2id)
|
||||||
|
|
||||||
s = requests.get(url,headers=headers)
|
s = requests.get(url,headers=headers)
|
||||||
|
|
||||||
@@ -1238,21 +1243,21 @@ def handle_zip_file(emailfrom, subject, file,**kwargs):
|
|||||||
debug = False
|
debug = False
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
print message
|
print(message)
|
||||||
|
|
||||||
email = EmailMessage(subject, message,
|
email = EmailMessage(subject, message,
|
||||||
emailfrom,
|
emailfrom,
|
||||||
['workouts@rowsandall.com'])
|
['workouts@rowsandall.com'])
|
||||||
email.attach_file(file)
|
email.attach_file(file)
|
||||||
if debug:
|
if debug:
|
||||||
print "attaching"
|
print("attaching")
|
||||||
|
|
||||||
|
|
||||||
res = email.send()
|
res = email.send()
|
||||||
|
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
print "sent"
|
print("sent")
|
||||||
time.sleep(60)
|
time.sleep(60)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -1490,7 +1495,6 @@ def handle_updateergcp(rower_id,workoutfilenames,debug=False,**kwargs):
|
|||||||
rowdata = rdata(f1 + '.gz')
|
rowdata = rdata(f1 + '.gz')
|
||||||
except IOError:
|
except IOError:
|
||||||
rowdata = 0
|
rowdata = 0
|
||||||
|
|
||||||
if rowdata != 0:
|
if rowdata != 0:
|
||||||
therows.append(rowdata)
|
therows.append(rowdata)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ from django.db import IntegrityError
|
|||||||
import uuid
|
import uuid
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from utils import myqueue
|
from rowers.utils import myqueue
|
||||||
|
|
||||||
import django_rq
|
import django_rq
|
||||||
queue = django_rq.get_queue('default')
|
queue = django_rq.get_queue('default')
|
||||||
|
|||||||
+1
-6
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality needed to connect to Runkeeper
|
# All the functionality needed to connect to Runkeeper
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
|
|
||||||
@@ -149,12 +150,6 @@ def uploadactivity(access_token,filename,description='',
|
|||||||
headers=headers)
|
headers=headers)
|
||||||
|
|
||||||
if resp.status_code != 200:
|
if resp.status_code != 200:
|
||||||
if settings.DEBUG:
|
|
||||||
print resp.status_code
|
|
||||||
print resp.reason
|
|
||||||
print ""
|
|
||||||
print headers
|
|
||||||
print ""
|
|
||||||
return 0,resp.reason,resp.status_code,headers
|
return 0,resp.reason,resp.status_code,headers
|
||||||
else:
|
else:
|
||||||
return resp.json()[0]["Id"],"ok",200,""
|
return resp.json()[0]["Id"],"ok",200,""
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
|
|
||||||
import mytypes
|
import rowers.mytypes as mytypes
|
||||||
from rowers.mytypes import otwtypes
|
from rowers.mytypes import otwtypes
|
||||||
|
|
||||||
from rowsandall_app.settings import (
|
from rowsandall_app.settings import (
|
||||||
|
|||||||
+9
-4
@@ -26,12 +26,13 @@ queue = django_rq.get_queue('default')
|
|||||||
queuelow = django_rq.get_queue('low')
|
queuelow = django_rq.get_queue('low')
|
||||||
queuehigh = django_rq.get_queue('low')
|
queuehigh = django_rq.get_queue('low')
|
||||||
|
|
||||||
from mytypes import workouttypes,boattypes,otwtypes,workoutsources
|
from rowers.mytypes import workouttypes,boattypes,otwtypes,workoutsources
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
except:
|
except:
|
||||||
from StringIO import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
|
|
||||||
from rowers.utils import (
|
from rowers.utils import (
|
||||||
geo_distance,serialize_list,deserialize_list,uniqify,
|
geo_distance,serialize_list,deserialize_list,uniqify,
|
||||||
@@ -451,8 +452,12 @@ def make_plot(r,w,f1,f2,plottype,title,imagename='',plotnr=0):
|
|||||||
|
|
||||||
return i.id,job.id
|
return i.id,job.id
|
||||||
|
|
||||||
import c2stuff,stravastuff,sporttracksstuff,runkeeperstuff
|
import rowers.c2stuff as c2stuff
|
||||||
import underarmourstuff,tpstuff
|
import rowers.stravastuff as stravastuff
|
||||||
|
import rowers.sporttracksstuff as sporttracksstuff
|
||||||
|
import rowers.runkeeperstuff as runkeeperstuff
|
||||||
|
import rowers.underarmourstuff as underarmourstuff
|
||||||
|
import rowers.tpstuff as tpstuff
|
||||||
|
|
||||||
def set_workouttype(w,options):
|
def set_workouttype(w,options):
|
||||||
try:
|
try:
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@ from django.conf import settings
|
|||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from models import Workout,Rower,StrokeData,FavoriteChart
|
from rowers.models import Workout,Rower,StrokeData,FavoriteChart
|
||||||
|
|
||||||
from rest_framework import routers, serializers, viewsets,permissions
|
from rest_framework import routers, serializers, viewsets,permissions
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from statements import *
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
from rowers.views.statements import *
|
||||||
|
|
||||||
# Histogram for a date/time range
|
# Histogram for a date/time range
|
||||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
# Stroke data form to test API upload
|
# Stroke data form to test API upload
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
# Custom error pages with Rowsandall headers
|
# Custom error pages with Rowsandall headers
|
||||||
def error500_view(request):
|
def error500_view(request):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
# Send workout to TP
|
# Send workout to TP
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
def paidplans_view(request):
|
def paidplans_view(request):
|
||||||
if not request.user.is_anonymous():
|
if not request.user.is_anonymous():
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def plannedsession_comment_view(request,id=0,userid=0):
|
def plannedsession_comment_view(request,id=0,userid=0):
|
||||||
@@ -496,8 +496,6 @@ def plannedsession_multicreate_view(request,
|
|||||||
for obj in ps_formset.deleted_objects:
|
for obj in ps_formset.deleted_objects:
|
||||||
messages.info(request,"Deleted Planned Session "+str(obj))
|
messages.info(request,"Deleted Planned Session "+str(obj))
|
||||||
obj.delete()
|
obj.delete()
|
||||||
else:
|
|
||||||
print ps_formset.errors
|
|
||||||
|
|
||||||
url = reverse(plannedsession_multicreate_view,
|
url = reverse(plannedsession_multicreate_view,
|
||||||
kwargs = {
|
kwargs = {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
# List Courses
|
# List Courses
|
||||||
@@ -653,7 +653,7 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0):
|
|||||||
latitude = rowdata.df[' latitude']
|
latitude = rowdata.df[' latitude']
|
||||||
if not latitude.std():
|
if not latitude.std():
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
except KeyError, AttributeError:
|
except (KeyError, AttributeError):
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
else:
|
else:
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
import time
|
import time
|
||||||
import colorsys
|
import colorsys
|
||||||
import timestring
|
|
||||||
import zipfile
|
import zipfile
|
||||||
import bleach
|
import bleach
|
||||||
import arrow
|
import arrow
|
||||||
@@ -56,7 +56,11 @@ from rowers.forms import (
|
|||||||
MetricsForm,DisqualificationForm,disqualificationreasons,
|
MetricsForm,DisqualificationForm,disqualificationreasons,
|
||||||
disqualifiers,SearchForm,BillingForm,PlanSelectForm
|
disqualifiers,SearchForm,BillingForm,PlanSelectForm
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
from django.core.urlresolvers import reverse, reverse_lazy
|
from django.core.urlresolvers import reverse, reverse_lazy
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
from django.urls import reverse, reverse_lazy
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
@@ -181,7 +185,10 @@ from rowers.tasks import (
|
|||||||
|
|
||||||
from scipy.signal import savgol_filter
|
from scipy.signal import savgol_filter
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
|
try:
|
||||||
from Cookie import SimpleCookie
|
from Cookie import SimpleCookie
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
from http.cookies import SimpleCookie
|
||||||
from shutil import copyfile,move
|
from shutil import copyfile,move
|
||||||
import rowers.mytypes as mytypes
|
import rowers.mytypes as mytypes
|
||||||
from rowingdata import rower as rrower
|
from rowingdata import rower as rrower
|
||||||
@@ -415,7 +422,7 @@ class SessionTaskListener(threading.Thread):
|
|||||||
for item in self.pubsub.listen():
|
for item in self.pubsub.listen():
|
||||||
if item['data'] == "KILL":
|
if item['data'] == "KILL":
|
||||||
self.pubsub.unsubscribe()
|
self.pubsub.unsubscribe()
|
||||||
print self, "unsubscribed and finished"
|
print(self, "unsubscribed and finished")
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.work(item)
|
self.work(item)
|
||||||
@@ -465,7 +472,7 @@ from rowers.interactiveplots import *
|
|||||||
from rowers.celery import result as celery_result
|
from rowers.celery import result as celery_result
|
||||||
|
|
||||||
# Define the API documentation
|
# Define the API documentation
|
||||||
schema_view = get_swagger_view(title='Rowsandall API')
|
#schema_view = get_swagger_view(title='Rowsandall API')
|
||||||
|
|
||||||
def remove_asynctask(request,id):
|
def remove_asynctask(request,id):
|
||||||
try:
|
try:
|
||||||
@@ -872,7 +879,7 @@ def rowhascoordinates(row):
|
|||||||
|
|
||||||
if not latitude.std():
|
if not latitude.std():
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
except KeyError,AttributeError:
|
except (KeyError,AttributeError):
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -886,10 +893,10 @@ def rowhascoordinates(row):
|
|||||||
def rdata(file,rower=rrower()):
|
def rdata(file,rower=rrower()):
|
||||||
try:
|
try:
|
||||||
res = rrdata(csvfile=file,rower=rower)
|
res = rrdata(csvfile=file,rower=rower)
|
||||||
except IOError, IndexError:
|
except (IOError, IndexError):
|
||||||
try:
|
try:
|
||||||
res = rrdata(csvfile=file+'.gz',rower=rower)
|
res = rrdata(csvfile=file+'.gz',rower=rower)
|
||||||
except IOError, IndexError:
|
except (IOError, IndexError):
|
||||||
res = 0
|
res = 0
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def start_trial_view(request):
|
def start_trial_view(request):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from statements import *
|
from rowers.views.statements import *
|
||||||
import rowers.teams as teams
|
import rowers.teams as teams
|
||||||
|
|
||||||
# Show the EMpower Oarlock generated Stroke Profile
|
# Show the EMpower Oarlock generated Stroke Profile
|
||||||
@@ -1516,7 +1516,7 @@ def workout_view(request,id=0):
|
|||||||
latitude = rowdata.df[' latitude']
|
latitude = rowdata.df[' latitude']
|
||||||
if not latitude.std():
|
if not latitude.std():
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
except KeyError,AttributeError:
|
except (KeyError,AttributeError):
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -2577,7 +2577,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
|
|||||||
'value': hrdrift,
|
'value': hrdrift,
|
||||||
'unit': '%',
|
'unit': '%',
|
||||||
}
|
}
|
||||||
except ZeroDivisionError,ValueError:
|
except (ZeroDivisionError,ValueError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# TRIMP
|
# TRIMP
|
||||||
@@ -3560,7 +3560,7 @@ def workout_map_view(request,id=0):
|
|||||||
latitude = rowdata.df[' latitude']
|
latitude = rowdata.df[' latitude']
|
||||||
if not latitude.std():
|
if not latitude.std():
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
except KeyError,AttributeError:
|
except (KeyError,AttributeError):
|
||||||
hascoordinates = 0
|
hascoordinates = 0
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -4796,7 +4796,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
s = cd["intervalstring"]
|
s = cd["intervalstring"]
|
||||||
try:
|
try:
|
||||||
rowdata.updateinterval_string(s)
|
rowdata.updateinterval_string(s)
|
||||||
except ParseException,err:
|
except (ParseException,err):
|
||||||
messages.error(request,'Parsing error in column '+str(err.col))
|
messages.error(request,'Parsing error in column '+str(err.col))
|
||||||
intervalstats = rowdata.allstats()
|
intervalstats = rowdata.allstats()
|
||||||
itime,idist,itype = rowdata.intervalstats_values()
|
itime,idist,itype = rowdata.intervalstats_values()
|
||||||
@@ -4877,7 +4877,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
s = request.POST["savestringform"]
|
s = request.POST["savestringform"]
|
||||||
try:
|
try:
|
||||||
rowdata.updateinterval_string(s)
|
rowdata.updateinterval_string(s)
|
||||||
except ParseException,err:
|
except (ParseException,err):
|
||||||
messages.error(request,'Parsing error in column '+str(err.col))
|
messages.error(request,'Parsing error in column '+str(err.col))
|
||||||
|
|
||||||
intervalstats = rowdata.allstats()
|
intervalstats = rowdata.allstats()
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals, absolute_import
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
from lxml import objectify,etree
|
from lxml import objectify,etree
|
||||||
|
|||||||
@@ -378,9 +378,11 @@ REST_FRAMEWORK = {
|
|||||||
'DEFAULT_AUTHENTICATION_CLASSES': (
|
'DEFAULT_AUTHENTICATION_CLASSES': (
|
||||||
'rest_framework.authentication.BasicAuthentication',
|
'rest_framework.authentication.BasicAuthentication',
|
||||||
'rest_framework.authentication.SessionAuthentication',
|
'rest_framework.authentication.SessionAuthentication',
|
||||||
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
|
# 'oauth2_provider.ext.rest_framework.OAuth2Authentication',
|
||||||
|
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
|
||||||
),
|
),
|
||||||
'PAGE_SIZE': 20,
|
'PAGE_SIZE': 20,
|
||||||
|
'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.LimitOffsetPagination',
|
||||||
}
|
}
|
||||||
|
|
||||||
SWAGGER_SETTINGS = {
|
SWAGGER_SETTINGS = {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ https://docs.djangoproject.com/en/1.9/topics/settings/
|
|||||||
For the full list of settings and their values, see
|
For the full list of settings and their values, see
|
||||||
https://docs.djangoproject.com/en/1.9/ref/settings/
|
https://docs.djangoproject.com/en/1.9/ref/settings/
|
||||||
"""
|
"""
|
||||||
from settings import *
|
from .settings import *
|
||||||
|
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ https://docs.djangoproject.com/en/1.9/ref/settings/
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from settings import *
|
from .settings import *
|
||||||
|
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
|
|||||||
+24
-12
@@ -35,19 +35,26 @@ handler500 = 'rowers.views.error500_view'
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url('^', include('django.contrib.auth.urls')),
|
url('^', include('django.contrib.auth.urls')),
|
||||||
url(r'^django-rq/',include('django_rq.urls')),
|
url(r'^django-rq/',include('django_rq.urls')),
|
||||||
url(r'^password_change_done/$',auth_views.password_change_done,name='password_change_done'),
|
# url(r'^password_change_done/$',auth_views.password_change_done,name='password_change_done'),
|
||||||
url(r'^password_change/$',auth_views.password_change),
|
url(r'^password_change_done/$',auth_views.PasswordChangeDoneView,name='password_change_done'),
|
||||||
|
# url(r'^password_change/$',auth_views.password_change),
|
||||||
|
url(r'^password_change/$',auth_views.PasswordChangeView,name='password_change'),
|
||||||
url(r'^password_reset/$',
|
url(r'^password_reset/$',
|
||||||
auth_views.password_reset,
|
# auth_views.password_reset,
|
||||||
|
auth_views.PasswordResetView,
|
||||||
{'template_name': 'rowers/templates/registration/password_reset.html'},
|
{'template_name': 'rowers/templates/registration/password_reset.html'},
|
||||||
name='password_reset'),
|
name='password_reset'),
|
||||||
url(r'^password_reset/done/$',
|
url(r'^password_reset/done/$',
|
||||||
auth_views.password_reset_done,
|
# auth_views.password_reset_done,
|
||||||
|
auth_views.PasswordResetDoneView,
|
||||||
name='password_reset_done'),
|
name='password_reset_done'),
|
||||||
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
|
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
|
||||||
auth_views.password_reset_confirm,
|
# auth_views.password_reset_confirm,
|
||||||
|
auth_views.PasswordResetConfirmView,
|
||||||
name='password_reset_confirm'),
|
name='password_reset_confirm'),
|
||||||
url(r'^reset/done/$', auth_views.password_reset_complete,
|
url(r'^reset/done/$',
|
||||||
|
# auth_views.password_reset_complete,
|
||||||
|
auth_views.PasswordResetCompleteView,
|
||||||
name='password_reset_complete'),
|
name='password_reset_complete'),
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -55,16 +62,21 @@ urlpatterns += [
|
|||||||
url(r'^robots\.txt$', TemplateView.as_view(template_name='robots.txt',
|
url(r'^robots\.txt$', TemplateView.as_view(template_name='robots.txt',
|
||||||
content_type='text/plain')),
|
content_type='text/plain')),
|
||||||
url(r'^admin/', admin.site.urls),
|
url(r'^admin/', admin.site.urls),
|
||||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework2')),
|
||||||
url(r'^$',rootview),
|
url(r'^$',rootview),
|
||||||
url(r'^getblogs/$',rowersviews.get_blog_posts),
|
url(r'^getblogs/$',rowersviews.get_blog_posts),
|
||||||
url(r'^login/',auth_views.login, name='login'),
|
url(r'^login/',
|
||||||
url(r'^logout/$',auth_views.logout,
|
# auth_views.login,
|
||||||
|
auth_views.LoginView,
|
||||||
|
name='login'),
|
||||||
|
url(r'^logout/$',
|
||||||
|
# auth_views.logout,
|
||||||
|
auth_views.LogoutView,
|
||||||
{'next_page': '/'},
|
{'next_page': '/'},
|
||||||
name='logout',),
|
name='logout',),
|
||||||
url(r'^rowers/',include('rowers.urls')),
|
url(r'^rowers/',include('rowers.urls')),
|
||||||
# url(r'^cvkbrno/',include('cvkbrno.urls')),
|
# url(r'^cvkbrno/',include('cvkbrno.urls')),
|
||||||
url(r'^admin/rq/',include('django_rq_dashboard.urls')),
|
# url(r'^admin/rq/',include('django_rq_dashboard.urls')),
|
||||||
url(r'^call\_back',rowersviews.rower_process_callback),
|
url(r'^call\_back',rowersviews.rower_process_callback),
|
||||||
url(r'^stravacall\_back',rowersviews.rower_process_stravacallback),
|
url(r'^stravacall\_back',rowersviews.rower_process_stravacallback),
|
||||||
url(r'^sporttracks\_callback',rowersviews.rower_process_sporttrackscallback),
|
url(r'^sporttracks\_callback',rowersviews.rower_process_sporttrackscallback),
|
||||||
@@ -75,7 +87,7 @@ urlpatterns += [
|
|||||||
url(r'^twitter\_callback',rowersviews.rower_process_twittercallback),
|
url(r'^twitter\_callback',rowersviews.rower_process_twittercallback),
|
||||||
url(r'^i18n/', include('django.conf.urls.i18n')),
|
url(r'^i18n/', include('django.conf.urls.i18n')),
|
||||||
url(r'^tz_detect/', include('tz_detect.urls')),
|
url(r'^tz_detect/', include('tz_detect.urls')),
|
||||||
url(r'^jsi18n/', 'django.views.i18n.javascript_catalog',name='jsi18n'),
|
# url(r'^jsi18n/', 'django.views.i18n.javascript_catalog',name='jsi18n'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -83,7 +95,7 @@ if settings.DEBUG:
|
|||||||
import debug_toolbar
|
import debug_toolbar
|
||||||
import django
|
import django
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
url(r'^__debug__/',include(debug_toolbar.urls)),
|
# url(r'^__debug__/','debug_toolbar.urls'),
|
||||||
url(r'^static/(?P<path>.*)$',
|
url(r'^static/(?P<path>.*)$',
|
||||||
django.views.static.serve,
|
django.views.static.serve,
|
||||||
kwargs={'document_root': settings.STATIC_ROOT,}
|
kwargs={'document_root': settings.STATIC_ROOT,}
|
||||||
|
|||||||
Reference in New Issue
Block a user