Usando il tornado, voglio creare un po 'di magia del middleware che assicuri che le mie sessioni SQLAlchemy vengano correttamente chiuse/pulite in modo che gli oggetti non vengano condivisi da una richiesta all'altra. Il trucco è che, dal momento che alcuni dei miei gestori di tornado sono asincroni, non posso condividere una sola sessione per ogni richiesta.SQLAlchemy + Tornado: come creare un scopefunc per ScopedSession di SQLAlchemy?
Quindi sono rimasto a provare a creare una ScopedSession che sa come creare una nuova sessione per ogni richiesta. Tutto quello che devo fare è definire un scopefunc per il mio codice che può trasformare la richiesta attualmente in esecuzione in una chiave univoca di qualche tipo, tuttavia non riesco a capire come ottenere la richiesta corrente in qualsiasi momento (al di fuori dell'ambito dell'attuale RequestHandler, a cui la mia funzione non ha accesso).
C'è qualcosa che posso fare per farlo funzionare?
Non conosco il tornado ma è possibile associare la sessione alla richiesta stessa (ad esempio, non utilizzare scopedsession se non è conveniente). allora puoi semplicemente dire request.session. Ha ancora bisogno di avere ami all'inizio/fine per l'installazione/demolizione. – zzzeek
@zzzeek Se pubblichi questo come risposta, lo contrassegnerò come corretto! Più ci pensavo, più mi rendevo conto che hai ragione - questo è il modo più veloce e facile da capire per ottenere ciò di cui ho bisogno. Grazie! –
Ho pensato allo stesso modo, condividere una sessione creata tramite scopped_session tra tutti i gestori asincroni creerebbe incoerenza, giusto? Dire che in un gestore potrei chiamare scopped_session.remove() alla fine del gestore ma l'altro gestore (che funziona in modo asincrono) potrebbe ancora usarlo! – giga