Description
How do you use Sentry?
Sentry Saas (sentry.io)
Version
2.24.0
Steps to Reproduce
Hi! I have an issue with decimal. I defined custom rules for decimal type like this:
def decimal_setup() -> None:
BasicContext.traps[Inexact] = True
BasicContext.traps[FloatOperation] = True
setcontext(BasicContext)
and call this function before FastAPI initialization
decimal_setup()
fastapi_app: FastAPI = FastAPI(
middleware=middlewares,
)
@fastapi_app.get('api/init')
def init() -> dict:
return {'status': 'OK'}
An error occurs when i running the application and calling the API.
Thanks for great tool!
Expected Result
The application should not crash.
Actual Result
This is stack trace that i see
Traceback (most recent call last):
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/integrations/starlette.py", line 408, in _sentry_patched_asgi_app
return await middleware(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/integrations/asgi.py", line 158, in _run_asgi3
return await self._run_app(scope, receive, send, asgi_version=3)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/integrations/asgi.py", line 197, in _run_app
transaction = continue_trace(
^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/api.py", line 431, in continue_trace
return get_isolation_scope().continue_trace(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/scope.py", line 1161, in continue_trace
transaction = Transaction.continue_from_headers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/tracing.py", line 518, in continue_from_headers
transaction = Transaction(**kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/tracing.py", line 818, in __init__
self._sample_rand = _generate_sample_rand(self.trace_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mika/Dev/optifino/.venv/lib/python3.12/site-packages/sentry_sdk/tracing_utils.py", line 876, in _generate_sample_rand
return Decimal(sample_rand).quantize(
^^^^^^^^^^^^^^^^^^^^
decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
It looks like you need to define a local context for this operation using decimal.localcontext
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
No status