Skip to content

Commit e875537

Browse files
authored
Merge pull request #21 from mongkok/add-sqlalchemy-engines
Add add_engines method to SQLAlchemyPanel
2 parents b13335a + f3ee8f8 commit e875537

4 files changed

Lines changed: 50 additions & 19 deletions

File tree

debug_toolbar/panels/sqlalchemy.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
class SQLAlchemyPanel(SQLPanel):
1616
title = "SQLAlchemy"
1717

18+
def __init__(self, *args: t.Any, **kwargs: t.Any) -> None:
19+
super().__init__(*args, **kwargs)
20+
self.engines: t.Set[Engine] = set()
21+
1822
def register(self, engine: Engine) -> None:
1923
event.listen(engine, "before_cursor_execute", self.before_execute)
2024
event.listen(engine, "after_cursor_execute", self.after_execute)
@@ -51,31 +55,31 @@ def after_execute(
5155
}
5256
self.add_query(str(conn.engine.url), query)
5357

54-
async def process_request(self, request: Request) -> Response:
55-
engines: t.Set[Engine] = set()
58+
async def add_engines(self, request: Request):
5659
route = request.scope["route"]
5760

5861
if hasattr(route, "dependant"):
5962
if request.scope.get("fastapi_astack") is None:
6063
async with AsyncExitStack() as stack:
6164
request.scope["fastapi_astack"] = stack
62-
try:
63-
solved_result = await solve_dependencies(
64-
request=request,
65-
dependant=route.dependant,
66-
dependency_overrides_provider=route.dependency_overrides_provider,
67-
)
68-
except Exception:
69-
pass
70-
else:
71-
for value in solved_result[0].values():
72-
if isinstance(value, Session):
73-
engine = value.get_bind()
74-
engines.add(engine)
75-
self.register(engine)
65+
66+
solved_result = await solve_dependencies(
67+
request=request,
68+
dependant=route.dependant,
69+
dependency_overrides_provider=route.dependency_overrides_provider,
70+
)
71+
for value in solved_result[0].values():
72+
if isinstance(value, Session):
73+
self.engines.add(value.get_bind())
74+
75+
async def process_request(self, request: Request) -> Response:
76+
await self.add_engines(request)
77+
78+
for engine in self.engines:
79+
self.register(engine)
7680
try:
7781
response = await super().process_request(request)
7882
finally:
79-
for engine in engines:
83+
for engine in self.engines:
8084
self.unregister(engine)
8185
return response

docs/panels/sql.md

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,31 @@
11
## SQLAlchemy
22

3-
Please make sure to use the *"Dependency Injection"* system as described in the [FastAPI docs](https://fastapi.tiangolo.com/tutorial/sql-databases/#create-a-dependency) and add the `SQLAlchemyPanel` to your panel list:
3+
Add the `SQLAlchemyPanel` to your panel list:
44

55
```py hl_lines="8"
6-
{!src/panels/sqlalchemy.py!}
6+
{!src/panels/sqlalchemy/panel.py!}
77
```
88

99
![SQLAlchemy panel](../img/panels/SQLAlchemy.png)
1010

11+
This panel records all queries using the *"Dependency Injection"* system as described in the [FastAPI docs](https://fastapi.tiangolo.com/tutorial/sql-databases/#create-a-dependency).
12+
13+
If you don't use dependencies then create a new class that inherits from `SQLAlchemyPanel`, override the `add_engines` method and add the class path to your panel list:
14+
15+
```py hl_lines="8 9"
16+
{!src/panels/sqlalchemy/add_engines.py!}
17+
```
18+
19+
# ::: debug_toolbar.panels.sqlalchemy.SQLAlchemyPanel
20+
handlers: python
21+
options:
22+
heading_level: 3
23+
show_bases: false
24+
show_root_heading: true
25+
members:
26+
- add_engines
27+
28+
1129
## Tortoise ORM
1230

1331
Add the `TortoisePanel` to your panel list:
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from debug_toolbar.panels.sqlalchemy import SQLAlchemyPanel as BasePanel
2+
from sqlalchemy import create_engine
3+
4+
engine = create_engine("sqlite://", connect_args={"check_same_thread": False})
5+
6+
7+
class SQLAlchemyPanel(BasePanel):
8+
async def add_engines(self, request: Request):
9+
self.engines.add(engine)

0 commit comments

Comments
 (0)