#32272: gettext_lazy inconsistent error when nested
--------------------------------------+------------------------
Reporter: John Bazik | Owner: nobody
Type: Bug | Status: new
Component: Utilities | Version: 3.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
--------------------------------------+------------------------
When gettext_lazy is called with a lazy object, it returns a nested lazy
object which has inconsistent behavior, depending on whether USE_I18N is
set or not.
{{{
>>> from django import __version__
>>> print(__version__)
3.1
>>> from django.utils.functional import lazy
>>> from django.utils.translation.trans_real import gettext as
gettext_real
>>> from django.utils.translation.trans_null import gettext as
gettext_noop
>>> gettext_lazy_real = lazy(gettext_real, str)
>>> gettext_lazy_noop = lazy(gettext_noop, str)
>>> r1 = gettext_lazy_real('Real')
>>> r2 = gettext_lazy_real(r1)
>>> n1 = gettext_lazy_noop('Noop')
>>> n2 = gettext_lazy_noop(n1)
>>> print(str(r1))
Real
>>> print(str(r2))
Real
>>> print(str(n1))
Noop
>>> print(str(n2))
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: __str__ returned non-string (type __proxy__)
}}}
I discovered this problem while working with version 2.2.
I've run across this twice now. The first time, I created a pull request
for another project to avoid the nesting. However, now that I've seen it
again, I think that because it works in the case of USE_I18N=True, it's
easy for developers to miss the problem, especially so since testing
USE_I18N has some quirks. Here's my pull request:
https://github.com/django-cms/django-cms/pull/6896
I think the best fix would be to disallow nesting by simply returning
already-nested objects, but I'm not sure of all the subtleties in that
code.
--
Ticket URL: <https://code.djangoproject.com/ticket/32272>
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 view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.2d748f132a631f91e51b0418ce1c06d4%40djangoproject.com.