diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py
index b091a19e..5371e3d1 100644
--- a/rowers/management/commands/processemail.py
+++ b/rowers/management/commands/processemail.py
@@ -9,6 +9,7 @@ import zipfile
from zipfile import BadZipFile
import re
import time
+import traceback
from time import strftime
import requests
@@ -192,26 +193,48 @@ class Command(BaseCommand):
failedmailbox = Mailbox.objects.get(name='Failed')
# Polar
- polar_available = polarstuff.get_polar_notifications()
- res = polarstuff.get_all_new_workouts(polar_available)
+ try:
+ polar_available = polarstuff.get_polar_notifications()
+ res = polarstuff.get_all_new_workouts(polar_available)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
+ dologging('processemail.log',''.join('!! ' + line for line in lines))
# Concept2
- rowers = Rower.objects.filter(c2_auto_import=True)
- for r in rowers: # pragma: no cover
- if user_is_not_basic(r.user):
- c2stuff.get_c2_workouts(r)
+ try:
+ rowers = Rower.objects.filter(c2_auto_import=True)
+ for r in rowers: # pragma: no cover
+ if user_is_not_basic(r.user):
+ c2stuff.get_c2_workouts(r)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
+ dologging('processemail.log',''.join('!! ' + line for line in lines))
- rowers = Rower.objects.filter(rp3_auto_import=True)
- for r in rowers: # pragma: no cover
- if user_is_not_basic(r.user):
- res = rp3stuff.get_rp3_workouts(r)
- rowers = Rower.objects.filter(nk_auto_import=True)
- for r in rowers: # pragma: no cover
- if user_is_not_basic(r.user):
- s = 'Starting NK Auto Import for user {id}'.format(id=r.user.id)
- dologging('nklog.log',s)
- res = nkstuff.get_nk_workouts(r)
+ try:
+ rowers = Rower.objects.filter(rp3_auto_import=True)
+ for r in rowers: # pragma: no cover
+ if user_is_not_basic(r.user):
+ res = rp3stuff.get_rp3_workouts(r)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
+ dologging('processemail.log',''.join('!! ' + line for line in lines))
+
+ try:
+ rowers = Rower.objects.filter(nk_auto_import=True)
+ for r in rowers: # pragma: no cover
+ if user_is_not_basic(r.user):
+ s = 'Starting NK Auto Import for user {id}'.format(id=r.user.id)
+ dologging('nklog.log',s)
+ res = nkstuff.get_nk_workouts(r)
+ except:
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
+ dologging('processemail.log',''.join('!! ' + line for line in lines))
+
messages = Message.objects.filter(mailbox_id = workoutmailbox.id)
message_ids = [m.id for m in messages]
diff --git a/rowers/models.py b/rowers/models.py
index cef1bece..e338b52e 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -904,6 +904,9 @@ class Rower(models.Model):
getimportantemails = models.BooleanField(default=True,
verbose_name='Get Important Emails')
+ share_course_results = models.BooleanField(default=True,
+ verbose_name = 'Share Course Results')
+
sex = models.CharField(default="not specified",
max_length=30,
@@ -4259,6 +4262,7 @@ class AccountRowerForm(ModelForm):
'adaptiveclass',
'getemailnotifications',
'getimportantemails',
+ 'share_course_results',
'defaulttimezone','showfavoritechartnotes',
'fav_analysis',
'usersmooth',
diff --git a/rowers/rp3stuff.py b/rowers/rp3stuff.py
index 57cb8387..492220ce 100644
--- a/rowers/rp3stuff.py
+++ b/rowers/rp3stuff.py
@@ -137,7 +137,8 @@ def get_rp3_workouts(rower,do_async=True): # pragma: no cover
if (res.status_code != 200):
return 0
- dologging('rp3_import.log',res.json())
+ s = '{d}'.format(d=res.json())
+ dologging('rp3_import.log',s)
workouts_list = pd.json_normalize(res.json()['data']['workouts'])
try:
rp3ids = workouts_list['id'].values
diff --git a/rowers/tasks.py b/rowers/tasks.py
index e48830c6..dd10c722 100644
--- a/rowers/tasks.py
+++ b/rowers/tasks.py
@@ -515,7 +515,6 @@ def handle_check_race_course(self,
logfile = 'courselog_{workoutid}_{courseid}.log'.format(workoutid=workoutid,courseid=courseid)
-
if 'debug' in kwargs: # pragma: no cover
debug = kwargs['debug']
else:
@@ -544,6 +543,10 @@ def handle_check_race_course(self,
if 'summary' in kwargs:
summary = kwargs['summary']
+ successemail = False
+ if 'successemail' in kwargs:
+ successemail = kwargs['successemail']
+
columns = ['time',' latitude',' longitude','cum_dist']
try:
@@ -742,7 +745,6 @@ def handle_check_race_course(self,
result = conn.execute(query)
if summary:
-
try:
row = rdata(csvfile=f1)
except IOError: # pragma: no cover
@@ -771,6 +773,11 @@ def handle_check_race_course(self,
conn.close()
engine.dispose()
+ if successemail:
+ handle_sendemail_coursesucceed(
+ useremail, userfirstname, logfile, workoutid
+ )
+
os.remove(logfile)
return 1
@@ -825,6 +832,8 @@ def handle_check_race_course(self,
return 2
+
+
return 0 # pragma: no cover
@@ -1463,6 +1472,32 @@ def handle_sendemail_raceregistration(
return 1
+def handle_sendemail_coursesucceed(
+ useremail, username, logfile, workoutid, **kwargs
+):
+ if 'debug' in kwargs: # pragma: no cover
+ debug = kwargs['debug']
+ else:
+ debug = True
+
+ subject = "The validation of your course has succeeded"
+
+ from_email = 'Rowsandall
Filter Results
+ {% if onlyme %} + All Results + {% else %} + Only My Results + {% endif %} +