Projet

Général

Profil

0001-templatetags-pass-float-to-num2words-and-work-with-0.patch

Valentin Deniaud, 20 octobre 2021 18:19

Télécharger (3,06 ko)

Voir les différences:

Subject: [PATCH] templatetags: pass float to num2words and work with 0.5.6
 (#58022)

 hobo/templatetags/hobo.py  | 25 ++++++++++++++++++++-----
 tests/test_templatetags.py |  6 +++---
 tox.ini                    |  2 +-
 3 files changed, 24 insertions(+), 9 deletions(-)
hobo/templatetags/hobo.py
28 28
    return x.get_value() if hasattr(x, 'get_value') else x
29 29

  
30 30

  
31
def parse_float(value):
32
    value = unlazy(value)
33
    if isinstance(value, str):
34
        # replace , by . for French users comfort
35
        value = value.replace(',', '.')
36
    try:
37
        return float(value)
38
    except (ValueError, TypeError, OverflowError):
39
        return ''
40

  
41

  
31 42
@register.filter
32
@stringfilter
33 43
def as_numeral(number):
44
    number = parse_float(number)
45
    if not number:
46
        return ''
34 47
    try:
35
        return num2words(unlazy(number), lang=get_language())
36
    except (TypeError, ValueError, decimal.InvalidOperation, OverflowError):
48
        return num2words(number, lang=get_language())
49
    except (TypeError, ValueError, decimal.InvalidOperation):
37 50
        return ''
38 51

  
39 52

  
40 53
@register.filter
41
@stringfilter
42 54
def as_numeral_currency(number):
55
    number = parse_float(number)
56
    if not number:
57
        return ''
43 58
    try:
44 59
        return num2words(unlazy(number), lang=get_language(), to='currency')
45
    except (TypeError, ValueError, decimal.InvalidOperation, OverflowError):
60
    except (TypeError, ValueError, decimal.InvalidOperation):
46 61
        return ''
tests/test_templatetags.py
30 30
    assert t.render(Context({'number': 10 ** 500})) == ''
31 31

  
32 32
    settings.LANGUAGE_CODE = 'fr'
33
    assert t.render(Context({'number': 42})) == 'quarante-deux'
33
    assert t.render(Context({'number': '42'})) == 'quarante-deux'
34 34
    assert t.render(Context({'number': 42.15})) == 'quarante-deux virgule un cinq'
35 35

  
36 36

  
......
47 47
    assert t.render(Context({'number': 10 ** 500})) == ''
48 48

  
49 49
    settings.LANGUAGE_CODE = 'fr'
50
    assert t.render(Context({'number': 42})) == 'quarante-deux euros et zéro centimes'
50
    assert t.render(Context({'number': 42})) == 'quarante-deux euros'
51 51
    assert t.render(Context({'number': 42.15})) == 'quarante-deux euros et quinze centimes'
52
    assert t.render(Context({'number': '1'})) == 'un euro et zéro centimes'
52
    assert t.render(Context({'number': '1'})) == 'un euro'
tox.ini
55 55
	xmlschema<1.1
56 56
	enum34<=1.1.6
57 57
	psycopg2-binary<2.9
58
	num2words
58
	num2words==0.5.6
59 59
	black: pre-commit
60 60
commands =
61 61
	./getlasso3.sh
62
-