Does graphene_sqlalchemy keep sessions open?
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
Línea de trabajo
Empieza reproduciendo el bloqueo de pytest con reset_testdata(), close_all_sessions() y metadata.drop_all()/create_all() contra el contenedor desechable de Postgres. Compara las solicitudes usando graphene_sqlalchemy con y sin el middleware de FastAPI mostrado y, después, sigue el ciclo de vida de la sesión. Se considera terminado cuando se haya identificado la causa de la sesión persistente y el comportamiento de limpieza esperado esté documentado o cubierto por una prueba de regresión.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
tl;dr
Does graphene_sqlalchemy keep sessions open? I'm having the problem that Postgres doesnt run drop_all() in my test suite.
Explanation
Hi, I have a fastAPI app and I'm using graphene_sqlalchemy to generate an API from database models defined on the declarative base of SQLAlchemy. The database is postgres. For testing I am running some pytests against the API while it's running. So, I start a throw-away postgres container, then I start the API app, then I run pytest.
The tests include a reset_testdata() function which also uses the SQLAlchemy ORM. It looks like:
def reset_testdata():
close_all_sessions() # from sqlalchemy.orm.session
models.Base.metadata.drop_all(bind=engine)
models.Base.metadata.create_all(bind=engine)
db.add_all([
# ... add stuff
])
db.commit()
db.close()
I noticed, that once reset_testdata() is used, the pytest process hangs. No errors, not able to Ctrl+C, it just waits. I had this issue before and it usually stems from Postgres not allowing stuff like drop_all() if there are still active sessions. After some trying out I found that queries from my app (which are implemented by graphene_sqlalchemy) seem to keep a session open.
(I used this example in my app: https://docs.graphene-python.org/projects/sqlalchemy/en/latest/tutorial/#defining-our-models)
I tested this, and basically I can circumvent this problem by adding a middleware that closes all sessions after every request.
@app.middleware('http')
async def close_sessions(request: Request, call_next):
try:
response = await call_next(request)
finally:
close_all_sessions()
return response
I wonder whether I am missing something here? Any experience with this issue (if it is even an issue)?
- Lenguaje dominante
- Python
- Estrellas
- 985
- Forks
- 224
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de graphql-python/graphene-sqlalchemy
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
graphql-python/graphene-sqlalchemy#422 · 1 comentario ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
graphql-python/graphene-sqlalchemy#419 · 3 comentarios ·
Todos los issues de graphql-python/graphene-sqlalchemy
Issues similares
-
essnmx good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
-
[Feature] 奇物选择添加优先级 Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
syfoud/Simulated_Scepter#174 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Giskard-AI/giskard-oss#2840 · 1 comentario ·
-
A claim comment carrying the issue number is silently declined while the workflow reports success Abiertoarea: repo bug perceived difficulty: 2
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
yeti-platform/yeti#1380 ·