formdata: improve compatibility of lazy date fields (#25961)
This commit is contained in:
parent
76632d4694
commit
473f489dd4
|
@ -618,7 +618,14 @@ def test_lazy_formdata(pub, variable_test_data):
|
|||
assert bool(lazy_formdata.var.boolfield) is False
|
||||
assert lazy_formdata.var.boolfield2 == 'True'
|
||||
assert bool(lazy_formdata.var.boolfield2) is True
|
||||
assert lazy_formdata.var.datefield == time.strptime('2018-07-31', '%Y-%m-%d')
|
||||
assert lazy_formdata.var.datefield == '2018-07-31'
|
||||
assert lazy_formdata.var.datefield.raw == time.strptime('2018-07-31', '%Y-%m-%d')
|
||||
assert lazy_formdata.var.datefield.tm_year == 2018
|
||||
assert lazy_formdata.var.datefield.tm_mon == 7
|
||||
assert lazy_formdata.var.datefield.tm_mday == 31
|
||||
for attr in ('tm_year', 'tm_mon', 'tm_mday', 'tm_hour', 'tm_min', 'tm_sec',
|
||||
'tm_wday', 'tm_yday'):
|
||||
getattr(lazy_formdata.var.datefield, attr)
|
||||
assert lazy_formdata.var.itemsfield == 'aa, ac'
|
||||
assert 'aa' in lazy_formdata.var.itemsfield # taken as a list
|
||||
assert 'aa,' not in lazy_formdata.var.itemsfield # not as a string
|
||||
|
@ -689,3 +696,23 @@ def test_lazy_templates(pub, variable_test_data):
|
|||
|
||||
tmpl = Template('{{form_user_name_identifier_0}}')
|
||||
assert tmpl.render(context) == pub.user_class.select()[0].name_identifiers[0]
|
||||
|
||||
def test_form_digest_date(pub):
|
||||
formdef = FormDef()
|
||||
formdef.name = 'foobar'
|
||||
formdef.url_name = 'foobar'
|
||||
formdef.fields = [fields.DateField(id='0', label='date', varname='date')]
|
||||
formdef.digest_template = 'plop {{ form_var_date }} plop'
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
|
||||
formdata.store()
|
||||
assert formdef.data_class().get(formdata.id).digest == 'plop 2015-05-12 plop'
|
||||
|
||||
pub.cfg['language'] = {'language': 'fr'}
|
||||
pub.write_cfg()
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
|
||||
formdata.store()
|
||||
assert formdef.data_class().get(formdata.id).digest == 'plop 12/05/2015 plop'
|
||||
|
|
|
@ -306,9 +306,7 @@ class LazyFormDataVar(object):
|
|||
raise KeyError(key)
|
||||
|
||||
if field.key == 'date':
|
||||
# for backward compatibility with sites using time.struct_time
|
||||
# methods we still have to return a raw value for date fields.
|
||||
return self.data.get(field.id)
|
||||
return LazyFieldVarDate(self.data, field, self.formdata)
|
||||
|
||||
return LazyFieldVar(self.data, field, self.formdata)
|
||||
|
||||
|
@ -327,7 +325,7 @@ class LazyFieldVar(object):
|
|||
|
||||
@property
|
||||
def raw(self):
|
||||
if self.field.store_display_value or self.field.key == 'file':
|
||||
if self.field.store_display_value or self.field.key in ('file', 'date'):
|
||||
return self.data.get(self.field.id)
|
||||
raise KeyError('raw')
|
||||
|
||||
|
@ -395,6 +393,46 @@ class LazyFieldVar(object):
|
|||
raise AssertionError('lazy cannot be pickled')
|
||||
|
||||
|
||||
class LazyFieldVarDate(LazyFieldVar):
|
||||
# for backward compatibility with sites using time.struct_time
|
||||
# methods we still have to provide time.struct_time properties.
|
||||
|
||||
def get_raw(self):
|
||||
return self.data.get(self.field.id)
|
||||
|
||||
@property
|
||||
def tm_year(self):
|
||||
return self.get_raw().tm_year
|
||||
|
||||
@property
|
||||
def tm_mon(self):
|
||||
return self.get_raw().tm_mon
|
||||
|
||||
@property
|
||||
def tm_mday(self):
|
||||
return self.get_raw().tm_mday
|
||||
|
||||
@property
|
||||
def tm_hour(self):
|
||||
return self.get_raw().tm_hour
|
||||
|
||||
@property
|
||||
def tm_min(self):
|
||||
return self.get_raw().tm_min
|
||||
|
||||
@property
|
||||
def tm_sec(self):
|
||||
return self.get_raw().tm_sec
|
||||
|
||||
@property
|
||||
def tm_wday(self):
|
||||
return self.get_raw().tm_wday
|
||||
|
||||
@property
|
||||
def tm_yday(self):
|
||||
return self.get_raw().tm_yday
|
||||
|
||||
|
||||
class LazyUser(object):
|
||||
def __init__(self, user):
|
||||
self.user = user
|
||||
|
|
Loading…
Reference in New Issue