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:
authorRogelio Mita <rogeliomita@activitycentral.com>2013-06-07 22:13:06 (GMT)
committer Rogelio Mita <rogeliomita@activitycentral.com>2013-06-07 22:13:06 (GMT)
commitbddd22266d05799b48205ae7ce102369e0be3af4 (patch)
tree0ee8183f05ed306815323113e9cd9b5d7d5fca83 /webapp/polls/views.py
parent40999feb0c94c68fff3b827304fff2ec1a0a79ee (diff)
When a pollster upload poll's result files, it will be incremental way,
Diffstat (limited to 'webapp/polls/views.py')
-rw-r--r--webapp/polls/views.py80
1 files changed, 58 insertions, 22 deletions
diff --git a/webapp/polls/views.py b/webapp/polls/views.py
index c4a00e2..3487845 100644
--- a/webapp/polls/views.py
+++ b/webapp/polls/views.py
@@ -340,10 +340,29 @@ class UnploadPollResultFormView(TemplateView):
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'))
-
- # Validation: Partial files of same poll!
+ json_dst.seek(0)
+ to_json.append(json.load(json_dst, 'utf-8'))
+ file.seek(0)
+
+ 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)
+
+ if not len(files):
+ return self.render_to_response(context)
+
+ # Validation: Partial files must be from same poll!!!
fields_to_compare = ['poll_id', 'pollster_id', 'poll_type']
valid_data = {}
for to_compare in fields_to_compare:
@@ -360,6 +379,21 @@ class UnploadPollResultFormView(TemplateView):
self.request, messages.ERROR, msg)
return self.render_to_response(context)
+ 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)
+
poll_result = PollResult(to_json)
poll = poll_result.get_poll()
@@ -381,30 +415,32 @@ class UnploadPollResultFormView(TemplateView):
guardaron los resultados.'
messages.add_message(self.request, messages.ERROR, msg)
else:
-
poll = poll_result.get_poll()
poll.add_result(poll_result_id)
- if not os.path.exists(settings.RESULT_BCK_ROOT):
- os.mkdir(settings.RESULT_BCK_ROOT)
- os.chmod(settings.RESULT_BCK_ROOT, 0755)
-
- file_name = poll_result.get_abs_path()
- with open(file_name, 'wb+') as dst:
- dst.write(
- json.dumps(
- to_json,
- sort_keys=True,
- indent=4,
- separators=(',', ': ')
- )
- )
- dst.close()
-
+ poll_id = to_json[0].get("poll_id", None)
+ results_path = "%s/%s" % (
+ settings.RESULT_BCK_ROOT, poll_id)
+ try:
+ os.makedirs(results_path)
+ os.chmod(results_path, 0755)
+ except:
+ pass
+
+ for file in files:
+ file_path = "%s/%s" % (results_path, file.name)
+ with open(file_path, 'wb+') as dst:
+ for chunk in file.chunks():
+ dst.write(chunk)
+ dst.close()
+
+ processed_files = [file.name for file in files]
messages.add_message(
self.request,
messages.SUCCESS,
- u'Los resultados se guardaron con exito'
+ u'Los resultados se guardaron con exito.\
+ Los siguientes archivos fueron procesados: \
+ %s' % ", ".join(processed_files)
)
else: