diff options
author | Rogelio Mita <rogeliomita@activitycentral.com> | 2013-06-07 22:13:06 (GMT) |
---|---|---|
committer | Rogelio Mita <rogeliomita@activitycentral.com> | 2013-06-07 22:13:06 (GMT) |
commit | bddd22266d05799b48205ae7ce102369e0be3af4 (patch) | |
tree | 0ee8183f05ed306815323113e9cd9b5d7d5fca83 /webapp/polls/views.py | |
parent | 40999feb0c94c68fff3b827304fff2ec1a0a79ee (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.py | 80 |
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: |