dpark: add image conversion to PDF (fixes #26670)

This commit is contained in:
Benjamin Dauvergne 2018-09-24 16:23:36 +02:00
parent 5ca0e833c3
commit ea546e2524
3 changed files with 24 additions and 11 deletions

View File

@ -28,6 +28,7 @@ from zeep.helpers import serialize_object
from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint
from passerelle.utils.jsonresponse import APIError
from passerelle.utils.conversion import to_pdf
from passerelle.views import WrongParameter
@ -402,8 +403,13 @@ class DPark(BaseResource):
# Use raw content as zeep encode the content in base64
file_raw_content = base64.b64decode(value['content'])
try:
pdf_content = to_pdf(file_raw_content)
except ValueError as e:
errors.append(u'<%s> cannot be converted to PDF: %s' % (key, e))
continue
attached_files.append({
'TypeDocument': doc_id, 'NomFichier': value['filename'], 'Fichier': file_raw_content})
'TypeDocument': doc_id, 'NomFichier': value['filename'], 'Fichier': pdf_content})
# deduce the number of files
if errors:
raise APIError(errors)

BIN
tests/data/small.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

View File

@ -22,6 +22,9 @@ OPERATIONAL_URL = 'https://example.net/dpark'
with open(os.path.join(os.path.dirname(__file__), 'data/dpark.awws.wsdl')) as f:
WSDL_CONTENT = f.read()
with open(os.path.join(os.path.dirname(__file__), 'data/small.jpg')) as f:
JPEG_CONTENT = f.read()
@pytest.fixture
def dpark(db):
@ -512,18 +515,19 @@ def test_send_files(dpark, app, settings):
params['justif_domicile'] = {
'filename': 'address_proof.pdf', 'content_type': 'application/pdf',
'content': base64.b64encode('this is my proof of address')}
'content': base64.b64encode('%PDF this is my proof of address')}
params['cartegrise,1'] = {
'filename': 'cartegrise.pdf', 'content_type': 'application/pdf',
'content': base64.b64encode('carte grise 1')
'content': base64.b64encode('%PDF carte grise 1')
}
params['toto,6'] = {
'filename': 'cartegrisetoto.pdf', 'content_type': 'application/pdf',
'content': base64.b64encode('whatever')
'filename': 'cartegrisetoto.pdf',
'content_type': 'application/pdf',
'content': base64.b64encode(JPEG_CONTENT)
}
params['cartegrise,6'] = {
'filename': 'cartegrise2.pdf', 'content_type': 'application/pdf',
'content': base64.b64encode('carte grise 2')
'content': base64.b64encode('%PDF carte grise 2')
}
params['taxe_habitat'] = {
'filename': 'cartegrise2.pdf', 'content_type': 'application/pdf',
@ -573,13 +577,16 @@ def test_send_files(dpark, app, settings):
assert len(pj_node.findall('Bloc_Fichiers')) == 4
assert pj_node.findall('Bloc_Fichiers')[0].find('TypeDocument').text == '6'
assert pj_node.findall('Bloc_Fichiers')[0].find('NomFichier').text == 'cartegrise.pdf'
assert pj_node.findall('Bloc_Fichiers')[0].find('Fichier').text == base64.b64encode('carte grise 1')
assert pj_node.findall('Bloc_Fichiers')[0].find('Fichier').text == base64.b64encode('%PDF carte grise 1')
assert pj_node.findall('Bloc_Fichiers')[1].find('TypeDocument').text == '6'
assert pj_node.findall('Bloc_Fichiers')[1].find('NomFichier').text == 'cartegrise2.pdf'
assert pj_node.findall('Bloc_Fichiers')[1].find('Fichier').text == base64.b64encode('carte grise 2')
assert pj_node.findall('Bloc_Fichiers')[1].find('Fichier').text == base64.b64encode('%PDF carte grise 2')
assert pj_node.findall('Bloc_Fichiers')[2].find('TypeDocument').text == '2'
assert pj_node.findall('Bloc_Fichiers')[2].find('NomFichier').text == 'address_proof.pdf'
assert pj_node.findall('Bloc_Fichiers')[2].find('Fichier').text == base64.b64encode('this is my proof of address')
assert pj_node.findall('Bloc_Fichiers')[2].find('Fichier').text == base64.b64encode(
'%PDF this is my proof of address')
assert pj_node.findall('Bloc_Fichiers')[3].find('TypeDocument').text == '73'
assert pj_node.findall('Bloc_Fichiers')[3].find('NomFichier').text == 'cartegrisetoto.pdf'
assert pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text == base64.b64encode('whatever')
from passerelle.utils.conversion import to_pdf
assert pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text == base64.b64encode(to_pdf(JPEG_CONTENT))
assert base64.b64decode(pj_node.findall('Bloc_Fichiers')[3].find('Fichier').text).startswith('%PDF')