0001-templatetags-pass-float-to-num2words-and-work-with-0.patch
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 |
- |