Projet

Général

Profil

0001-misc-thumbnail-param-when-serving-cards-file-fields-.patch

Lauréline Guérin, 16 décembre 2022 10:15

Télécharger (4,93 ko)

Voir les différences:

Subject: [PATCH] misc: thumbnail param when serving cards file fields (#72533)

 tests/api/test_carddata.py | 53 ++++++++++++++++++++++++++++++++++++++
 tests/api/test_carddef.py  | 29 ---------------------
 wcs/forms/common.py        |  5 +++-
 3 files changed, 57 insertions(+), 30 deletions(-)
tests/api/test_carddata.py
1
import hashlib
1 2
import os
2 3

  
3 4
import pytest
5
from django.utils.encoding import force_bytes
6
from webtest import Upload
4 7

  
5 8
from wcs import fields
6 9
from wcs.admin.settings import UserFieldsFormDef
......
287 290
        'var1': 'toto',
288 291
        'var2': 'nono',
289 292
    }
293

  
294

  
295
def test_card_get_file(pub):
296
    pub.role_class.wipe()
297

  
298
    CardDef.wipe()
299
    carddef = CardDef()
300
    carddef.name = 'test'
301
    carddef.fields = [
302
        fields.StringField(id='0', label='foobar', varname='foobar'),
303
        fields.FileField(id='3', label='foobar4', varname='file'),
304
    ]
305
    carddef.store()
306

  
307
    upload = PicklableUpload('test.txt', 'text/plain', 'ascii')
308
    upload.receive([b'file content'])
309

  
310
    carddef.data_class().wipe()
311
    formdata = carddef.data_class()()
312
    formdata.data = {'0': 'blah', '3': upload}
313
    formdata.just_created()
314
    formdata.store()
315

  
316
    resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id))
317
    file_url = resp.json['fields']['file']['url']
318
    assert get_app(pub).get(file_url, status=403)
319

  
320
    resp = get_app(pub).get(sign_uri(file_url), status=200)
321
    assert resp.text == 'file content'
322

  
323
    upload = PicklableUpload('test.jpeg', 'image/jpeg')
324
    with open(os.path.join(os.path.dirname(__file__), '../image-with-gps-data.jpeg'), 'rb') as fd:
325
        upload.receive([fd.read()])
326
    formdata.data = {'0': 'blah', '3': upload}
327
    formdata.store()
328

  
329
    resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id))
330
    file_url = resp.json['fields']['file']['url']
331
    assert upload.can_thumbnail() is True
332
    thumbs_dir = os.path.join(pub.app_dir, 'thumbs')
333
    thumb_filepath = os.path.join(
334
        thumbs_dir, hashlib.sha256(force_bytes(upload.get_fs_filename())).hexdigest()
335
    )
336
    assert os.path.exists(thumbs_dir) is False
337
    assert os.path.exists(thumb_filepath) is False
338
    get_app(pub).get(sign_uri(file_url + '&thumbnail=1'), status=200)
339
    assert os.path.exists(thumbs_dir) is True
340
    assert os.path.exists(thumb_filepath) is True
341
    # again, thumbs_dir already exists
342
    get_app(pub).get(sign_uri(file_url + '&thumbnail=1'), status=200)
tests/api/test_carddef.py
882 882
    assert resp.json['err_desc'] == 'unsufficient roles'
883 883

  
884 884

  
885
def test_card_get_file(pub):
886
    pub.role_class.wipe()
887

  
888
    CardDef.wipe()
889
    carddef = CardDef()
890
    carddef.name = 'test'
891
    carddef.fields = [
892
        fields.StringField(id='0', label='foobar', varname='foobar'),
893
        fields.FileField(id='3', label='foobar4', varname='file'),
894
    ]
895
    carddef.store()
896

  
897
    upload = PicklableUpload('test.txt', 'text/plain', 'ascii')
898
    upload.receive([b'file content'])
899

  
900
    carddef.data_class().wipe()
901
    formdata = carddef.data_class()()
902
    formdata.data = {'0': 'blah', '3': upload}
903
    formdata.just_created()
904
    formdata.store()
905

  
906
    resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id))
907
    file_url = resp.json['fields']['file']['url']
908
    assert get_app(pub).get(file_url, status=403)
909

  
910
    resp = get_app(pub).get(sign_uri(file_url), status=200)
911
    assert resp.text == 'file content'
912

  
913

  
914 885
def test_post_invalid_json(pub, local_user):
915 886
    resp = get_app(pub).post(
916 887
        '/api/cards/test/submit', params='not a json payload', content_type='application/json', status=400
wcs/forms/common.py
772 772
                if not hasattr(field_data, 'file_digest'):
773 773
                    continue
774 774
                if field_data.file_digest() == file_digest:
775
                    return FileDirectory.serve_file(field_data)
775
                    return FileDirectory.serve_file(
776
                        field_data,
777
                        thumbnail=bool(get_request().form.get('thumbnail') and field_data.can_thumbnail()),
778
                    )
776 779
        elif get_request().form and get_request().form.get('f'):
777 780
            try:
778 781
                fn = get_request().form['f']
779
-