Private
Public Access
1
0

cleaned up processemail

This commit is contained in:
Sander Roosendaal
2017-10-22 11:49:47 +02:00
parent e541289066
commit a866b253a1
2 changed files with 202 additions and 205 deletions

View File

@@ -30,6 +30,8 @@ queuelow = django_rq.get_queue('low')
queuehigh = django_rq.get_queue('default') queuehigh = django_rq.get_queue('default')
# Sends a confirmation with a link to the workout # Sends a confirmation with a link to the workout
def send_confirm(u, name, link, options): def send_confirm(u, name, link, options):
fullemail = u.email fullemail = u.email
subject = 'Workout added: ' + name subject = 'Workout added: ' + name
@@ -41,7 +43,6 @@ def send_confirm(u,name,link,options):
if options: if options:
message += "\n\n" + str(options) message += "\n\n" + str(options)
email = EmailMessage(subject, message, email = EmailMessage(subject, message,
'Rowsandall <info@rowsandall.com>', 'Rowsandall <info@rowsandall.com>',
[fullemail]) [fullemail])
@@ -51,6 +52,8 @@ def send_confirm(u,name,link,options):
return 1 return 1
# Reads a "rowingdata" object, plus some error protections # Reads a "rowingdata" object, plus some error protections
def rdata(file, rower=rrower()): def rdata(file, rower=rrower()):
try: try:
res = rrdata(file, rower=rower) res = rrdata(file, rower=rower)
@@ -63,6 +66,8 @@ def rdata(file,rower=rrower()):
return res return res
# Some error protection around process attachments # Some error protection around process attachments
def safeprocessattachments(): def safeprocessattachments():
try: try:
return processattachments() return processattachments()
@@ -72,6 +77,8 @@ def safeprocessattachments():
# This is duplicated in management/commands/processemail # This is duplicated in management/commands/processemail
# Need to double check the code there, update here, and only # Need to double check the code there, update here, and only
# use the code here. # use the code here.
def processattachments(): def processattachments():
# in res, we store the ids of the new workouts # in res, we store the ids of the new workouts
res = [] res = []
@@ -91,7 +98,8 @@ def processattachments():
try: try:
wid = [make_new_workout_from_email(rr, a.document, name)] wid = [make_new_workout_from_email(rr, a.document, name)]
res += wid res += wid
link = 'https://rowsandall.com/rowers/workout/'+str(wid[0])+'/edit' link = 'https://rowsandall.com/rowers/workout/' + \
str(wid[0]) + '/edit'
if wid != 1: if wid != 1:
dd = send_confirm(u, name, link) dd = send_confirm(u, name, link)
except: except:
@@ -101,7 +109,6 @@ def processattachments():
except Rower.DoesNotExist: except Rower.DoesNotExist:
pass pass
# remove attachment # remove attachment
if donotdelete == 0: if donotdelete == 0:
a.delete() a.delete()
@@ -119,6 +126,8 @@ def processattachments():
return res return res
# As above, but with some print commands for debugging purposes # As above, but with some print commands for debugging purposes
def processattachments_debug(): def processattachments_debug():
res = [] res = []
attachments = MessageAttachment.objects.all() attachments = MessageAttachment.objects.all()
@@ -143,12 +152,11 @@ def processattachments_debug():
print name print name
wid = [make_new_workout_from_email(rr, a.document, name)] wid = [make_new_workout_from_email(rr, a.document, name)]
res += wid res += wid
link = 'https://rowsandall.com/rowers/workout/'+str(wid[0])+'/edit' link = 'https://rowsandall.com/rowers/workout/' + \
str(wid[0]) + '/edit'
if wid != 1: if wid != 1:
dd = send_confirm(u, name, link) dd = send_confirm(u, name, link)
# remove attachment # remove attachment
if donotdelete == 0: if donotdelete == 0:
a.delete() a.delete()
@@ -167,6 +175,8 @@ def processattachments_debug():
# Process the attachment file, create new workout # Process the attachment file, create new workout
# The code here is duplication of the code in views.py (workout_upload_view) # The code here is duplication of the code in views.py (workout_upload_view)
# Need to move the code to a subroutine used both in views.py and here # Need to move the code to a subroutine used both in views.py and here
def make_new_workout_from_email(rr, f2, name, cntr=0): def make_new_workout_from_email(rr, f2, name, cntr=0):
workouttype = 'rower' workouttype = 'rower'
@@ -199,15 +209,13 @@ def make_new_workout_from_email(rr,f2,name,cntr=0):
summary = '' summary = ''
# handle non-Painsled # handle non-Painsled
if fileformat != 'csv': if fileformat != 'csv':
f3,summary,oarlength,inboard = dataprep.handle_nonpainsled('media/'+f2,fileformat,summary) f3, summary, oarlength, inboard = dataprep.handle_nonpainsled(
'media/' + f2, fileformat, summary)
else: else:
f3 = 'media/' + f2 f3 = 'media/' + f2
inboard = 0.88 inboard = 0.88
oarlength = 2.89 oarlength = 2.89
# make workout and put in database # make workout and put in database
# r = rrower(hrmax=rr.max,hrut2=rr.ut2, # r = rrower(hrmax=rr.max,hrut2=rr.ut2,
# hrut1=rr.ut1,hrat=rr.at, # hrut1=rr.ut1,hrat=rr.at,
@@ -216,7 +224,6 @@ def make_new_workout_from_email(rr,f2,name,cntr=0):
if row == 0: if row == 0:
return 0 return 0
# change filename # change filename
if f2[:5] != 'media': if f2[:5] != 'media':
timestr = time.strftime("%Y%m%d-%H%M%S") timestr = time.strftime("%Y%m%d-%H%M%S")
@@ -245,9 +252,4 @@ def make_new_workout_from_email(rr,f2,name,cntr=0):
workoutsource=fileformat, workoutsource=fileformat,
notes='imported through email') notes='imported through email')
return id return id

