Skip to content

Commit

Permalink
Add fastapi contrib
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurio committed Mar 13, 2021
1 parent c6edc30 commit 4a6b90b
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 2 deletions.
23 changes: 23 additions & 0 deletions rollbar/contrib/fastapi/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"""Integration with fastapi.
See: https://fastapi.tiangolo.com/
"""

import rollbar

from fastapi import Request


def report_exception(request: Request):
rollbar.report_exc_info(request=request)


def _hook(request, data):
data["framework"] = "fastapi"

if request:
endpoint = request.scope["endpoint"]
data["context"] = f"{endpoint.__module__}.{endpoint.__name__}"


rollbar.BASE_DATA_HOOK = _hook
37 changes: 37 additions & 0 deletions rollbar/examples/fastapi/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import rollbar
import rollbar.contrib.fastapi
import uvicorn

from fastapi import FastAPI, Request, status
from fastapi.responses import JSONResponse, Response

app = FastAPI()


rollbar.init("ACCESS_TOKEN", environment="development")


@app.exception_handler(Exception)
async def handle_unexpected_exceptions(request: Request, exc: Exception):
"""This won't capture HTTPException."""
try:
raise exc
except Exception:
rollbar.contrib.fastapi.report_exception(request=request)

return Response(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)


@app.get("/")
async def root(raise_exception: bool = False):
"""Hello world api endpoint.
Use `?raise_exception=1` to raise an exception.
"""
if raise_exception:
raise Exception("Testing exceptions")
return JSONResponse({"message": "Hello World"})


if __name__ == "__main__":
uvicorn.run(app)
12 changes: 10 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import re
import os.path
import re
import sys
from setuptools import setup, find_packages

from setuptools import find_packages, setup

HERE = os.path.abspath(os.path.dirname(__file__))

Expand Down Expand Up @@ -65,6 +66,7 @@
"Framework :: Bottle",
"Framework :: Django",
"Framework :: Flask",
"Framework :: Fastapi",
"Framework :: Pylons",
"Framework :: Pyramid",
"Framework :: Twisted",
Expand All @@ -81,5 +83,11 @@
'requests>=0.12.1',
'six>=1.9.0'
],
extra_requires={
"fastapi": [
"fastapi",
"uvicorn",
],
},
tests_require=tests_require,
)

0 comments on commit 4a6b90b

Please sign in to comment.