#25571: When number argument is not an integer ungettext_lazy's return value
evaluates to False
-----------------------------------+--------------------
Reporter: teddy_beer_maniac | Owner: nobody
Type: Bug | Status: new
Component: Utilities | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-----------------------------------+--------------------
When I tried to pass ungettext_lazy as the message argument for
MinLengthValidator:
{{{
MinLengthValidator(4, ungettext_lazy(
'Name has to be at least %(limit_value)d character long.',
'Name has to be at least %(limit_value)d characters long.',
'limit_value'
))
}}}
the default message was still used. After fiddling around I found out,
that it's because ungettext_lazy's return value's `__len__` returns 0
which makes it evaluate to False and fail a check in BaseValidator's
constructor.
{{{
>>> len(ungettext_lazy('%(number)d object', '%(number)d objects',
'number'))
0
>>> len(ungettext_lazy('%(number)d object', '%(number)d objects', 1))
17
>>> bool(ungettext_lazy('%(number)d object', '%(number)d objects',
'number'))
False
>>> bool(ungettext_lazy('%(number)d object', '%(number)d objects', 1))
True
}}}
I'm not sure if this behaviour is a bug, or is it by design and it's a bug
in BaseValidator's constructor, but I assume it's the former.
Using django 1.8.5, checked on python 2.7.9 and 3.4.3.
--
Ticket URL: <https://code.djangoproject.com/ticket/25571>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/060.c8343e16b3b48889b7655a5d8446b8b9%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.