database: add session tracking

This commit is contained in:
Izalia Mae 2021-04-06 21:31:07 -04:00
parent 1dc8d9162f
commit 3887a68db9

View file

@ -6,7 +6,7 @@ from sqlalchemy import create_engine, ForeignKey, MetaData, Table
from sqlalchemy import Column as SqlColumn, types as Types from sqlalchemy import Column as SqlColumn, types as Types
#from sqlalchemy.ext.declarative import declarative_base #from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import OperationalError, ProgrammingError from sqlalchemy.exc import OperationalError, ProgrammingError
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import scoped_session, sessionmaker
from . import logging from . import logging
from .cache import LRUCache from .cache import LRUCache
@ -27,6 +27,7 @@ class DataBase():
session_class = kwargs.get('session_class', Session) session_class = kwargs.get('session_class', Session)
self.session = lambda trans=True: session_class(self, trans) self.session = lambda trans=True: session_class(self, trans)
self.sessions = {}
self.SetupCache() self.SetupCache()
@ -109,7 +110,7 @@ class Session(object):
def __init__(self, db, trans=True): def __init__(self, db, trans=True):
self.db = db self.db = db
self.classes = self.db.classes self.classes = self.db.classes
self.session = sessionmaker(bind=db.db)() self.session = scoped_session(sessionmaker(bind=db.db))()
self.table = self.db.table self.table = self.db.table
self.cache = self.db.cache self.cache = self.db.cache
self.trans = trans self.trans = trans
@ -121,6 +122,7 @@ class Session(object):
self.rollback = self.s.rollback self.rollback = self.s.rollback
self.query = self.s.query self.query = self.s.query
self.execute = self.s.execute self.execute = self.s.execute
self.close = self.s.close
self._setup() self._setup()
@ -130,6 +132,7 @@ class Session(object):
def __enter__(self): def __enter__(self):
self.sessionid = RandomGen(10) self.sessionid = RandomGen(10)
self.db.sessions[self.sessionid] = self
return self return self
@ -137,8 +140,9 @@ class Session(object):
if tb: if tb:
self.rollback() self.rollback()
else: self.commit()
self.commit() self.close()
del self.db.sessions[self.sessionid]
def _setup(self): def _setup(self):