misc: add |rename_file filter (#51484)

This commit is contained in:
Frédéric Péters 2021-08-16 13:46:56 +02:00
parent 112ff0a34d
commit fbda352421
2 changed files with 55 additions and 0 deletions

View File

@ -4815,6 +4815,46 @@ def test_set_backoffice_field_file(http_requests, two_pubs):
assert b'JFIF' in formdata.data['bo1'].get_content()
assert b'<exif:XResolution>' not in formdata.data['bo1'].get_content()
# check |rename_file filter
formdata = formdef.data_class()()
formdata.data = {'00': upload}
formdata.just_created()
formdata.store()
two_pubs.substitutions.feed(formdata)
item.fields = [{'field_id': 'bo1', 'value': '{{form_var_file|rename_file:"foobar.jpeg"}}'}]
item.perform(formdata)
assert formdata.data['bo1'].base_filename == 'foobar.jpeg'
assert formdata.data['bo1'].content_type == 'image/jpeg'
assert formdata.data['bo1'].get_content() == image_with_gps_data
formdata = formdef.data_class()()
formdata.data = {'00': upload}
formdata.just_created()
formdata.store()
two_pubs.substitutions.feed(formdata)
item.fields = [{'field_id': 'bo1', 'value': '{{form_var_file|rename_file:"foobar.$ext"}}'}]
item.perform(formdata)
assert formdata.data['bo1'].base_filename == 'foobar.jpeg'
assert formdata.data['bo1'].content_type == 'image/jpeg'
assert formdata.data['bo1'].get_content() == image_with_gps_data
# check |rename_file with invalid input
formdata = formdef.data_class()()
formdata.data = {'00': upload}
formdata.just_created()
formdata.store()
two_pubs.substitutions.feed(formdata)
item.fields = [{'field_id': 'bo1', 'value': '{{"xxx"|rename_file:"foobar.jpeg"}}'}]
item.perform(formdata)
assert 'bo1' not in formdata.data
# check with a template string, into a string field
two_pubs.substitutions.feed(formdata)
item.fields = [{'field_id': 'bo2', 'value': '{{form_var_file}}'}]

View File

@ -18,6 +18,7 @@ import datetime
import hashlib
import io
import math
import os
import random
import string
import unicodedata
@ -820,6 +821,20 @@ def strip_metadata(value):
return unlazy(value).strip_metadata()
@register.filter
def rename_file(value, new_name):
from wcs.fields import FileField
file_object = FileField.convert_value_from_anything(value)
if not file_object:
return None
if new_name.endswith('.$ext'):
new_name = os.path.splitext(new_name)[0] + os.path.splitext(file_object.base_filename)[1]
file_object.orig_filename = new_name
file_object.base_filename = new_name
return file_object
@register.filter(name='list')
def list_(value):
# turn a generator into a list