Generar ZIP

This commit is contained in:
Mauricio Baeza 2017-10-15 18:57:25 -05:00
parent 09e3b46eca
commit 28bb6a74d1
3 changed files with 35 additions and 0 deletions

View File

@ -14,6 +14,8 @@ import tempfile
import time import time
import unicodedata import unicodedata
import uuid import uuid
import zipfile
from io import BytesIO
from xml.etree import ElementTree as ET from xml.etree import ElementTree as ET
import uno import uno
@ -913,3 +915,14 @@ def get_data(invoice, rfc, values):
data['timbre'] = _timbre(doc, version, options) data['timbre'] = _timbre(doc, version, options)
return path, data return path, data
def to_zip(*files):
zip_buffer = BytesIO()
with zipfile.ZipFile(zip_buffer, 'a', zipfile.ZIP_DEFLATED, False) as zip_file:
for data, file_name in files:
zip_file.writestr(file_name, data)
return zip_buffer.getvalue()

View File

@ -122,5 +122,8 @@ class StorageEngine(object):
if type_doc == 'pdf': if type_doc == 'pdf':
data, file_name = main.Facturas.get_pdf(id, rfc) data, file_name = main.Facturas.get_pdf(id, rfc)
content_type = 'application/pdf' content_type = 'application/pdf'
if type_doc == 'zip':
data, file_name = main.Facturas.get_zip(id, rfc)
content_type = 'application/octet-stream'
return data, file_name, content_type return data, file_name, content_type

View File

@ -1040,6 +1040,25 @@ class Facturas(BaseModel):
doc = util.to_pdf(path, data) doc = util.to_pdf(path, data)
return doc, name return doc, name
@classmethod
def get_zip(cls, id, rfc):
obj = Facturas.get(Facturas.id==id)
name_zip = '{}{}_{}.zip'.format(obj.serie, obj.folio, obj.cliente.rfc)
if obj.uuid is None:
return b'', name_zip
file_xml = cls.get_xml(id)
if not file_xml[0]:
return b'', name_zip
file_pdf = cls.get_pdf(id, rfc)
if not file_pdf[0]:
return b'', name_zip
file_zip = util.to_zip(file_xml, file_pdf)
return file_zip, name_zip
@classmethod @classmethod
def get_(cls, values): def get_(cls, values):
rows = tuple(Facturas rows = tuple(Facturas