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.ext.declarative import declarative_base
from sqlalchemy.exc import OperationalError, ProgrammingError
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import scoped_session, sessionmaker
from . import logging
from .cache import LRUCache
@ -27,6 +27,7 @@ class DataBase():
session_class = kwargs.get('session_class', Session)
self.session = lambda trans=True: session_class(self, trans)
self.sessions = {}
self.SetupCache()
@ -109,7 +110,7 @@ class Session(object):
def __init__(self, db, trans=True):
self.db = db
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.cache = self.db.cache
self.trans = trans
@ -121,6 +122,7 @@ class Session(object):
self.rollback = self.s.rollback
self.query = self.s.query
self.execute = self.s.execute
self.close = self.s.close
self._setup()
@ -130,6 +132,7 @@ class Session(object):
def __enter__(self):
self.sessionid = RandomGen(10)
self.db.sessions[self.sessionid] = self
return self
@ -137,8 +140,9 @@ class Session(object):
if tb:
self.rollback()
else:
self.commit()
self.commit()
self.close()
del self.db.sessions[self.sessionid]
def _setup(self):