View File

@@ -1,39 +1,35 @@
#!/srv/venv/bin/python #!/srv/venv/bin/python
""" Process emails """
import sys import sys
import os import os
import zipfile
from django.core.management.base import BaseCommand
import time
from time import strftime
from django.conf import settings
from django_mailbox.models import Message, MessageAttachment
from rowers.models import Workout, Rower
from rowingdata import rower as rrower
from rowingdata import rowingdata as rrdata
from rowers.mailprocessing import make_new_workout_from_email, send_confirm
import rowers.uploads as uploads
# If you find a solution that does not need the two paths, please comment! # If you find a solution that does not need the two paths, please comment!
sys.path.append('$path_to_root_of_project$') sys.path.append('$path_to_root_of_project$')
sys.path.append('$path_to_root_of_project$/$project_name$') sys.path.append('$path_to_root_of_project$/$project_name$')
os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings'
import zipfile
from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
#from rowers.mailprocessing import processattachments
import time
from time import strftime
from django.conf import settings
from rowers.tasks import handle_sendemail_unrecognized
from django_mailbox.models import Mailbox,Message,MessageAttachment
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage,AdvancedWorkoutForm
from django.core.files.base import ContentFile
from rowsandall_app.settings import BASE_DIR
from rowingdata import rower as rrower
from rowingdata import main as rmain
from rowingdata import rowingdata as rrdata
from rowingdata import make_cumvalues
from rowingdata import summarydata,get_file_type
from scipy.signal import savgol_filter
from rowers.mailprocessing import make_new_workout_from_email,send_confirm
import rowers.uploads as uploads
def rdata(file, rower=rrower()): def rdata(file, rower=rrower()):
""" Read rowing data file and return 0 if file doesn't exist"""
try: try:
res = rrdata(file, rower=rower) res = rrdata(file, rower=rower)
except IOError: except IOError:
@@ -42,8 +38,8 @@ def rdata(file,rower=rrower()):
return res return res
class Command(BaseCommand): class Command(BaseCommand):
"""Run the Email processing command """
def handle(self, *args, **options): def handle(self, *args, **options):
res = [] res = []
attachments = MessageAttachment.objects.all() attachments = MessageAttachment.objects.all()
@@ -72,7 +68,8 @@ class Command(BaseCommand):
make_new_workout_from_email(rr, f2[6:], title) make_new_workout_from_email(rr, f2[6:], title)
] ]
res += wid res += wid
link = 'http://rowsandall.com/rowers/workout/'+str(wid[0])+'/edit' link = 'http://rowsandall.com/rowers/workout/' + \
str(wid[0]) + '/edit'
if uploadoptions and not 'error' in uploadoptions: if uploadoptions and not 'error' in uploadoptions:
w = Workout.objects.get(id=wid[0]) w = Workout.objects.get(id=wid[0])
r = w.user r = w.user
@@ -110,7 +107,8 @@ class Command(BaseCommand):
name) name)
] ]
res += wid res += wid
link = 'http://rowsandall.com/rowers/workout/'+str(wid[0])+'/edit' link = 'http://rowsandall.com/rowers/workout/' + \
str(wid[0]) + '/edit'
if uploadoptions: if uploadoptions:
w = Workout.objects.get(id=wid[0]) w = Workout.objects.get(id=wid[0])
r = w.user r = w.user
@@ -146,17 +144,14 @@ class Command(BaseCommand):
# remove attachment # remove attachment
# if donotdelete == 0: # if donotdelete == 0:
if m.attachments.exists()==False: if m.attachments.exists() is False:
# no attachments, so can be deleted # no attachments, so can be deleted
m.delete() m.delete()
mm = Message.objects.all() mm = Message.objects.all()
for m in mm: for m in mm:
if m.attachments.exists()==False: if m.attachments.exists() is False:
m.delete() m.delete()
self.stdout.write(self.style.SUCCESS('Successfully processed email attachments')) self.stdout.write(self.style.SUCCESS(
'Successfully processed email attachments'))