Browse Source

Generalizando tmp file para utils.py

pull/3139/head
ulysses 6 years ago
parent
commit
f6c8b556cf
  1. 39
      sapl/materia/views.py
  2. 6
      sapl/utils.py

39
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"'

6
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()

Loading…
Cancel
Save