Js2Py icon indicating copy to clipboard operation
Js2Py copied to clipboard

RecursionError: maximum recursion depth exceeded when calling `to_dict()` on `JsObjectWrapper`

Open tristanlatr opened this issue 4 years ago • 0 comments

Hi,

Thanks for this software, I'm hoping I can get the minified source code of https://github.com/olivernn/lunr.js translated to Python but I'm running into an error when trying to use the main lunr function.

Here is my code:

>>> js2py.translate_file('./pydoctor/templates/lunr.min.js', 'lunrlib.py')
>>> from lunrlib import lunrlib
>>> type(lunrlib)
<class 'js2py.base.JsObjectWrapper'>
>>> import sys
>>> sys.setrecursionlimit(12000)
>>> lunrlib.to_dict()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 1253, in __repr__
    return repr(self.to_dict())
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 1253, in __repr__
    return repr(self.to_dict())
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 1253, in __repr__
    return repr(self.to_dict())
  [Previous line repeated 243 more times]
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 1247, in __repr__
    return repr(self._obj)
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 976, in __repr__
    val = str_repr(self.to_string().value)
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 611, in to_string
    return self.to_primitive('String').to_string()
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 548, in to_primitive
    return self.default_value(hint)
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 452, in default_value
    cand = method.call(self)
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 1455, in call
    arguments = PyJsArguments(
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 2777, in __init__
    self.define_own_property(
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 462, in define_own_property
    current = self.get_own_property(prop)
  File "/Users/tristan/.pyenv/versions/3.9.1/lib/python3.9/site-packages/js2py/base.py", line 305, in get_own_property
    return self.own.get(prop)
RecursionError: maximum recursion depth exceeded while calling a Python object

The minified code can be found here: https://github.com/tristanlatr/pydoctor/blob/js-search/pydoctor/templates/lunr.min.js

The docs of lunr: https://lunrjs.com/docs/lunr.html

I suspect the issue comes from the fact that lunr name is namespace but also a function...

It would be really appreciated if we could find a workaround for this bug! Maybe if 2 names are conflicting, just rename it with an index appended and leave a warning ? or maybe there is way to make it work ?

Thanks!

tristanlatr avatar Mar 26 '21 19:03 tristanlatr