Skip to content

Navigation Menu

Sign in
Sign up

Too Much Recursion when run through Fastapi #490

Open

Description

Issue type

Bug

How did you install PythonMonkey?

Installed from pip

OS platform and distribution

Linux Mint 22 x86_64

Python version (python --version)

3.12.2

PythonMonkey version (pip show pythonmonkey)

1.1.1

Bug Description

pm.eval always returns a too much recursion error when in a fastapi application and in an endpoint.
It works fine when run through fastapi as normal code not in an endpoint.
This bug persists when run with daphne instead of uvicorn.

Standalone code to reproduce the issue

import pythonmonkey as pm
import fastapi
app = fastapi.FastAPI(
 title="demo thingy to show the bug",
)
@app.get("/")
def get_data():
 return {pm.eval('1+1')}

Relevant log output or backtrace

cbass@cbass-laptop:~/picleaner$ python -m uvicorn test2:app
INFO: Started server process [100668]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:46362 - "GET / HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
 File "/home/cbass/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
 result = await app( # type: ignore[func-returns-value]
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/.local/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
 return await self.app(scope, receive, send)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
 await super().__call__(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
 await self.middleware_stack(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
 raise exc
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
 await self.app(scope, receive, _send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
 raise exc
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
 await app(scope, receive, sender)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/routing.py", line 714, in __call__
 await self.middleware_stack(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/routing.py", line 734, in app
 await route.handle(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
 await self.app(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
 await wrap_app_handling_exceptions(app, request)(scope, receive, send)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
 raise exc
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
 await app(scope, receive, sender)
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
 response = await f(request)
 ^^^^^^^^^^^^^^^^
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
 raw_response = await run_endpoint_function(
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
 return await run_in_threadpool(dependant.call, **values)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/.pyenv/versions/3.12.2/lib/python3.12/site-packages/starlette/concurrency.py", line 37, in run_in_threadpool
 return await anyio.to_thread.run_sync(func)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/.local/lib/python3.12/site-packages/anyio/to_thread.py", line 33, in run_sync
 return await get_asynclib().run_sync_in_worker_thread(
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/.local/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
 return await future
 ^^^^^^^^^^^^
 File "/home/cbass/.local/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 807, in run
 result = context.run(func, *args)
 ^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/cbass/picleaner/test2.py", line 8, in get_data
 return {pm.eval('1+1') }
 ^^^^^^^^^^^^^^
pythonmonkey.SpiderMonkeyError: InternalError: too much recursion

Additional info if applicable

I also ran into another bug (don't know if it's related) where you can't import pythonmonkey when running through the fastapi cli, but that's another ticket.

What branch of PythonMonkey were you developing on? (If applicable)

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      AltStyle によって変換されたページ (->オリジナル) /