From c974927192fc9dece807eba4bcf835a1daf127fc Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 2 Nov 2017 15:53:54 +0100 Subject: [PATCH] processes files > 1 MB offline --- rowers/dataprep.py | 19 +++---- rowers/forms.py | 9 +++- rowers/templates/document_form.html | 29 ++++++++++- rowers/templates/team_document_form.html | 27 ++++++++++ rowers/views.py | 66 +++++++++++++++++++----- templates/basebase.html | 8 +-- 6 files changed, 129 insertions(+), 29 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index d583c73d..b7efd793 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -53,7 +53,7 @@ import sys import utils import datautils -from utils import lbstoN +from utils import lbstoN,myqueue from timezonefinder import TimezoneFinder @@ -975,17 +975,12 @@ def new_workout_from_file(r, f2, if len(fileformat) == 3 and fileformat[0] == 'zip': f_to_be_deleted = f2 title = os.path.basename(f2) - if settings.DEBUG: - res = handle_zip_file.delay( - r.user.email, title, f2 - ) - - else: - res = queuelow.enqueue( - handle_zip_file, - r.user.email, - title, - f2 + res = myqueue( + queuelow, + handle_zip_file, + r.user.email, + title, + f2 ) return -1, message, f2 diff --git a/rowers/forms.py b/rowers/forms.py index 4923a517..f2f40d1f 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -57,8 +57,15 @@ class DocumentsForm(forms.Form): notes = forms.CharField(required=False, widget=forms.Textarea) + offline = forms.BooleanField(initial=False,required=False, + label='Process in Background') class Meta: - fields = ['title','file','workouttype','fileformat'] + fields = ['title','file','workouttype','fileformat','offline'] + + def __init__(self, *args, **kwargs): + from django.forms.widgets import HiddenInput + super(DocumentsForm, self).__init__(*args, **kwargs) + self.fields['offline'].widget = HiddenInput() from utils import ( workflowleftpanel,workflowmiddlepanel, diff --git a/rowers/templates/document_form.html b/rowers/templates/document_form.html index 3f065765..53c88b5d 100644 --- a/rowers/templates/document_form.html +++ b/rowers/templates/document_form.html @@ -4,8 +4,35 @@ {% block title %}File loading{% endblock %} +{% block meta %} + + + +{% endblock %} + {% block content %} -
+

Upload Workout File

{% if user.is_authenticated and user|is_manager %} diff --git a/rowers/templates/team_document_form.html b/rowers/templates/team_document_form.html index aadc4f9e..37fc6a0a 100644 --- a/rowers/templates/team_document_form.html +++ b/rowers/templates/team_document_form.html @@ -3,6 +3,33 @@ {% block title %}File loading{% endblock %} +{% block meta %} + + + +{% endblock %} + {% block content %}
diff --git a/rowers/views.py b/rowers/views.py index 17f9ba5f..af5609da 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -101,7 +101,8 @@ from rowers.tasks import handle_makeplot,handle_otwsetpower,handle_sendemailtcx, from rowers.tasks import ( handle_sendemail_unrecognized,handle_sendemailnewcomment, handle_sendemailnewresponse, handle_updatedps, - handle_updatecp,long_test_task,long_test_task2 + handle_updatecp,long_test_task,long_test_task2, + handle_zip_file ) from scipy.signal import savgol_filter @@ -8244,6 +8245,7 @@ def workout_upload_view(request, } notes = form.cleaned_data['notes'] + offline = form.cleaned_data['offline'] if optionsform.is_valid(): make_plot = optionsform.cleaned_data['make_plot'] @@ -8276,12 +8278,29 @@ def workout_upload_view(request, f1 = res[0] # file name f2 = res[1] # file name incl media directory - - id,message,f2 = dataprep.new_workout_from_file(r,f2, - workouttype=workouttype, - makeprivate=makeprivate, - title = t, - notes='') + if not offline: + id,message,f2 = dataprep.new_workout_from_file( + r,f2, + workouttype=workouttype, + makeprivate=makeprivate, + title = t, + notes='' + ) + else: + job = myqueue( + queuehigh, + handle_zip_file, + r.user.email, + t, + f2) + + messages.info( + request, + "The file was too large to process in real time. It will be processed in a background process. You will receive an email when it is ready") + url = reverse(workout_upload_view) + response = HttpResponseRedirect(url) + return response + if not id: messages.error(request,message) url = reverse(workout_upload_view) @@ -8450,6 +8469,7 @@ def team_workout_upload_view(request,message="", f = request.FILES['file'] res = handle_uploaded_file(f) t = form.cleaned_data['title'] + offline = form.cleaned_data['offline'] if rowerform.is_valid(): u = rowerform.cleaned_data['user'] if u: @@ -8490,11 +8510,33 @@ def team_workout_upload_view(request,message="", f2 = res[1] # file name incl media directory - id,message,f2 = dataprep.new_workout_from_file(r,f2, - workouttype=workouttype, - makeprivate=False, - title = t, - notes='') + if not offline: + id,message,f2 = dataprep.new_workout_from_file( + r,f2, + workouttype=workouttype, + makeprivate=False, + title = t, + notes='' + ) + else: + job = myqueue( + queuehigh, + handle_zip_file, + r.user.email, + t, + f2) + + messages.info( + request, + "The file was too large to process in real time. It will be processed in a background process. The user will receive an email when it is ready" + ) + + + url = reverse(team_workout_upload_view) + response = HttpResponseRedirect(url) + return response + + if not id: messages.error(request,message) url = reverse(team_workout_upload_view) diff --git a/templates/basebase.html b/templates/basebase.html index 6fe7b455..f3ca6ebb 100644 --- a/templates/basebase.html +++ b/templates/basebase.html @@ -226,7 +226,7 @@ var current = null;
-
+
{% if messages %} {% for message in messages %} {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %} @@ -241,14 +241,16 @@ var current = null; {% block message %} {% if message %}

- {{ message }} + {{ message }}

{% endif %} {% if successmessage %}

- {{ successmessage }} + {{ successmessage }}

{% endif %} +
+
{% endblock %}