From f6c8b556cff8bbc91d8a0731836293732034d17c Mon Sep 17 00:00:00 2001 From: ulysses Date: Mon, 27 Apr 2020 14:57:28 -0300 Subject: [PATCH] Generalizando tmp file para utils.py --- sapl/materia/views.py | 39 ++++++++++++++++++++------------------- sapl/utils.py | 6 +++++- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index fb0b91522..1fde3b190 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -56,7 +56,7 @@ from sapl.settings import MAX_DOC_UPLOAD_SIZE, MEDIA_ROOT from sapl.utils import (autor_label, autor_modal, gerar_hash_arquivo, get_base_url, get_client_ip, get_mime_type_from_file_extension, lista_anexados, mail_service_configured, montar_row_autor, SEPARADOR_HASH_PROPOSICAO, - show_results_filter_set, YES_NO_CHOICES) + show_results_filter_set, YES_NO_CHOICES,get_tempfile_dir) from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AnexadaEmLoteFilterSet, AdicionarVariasAutoriasFilterSet, @@ -2737,18 +2737,19 @@ def create_zip_docacessorios(materia): if not docs: return None, None - docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs if i.lower().endswith('pdf')] + docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs] + if not docs_path: - raise FileNotFoundError("Não há arquivos cadastrados em documentos acessorios.") + raise FileNotFoundError("Não há arquivos PDF cadastrados em documentos acessorios.") zipfilename = '{}/mat_{}_{}_docacessorios.zip'.format( - tempfile.gettempdir(), + get_tempfile_dir(), materia.pk, time.mktime(datetime.now().timetuple())) with zipfile.ZipFile(zipfilename, 'w', zipfile.ZIP_DEFLATED) as zipf: for f in docs_path: zipf.write(f, f.split(os.sep)[-1]) - external_name = "{}_{}_docacessorios.zip".format(materia.numero, materia.ano) + external_name = "mat_{}_{}_docacessorios.zip".format(materia.numero, materia.ano) return external_name, zipfilename @@ -2760,25 +2761,25 @@ def get_zip_docacessorios(request, pk): external_name, zipfilename = create_zip_docacessorios(materia) logger.info("user= {}. Gerou o zip compilado de documento acessorios") except FileNotFoundError: - logger.warning("user= {}.Não há arquivos cadastrados".format(username)) + logger.error("user= {}.Não há arquivos cadastrados".format(username)) msg=_('Não há arquivos cadastrados nesses documentos acessórios.') - messages.add_message(request, messages.WARNING, msg) + messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) except Exception as e: logger.error("user={}. Um erro inesperado ocorreu na criação do pdf de documentos acessorios: {}".format(username,str(e))) msg=_('Um erro inesperado ocorreu. Entre em contato com o suporte do SAPL.') - messages.add_message(request, messages.WARNING, msg) + messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) if not zipfilename: msg=_('Não há nenhum documento acessório cadastrado.') - messages.add_message(request, messages.WARNING, msg) + messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) - with open(os.path.join(tempfile.gettempdir(), zipfilename), 'rb') as f: + with open(os.path.join(get_tempfile_dir(), zipfilename), 'rb') as f: data = f.read() response = HttpResponse(data, content_type='application/zip') response['Content-Disposition'] = ('attachment; filename="%s"' @@ -2796,9 +2797,9 @@ def create_pdf_docacessorios(materia): # TODO: o que fazer com os arquivos não PDF? converter? ignorar? docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs if i.lower().endswith('pdf')] if not docs_path: - raise FileNotFoundError("Não há arquivos cadastrados em documentos acessorios.") + raise FileNotFoundError("Não há arquivos PDF cadastrados em documentos acessorios.") merged_pdf = '{}/mat_{}_{}_docacessorios.pdf'.format( - tempfile.gettempdir(), + get_tempfile_dir(), materia.pk, time.mktime(datetime.now().timetuple())) @@ -2808,7 +2809,7 @@ def create_pdf_docacessorios(materia): merger.write(fileobj=open(merged_pdf, "wb")) merger.close() - external_name = "{}_{}_docacessorios.pdf".format(materia.numero, materia.ano) + external_name = "mat_{}_{}_docacessorios.pdf".format(materia.numero, materia.ano) return external_name, merged_pdf @@ -2820,25 +2821,25 @@ def get_pdf_docacessorios(request, pk): external_name, pdffilename = create_pdf_docacessorios(materia) logger.info("user= {}. Gerou o pdf compilado de documento acessorios") except FileNotFoundError: - logger.warning("user= {}.Não há arquivos cadastrados".format(username)) + logger.error("user= {}.Não há arquivos cadastrados".format(username)) msg=_('Não há arquivos cadastrados nesses documentos acessórios.') - messages.add_message(request, messages.WARNING, msg) + messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) except Exception as e: logger.error("user= {}.Um erro inesperado ocorreu na criação do pdf de documentos acessorios: {}".format(username,str(e))) msg=_('Um erro inesperado ocorreu. Entre em contato com o suporte do SAPL.') - messages.add_message(request, messages.WARNING, msg) + messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) if not pdffilename: - msg=_('Não há nenhum documento acessório cadastrado.') - messages.add_message(request, messages.WARNING, msg) + msg=_('Não há nenhum documento acessório PDF cadastrado.') + messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) - with open(os.path.join(tempfile.gettempdir(), pdffilename), 'rb') as f: + with open(os.path.join(get_tempfile_dir(), pdffilename), 'rb') as f: data = f.read() response = HttpResponse(data, content_type='application/pdf') response['Content-Disposition'] = ('attachment; filename="%s"' diff --git a/sapl/utils.py b/sapl/utils.py index ded879806..da74e086b 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -7,7 +7,8 @@ import magic import os import re import unicodedata - +import platform +import tempfile from crispy_forms.layout import Button, HTML from easy_thumbnails import source_generators from floppyforms import ClearableFileInput @@ -1061,3 +1062,6 @@ class OverwriteStorage(FileSystemStorage): if self.exists(name): os.remove(os.path.join(settings.MEDIA_ROOT, name)) return name + +def get_tempfile_dir(): + return '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()