python-babel / flask-babel

i18n and l10n support for Flask based on Babel and pytz
https://python-babel.github.io/flask-babel/
Other
444 stars 159 forks source link

Deepcopy of a dict with LazyString raises RecursionError #109

Closed artemiy-rodionov closed 7 years ago

artemiy-rodionov commented 8 years ago

Can be peproduced on Python 3.5.2 Flask-Babel==0.11.1

from copy import deepcopy
from flask.ext.babel import lazy_gettext
lazy_string = lazy_gettext('i do not want to be recursive')
d = {'lazy': lazy_string}
deepcopy(d)
>>> deepcopy(d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/copy.py", line 155, in deepcopy
    y = copier(x, memo)
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/copy.py", line 243, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/copy.py", line 298, in _reconstruct
    if hasattr(y, '__setstate__'):
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/site-packages/flask_babel/speaklater.py", line 18, in __str__
...
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/home/snoopt/.virtualenvs/flaks-babel-recursion/lib/python3.5/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
RecursionError: maximum recursion depth exceeded while calling a Python object
jaysonsantos commented 7 years ago

It does not even need to be a dict, just trying to copy lazy_gettext will throw that exception.

from copy import copy
from flask_babel import lazy_gettext
print(copy(lazy_gettext('abc')))

Will throw this:

Traceback (most recent call last):
  File "/Users/jayson/p/eatfirst/cave/a.py", line 5, in <module>
    print(copy(lazy_gettext('abc')))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/copy.py", line 106, in copy
    return _reconstruct(x, None, *rv)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/copy.py", line 281, in _reconstruct
    if hasattr(y, '__setstate__'):
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 18, in __str__
    return text_type(self._func(*self._args, **self._kwargs))
  File "/Users/jayson/.virtualenvs/cave/lib/python3.6/site-packages/flask_babel/speaklater.py", line 12, in __getattr__
    string = text_type(self)
RecursionError: maximum recursion depth exceeded while getting the str of an object
jaysonsantos commented 7 years ago

This was fixed in https://github.com/python-babel/flask-babel/commit/8319a7f44f4a0b97298d20ad702f7618e6bdab6a Will be there any release soon?

andreymal commented 7 years ago

Same problem for me, please release new version :)