Projet

Général

Profil

0001-formdata-improve-compatibility-of-lazy-date-fields-2.patch

Frédéric Péters, 30 août 2018 12:20

Télécharger (4,45 ko)

Voir les différences:

Subject: [PATCH] formdata: improve compatibility of lazy date fields (#25961)

 tests/test_formdata.py | 29 +++++++++++++++++++++++++-
 wcs/variables.py       | 46 ++++++++++++++++++++++++++++++++++++++----
 2 files changed, 70 insertions(+), 5 deletions(-)
tests/test_formdata.py
618 618
    assert bool(lazy_formdata.var.boolfield) is False
619 619
    assert lazy_formdata.var.boolfield2 == 'True'
620 620
    assert bool(lazy_formdata.var.boolfield2) is True
621
    assert lazy_formdata.var.datefield == time.strptime('2018-07-31', '%Y-%m-%d')
621
    assert lazy_formdata.var.datefield == '2018-07-31'
622
    assert lazy_formdata.var.datefield.raw == time.strptime('2018-07-31', '%Y-%m-%d')
623
    assert lazy_formdata.var.datefield.tm_year == 2018
624
    assert lazy_formdata.var.datefield.tm_mon == 7
625
    assert lazy_formdata.var.datefield.tm_mday == 31
626
    for attr in ('tm_year', 'tm_mon', 'tm_mday', 'tm_hour', 'tm_min', 'tm_sec',
627
            'tm_wday', 'tm_yday'):
628
        getattr(lazy_formdata.var.datefield, attr)
622 629
    assert lazy_formdata.var.itemsfield == 'aa, ac'
623 630
    assert 'aa' in lazy_formdata.var.itemsfield  # taken as a list
624 631
    assert 'aa,' not in lazy_formdata.var.itemsfield  # not as a string
......
689 696

  
690 697
    tmpl = Template('{{form_user_name_identifier_0}}')
691 698
    assert tmpl.render(context) == pub.user_class.select()[0].name_identifiers[0]
699

  
700
def test_form_digest_date(pub):
701
    formdef = FormDef()
702
    formdef.name = 'foobar'
703
    formdef.url_name = 'foobar'
704
    formdef.fields = [fields.DateField(id='0', label='date', varname='date')]
705
    formdef.digest_template = 'plop {{ form_var_date }} plop'
706
    formdef.store()
707

  
708
    formdata = formdef.data_class()()
709
    formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
710
    formdata.store()
711
    assert formdef.data_class().get(formdata.id).digest == 'plop 2015-05-12 plop'
712

  
713
    pub.cfg['language'] = {'language': 'fr'}
714
    pub.write_cfg()
715
    formdata = formdef.data_class()()
716
    formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
717
    formdata.store()
718
    assert formdef.data_class().get(formdata.id).digest == 'plop 12/05/2015 plop'
wcs/variables.py
306 306
            raise KeyError(key)
307 307

  
308 308
        if field.key == 'date':
309
            # for backward compatibility with sites using time.struct_time
310
            # methods we still have to return a raw value for date fields.
311
            return self.data.get(field.id)
309
            return LazyFieldVarDate(self.data, field, self.formdata)
312 310

  
313 311
        return LazyFieldVar(self.data, field, self.formdata)
314 312

  
......
327 325

  
328 326
    @property
329 327
    def raw(self):
330
        if self.field.store_display_value or self.field.key == 'file':
328
        if self.field.store_display_value or self.field.key in ('file', 'date'):
331 329
            return self.data.get(self.field.id)
332 330
        raise KeyError('raw')
333 331

  
......
395 393
        raise AssertionError('lazy cannot be pickled')
396 394

  
397 395

  
396
class LazyFieldVarDate(LazyFieldVar):
397
    # for backward compatibility with sites using time.struct_time
398
    # methods we still have to provide time.struct_time properties.
399

  
400
    def get_raw(self):
401
        return self.data.get(self.field.id)
402

  
403
    @property
404
    def tm_year(self):
405
        return self.get_raw().tm_year
406

  
407
    @property
408
    def tm_mon(self):
409
        return self.get_raw().tm_mon
410

  
411
    @property
412
    def tm_mday(self):
413
        return self.get_raw().tm_mday
414

  
415
    @property
416
    def tm_hour(self):
417
        return self.get_raw().tm_hour
418

  
419
    @property
420
    def tm_min(self):
421
        return self.get_raw().tm_min
422

  
423
    @property
424
    def tm_sec(self):
425
        return self.get_raw().tm_sec
426

  
427
    @property
428
    def tm_wday(self):
429
        return self.get_raw().tm_wday
430

  
431
    @property
432
    def tm_yday(self):
433
        return self.get_raw().tm_yday
434

  
435

  
398 436
class LazyUser(object):
399 437
    def __init__(self, user):
400 438
        self.user = user
401
-