New submission from Mikhail <mikhail.v.gavri...@gmail.com>:

The presence of the restriction of recursion prevent making nested conditions 
for the superformatter: https://github.com/ebrehault/superformatter

for example:

import string


class SuperFormatter(string.Formatter):
    """World's simplest Template engine."""

    def format_field(self, value, spec):
        if spec.startswith('repeat'):
            template = spec.partition(':')[-1]
            if type(value) is dict:
                value = value.items()
            return ''.join([template.format(item=item) for item in value])
        elif spec == 'call':
            return value()
        elif spec.startswith('if'):
            return (value and spec.partition(':')[-1]) or ''
        else:
            return super(SuperFormatter, self).format_field(value, spec)


data = {
        'a1':1,
        'a2':2,
        'a3':3
}

tmpl = '''
{a1:if:
        {a2:if:
                {a2}
        }
        {a1}
}
'''

sf = SuperFormatter()
out = sf.format(tmpl, **data)
print(out)


Causes error:

$ python3.6 my_progs/test.py 
Traceback (most recent call last):
  File "my_progs/test.py", line 37, in <module>
    out = sf.format(tmpl, **data)
  File "/usr/lib64/python3.6/string.py", line 190, in format
    return self.vformat(format_string, args, kwargs)
  File "/usr/lib64/python3.6/string.py", line 194, in vformat
    result, _ = self._vformat(format_string, args, kwargs, used_args, 2)
  File "/usr/lib64/python3.6/string.py", line 244, in _vformat
    auto_arg_index=auto_arg_index)
  File "/usr/lib64/python3.6/string.py", line 244, in _vformat
    auto_arg_index=auto_arg_index)
  File "/usr/lib64/python3.6/string.py", line 244, in _vformat
    auto_arg_index=auto_arg_index)
  File "/usr/lib64/python3.6/string.py", line 201, in _vformat
    raise ValueError('Max string recursion exceeded')
ValueError: Max string recursion exceeded


If there was not this restriction, then the example code is worked.

----------
components: Library (Lib)
messages: 315242
nosy: mv.gavrilov
priority: normal
severity: normal
status: open
title: Which are reasonable reason for recursion limit in function _vformat of 
class Formatter lib string?
type: behavior
versions: Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue33272>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to