Browse Source

Subido algumas recomendações(logs, exceptions, localização de imports)

pull/3139/head
ulysses 6 years ago
parent
commit
024c8ad859
  1. 62
      sapl/materia/views.py

62
sapl/materia/views.py

@ -6,11 +6,15 @@ import sapl
import shutil import shutil
import tempfile import tempfile
import weasyprint import weasyprint
import time
from crispy_forms.layout import HTML from crispy_forms.layout import HTML
from datetime import datetime from datetime import datetime
from random import choice from random import choice
from string import ascii_letters, digits from string import ascii_letters, digits
from datetime import datetime
from PyPDF4 import PdfFileReader, PdfFileMerger
import zipfile
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
@ -2727,34 +2731,37 @@ class TipoMateriaCrud(CrudAux):
return fv return fv
def create_zip_docacessorios(mat_pk): def create_zip_docacessorios(materia):
import os
import time
import zipfile
from datetime import datetime
from sapl.settings import MEDIA_ROOT
materia = MateriaLegislativa.objects.get(id=mat_pk)
docs = materia.documentoacessorio_set.\ docs = materia.documentoacessorio_set.\
all().values_list('arquivo', flat=True) all().values_list('arquivo', flat=True)
if not docs: if not docs:
return None, None return None, None
docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs] docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs]
zipfilename = '/tmp/mat_{}_{}.zip'.format( zipfilename = '/tmp/mat_{}_{}_docacessorios.zip'.format(
mat_pk, materia.pk,
time.mktime(datetime.now().timetuple())) time.mktime(datetime.now().timetuple()))
with zipfile.ZipFile(zipfilename, 'w', zipfile.ZIP_DEFLATED) as zipf: with zipfile.ZipFile(zipfilename, 'w', zipfile.ZIP_DEFLATED) as zipf:
for f in docs_path: for f in docs_path:
zipf.write(f, f.split(os.sep)[-1]) zipf.write(f, f.split(os.sep)[-1])
external_name = "{}_{}.zip".format(materia.numero, materia.ano) external_name = "{}_{}_docacessorios.zip".format(materia.numero, materia.ano)
return external_name, zipfilename return external_name, zipfilename
def get_zip_docacessorios(request, pk): def get_zip_docacessorios(request, pk):
import os logger = logging.getLogger(__name__)
external_name, zipfilename = create_zip_docacessorios(pk) username = request.user.username
materia = get_object_or_404(MateriaLegislativa, pk=pk)
try:
external_name, zipfilename = create_zip_docacessorios(materia)
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)
return redirect(reverse('sapl.materia:documentoacessorio_list',
kwargs={'pk': pk}))
if not zipfilename: if not zipfilename:
msg=_('Não há nenhum documento acessório cadastrado.') msg=_('Não há nenhum documento acessório cadastrado.')
messages.add_message(request, messages.WARNING, msg) messages.add_message(request, messages.WARNING, msg)
@ -2769,14 +2776,7 @@ def get_zip_docacessorios(request, pk):
return response return response
def create_pdf_docacessorios(mat_pk): def create_pdf_docacessorios(materia):
import os
import time
from datetime import datetime
from sapl.settings import MEDIA_ROOT
from PyPDF4 import PdfFileReader, PdfFileMerger
materia = MateriaLegislativa.objects.get(id=mat_pk)
docs = materia.documentoacessorio_set. \ docs = materia.documentoacessorio_set. \
all().values_list('arquivo', flat=True) all().values_list('arquivo', flat=True)
if not docs: if not docs:
@ -2785,8 +2785,8 @@ def create_pdf_docacessorios(mat_pk):
# TODO: o for-comprehension abaixo filtra os arquivos não PDF. # TODO: o for-comprehension abaixo filtra os arquivos não PDF.
# TODO: o que fazer com os arquivos não PDF? converter? ignorar? # 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')] docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs if i.lower().endswith('pdf')]
merged_pdf = '/tmp/mat_{}_{}.pdf'.format( merged_pdf = '/tmp/mat_{}_{}_docacessorios.pdf'.format(
mat_pk, materia.pk,
time.mktime(datetime.now().timetuple())) time.mktime(datetime.now().timetuple()))
merger = PdfFileMerger() merger = PdfFileMerger()
@ -2795,13 +2795,23 @@ def create_pdf_docacessorios(mat_pk):
merger.write(fileobj=open(merged_pdf, "wb")) merger.write(fileobj=open(merged_pdf, "wb"))
merger.close() merger.close()
external_name = "{}_{}.pdf".format(materia.numero, materia.ano) external_name = "{}_{}_docacessorios.pdf".format(materia.numero, materia.ano)
return external_name, merged_pdf return external_name, merged_pdf
def get_pdf_docacessorios(request, pk): def get_pdf_docacessorios(request, pk):
import os materia = get_object_or_404(MateriaLegislativa, pk=pk)
external_name, pdffilename = create_pdf_docacessorios(pk) logger = logging.getLogger(__name__)
username = request.user.username
try:
external_name, pdffilename = create_pdf_docacessorios(materia)
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)
return redirect(reverse('sapl.materia:documentoacessorio_list',
kwargs={'pk': pk}))
if not pdffilename: if not pdffilename:
msg=_('Não há nenhum documento acessório cadastrado.') msg=_('Não há nenhum documento acessório cadastrado.')
messages.add_message(request, messages.WARNING, msg) messages.add_message(request, messages.WARNING, msg)

Loading…
Cancel
Save