Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/webapp/polls/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/polls/views.py')
-rw-r--r--webapp/polls/views.py154
1 files changed, 59 insertions, 95 deletions
diff --git a/webapp/polls/views.py b/webapp/polls/views.py
index c19eac1..526cabc 100644
--- a/webapp/polls/views.py
+++ b/webapp/polls/views.py
@@ -1,7 +1,6 @@
+# pylint: disable=C0111
# -*- encoding: utf-8 -*-
import os
-import json
-import StringIO
import warnings
from importlib import import_module
@@ -23,11 +22,9 @@ from django.conf import settings
from utils.forms import BadFormValidation
from utils.data_structure import dict_merge
-from polls.models import (WIDGET_TYPES, Structure, Poll, PollResult,
- PollResultFile)
+from polls.models import (WIDGET_TYPES, Structure, Poll, PollResultFile)
from polls.models import is_image_file
from polls.forms import PollForm
-from pollster.models import Pollster
module_path = settings.CLOCK_CLASS.split('.')[:-1]
@@ -357,102 +354,69 @@ class UnploadPollResultFormView(TemplateView):
template_name = "poll-result-form.html"
- def post(self, request, *args, **kwargs):
+ def post(self, request, *args, **kwargs): # pylint: disable=W0613
context = self.get_context_data()
+ user = request.user
files = dict(request.FILES.lists()).get('result', [])
- # si se subió algún archivo:
- if len(files):
- # Esto hace todo
-
- to_json = []
-
- # genera una lista de dict python en to_json
- for file in files:
- json_dst = StringIO.StringIO()
- for chunk in file.chunks():
- json_dst.write(chunk)
- json_dst.seek(0)
- to_json.append(json.load(json_dst, 'utf-8'))
- file.seek(0)
-
- # comprueba si los archivos ya existían y los excluye
- poll_id = to_json[0].get("poll_id", None)
- results_path = "%s/%s" % (settings.RESULT_BCK_ROOT, poll_id)
- uploaded_files = []
- for index, file in enumerate(files):
- file_path = "%s/%s" % (results_path, file.name)
- if os.path.exists(file_path):
- uploaded_files.append(file.name)
- del files[index]
-
- if len(uploaded_files):
- msg = u'Los siguientes resultados ya se encuentran \
- publicados: %s y no serán procesados.' % (
- ", ".join(uploaded_files))
- messages.add_message(self.request, messages.INFO, msg)
-
- # si no hay más archivos, vuelve al usuario
- if not len(files):
- return self.render_to_response(context)
-
- # revisa si el primero de los archivos es del usuario actual
- # si no, vuelve al usuario
- if len(to_json):
- pollster_id = to_json[0].get("pollster_id", None)
- if str(request.user.pollster.id) != pollster_id:
- pollster_username = to_json[0].get(
- "pollster_username", None)
- if not pollster_username:
- pollster_username = "Desconocido!"
- msg = u'El sistema cree que este archivo resultado \
- no pertence a una encuesta realizada por usted. \
- Asegúrese de estar usando el mismo usuario que \
- utilizó para descargar este modelo de encuesta. \
- Usuario esperado: %s.' % pollster_username
- messages.add_message(request, messages.ERROR, msg)
- return self.render_to_response(context)
-
- # crea un poll result con todos los archivos implicados
- poll_result = PollResult(to_json)
-
- poll = poll_result.get_poll()
- pollster = Pollster.get_by_user_id(request.user.id)
-
- # valida que el pollster esté asignado a la poll en cuestión
- assigned_polls_id = [
- p.id for p in poll.assigned_to_pollster(pollster)]
-
- if poll.id not in assigned_polls_id:
- msg = u'Estos son resultados de una encuesta \
- que no le fué asignada.'
+ if not len(files):
+ msg = u'Necesita seleccionar un archivo.'
+ messages.add_message(self.request, messages.INFO, msg)
+
+ processed_files = []
+ existing = []
+ not_authored_by_user = []
+ poll_not_assigned_to_user = []
+
+ date_time_string = Clock.get_time_string()
+ for file_ in files:
+ file_name = file_.name
+ tmp_file_path = file_.temporary_file_path()
+ try:
+ prf = PollResultFile(tmp_file_path)
+ if prf.exists():
+ existing.append(file_name)
+ elif not prf.is_authored_by(user):
+ not_authored_by_user.append(file_name)
+ elif not prf.poll_is_assigned_to(user):
+ poll_not_assigned_to_user.append(file_name)
+ else:
+ prf.name = file_name
+ prf.set_upload_timestamp(date_time_string)
+ prf.save()
+ processed_files.append(file_name)
+ except ValueError:
+ fname = file_.name
+ msg = u'{0}: No es un .poll_result válido.'.format(fname)
messages.add_message(self.request, messages.ERROR, msg)
- else:
- # End validations
-
- date_time_string = Clock.get_time_string()
- uploaded_files = [
- (f.name, f.temporary_file_path()) for f in files
- ]
- for name, path in uploaded_files:
- result_file = PollResultFile(path)
- result_file.name = name
- result_file.set_upload_timestamp(date_time_string)
- result_file.save()
-
- processed_files = [file.name for file in files]
- messages.add_message(
- self.request,
- messages.SUCCESS,
- u'Los resultados se guardaron con éxito.\
- Los siguientes archivos fueron procesados: \
- %s' % ", ".join(processed_files)
- )
- # si no hay ningún archivo
- else:
- msg = u'Necesita seleccionar un archivo.'
+ if len(existing):
+ msg = u'Los siguientes resultados ya se encuentran \
+ publicados: %s y no serán procesados.' % (", ".join(existing))
messages.add_message(self.request, messages.INFO, msg)
+ if len(not_authored_by_user):
+ msg = u'El sistema cree que estos archivos no pertencen a una \
+ encuesta realizada por usted: {0}'.format(
+ ", ".join(not_authored_by_user)
+ )
+ messages.add_message(request, messages.ERROR, msg)
+
+ if len(poll_not_assigned_to_user):
+ msg = u'Estos son resultados de una encuesta \
+ que no le fué asignada. {0}'.format(
+ ", ".join(poll_not_assigned_to_user)
+ )
+ messages.add_message(self.request, messages.ERROR, msg)
+
+ if len(processed_files):
+ messages.add_message(
+ self.request,
+ messages.SUCCESS,
+ u'Los resultados se guardaron con éxito.\
+ Los siguientes archivos fueron procesados: \
+ %s' % ", ".join(processed_files)
+ )
+
return self.render_to_response(context)