better sqlite connection handling

This commit is contained in:
dave 2019-07-04 17:00:21 -07:00
parent 1a02698f06
commit d6743ad2a6
3 changed files with 7 additions and 7 deletions

View File

@ -51,9 +51,6 @@ class SATool(cherrypy.Tool):
def bind_session(self): def bind_session(self):
cherrypy.engine.publish('bind', self.session) cherrypy.engine.publish('bind', self.session)
cherrypy.request.db = self.session cherrypy.request.db = self.session
con = cherrypy.request.db.connection().connection.connection
if hasattr(con, "ping"): # not available on sqlite
con.ping()
def commit_transaction(self): def commit_transaction(self):
cherrypy.request.db = None cherrypy.request.db = None

View File

@ -3,9 +3,9 @@ import sys
import traceback import traceback
from time import time from time import time
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.pool import StaticPool from sqlalchemy.pool import StaticPool, AssertionPool, NullPool # NOQA
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from photoapp.types import Base, Photo, PhotoSet # need to be loaded for orm setup from photoapp.types import Base, Photo, PhotoSet # NOQA need to be loaded for orm setup
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from collections import defaultdict from collections import defaultdict
from multiprocessing import Process from multiprocessing import Process
@ -16,8 +16,11 @@ class PhotoLibrary(object):
def __init__(self, db_path, lib_path, cache_path): def __init__(self, db_path, lib_path, cache_path):
self.path = lib_path self.path = lib_path
self.cache_path = cache_path self.cache_path = cache_path
# TODO configure from env var
# TODO use the right pool and connection args depending on the url
# https://docs.sqlalchemy.org/en/13/core/pooling.html
self.engine = create_engine('sqlite:///{}'.format(db_path), self.engine = create_engine('sqlite:///{}'.format(db_path),
connect_args={'check_same_thread': False}, poolclass=StaticPool) connect_args={'check_same_thread': False}, poolclass=NullPool, pool_pre_ping=True)
Base.metadata.create_all(self.engine) Base.metadata.create_all(self.engine)
self.session = sessionmaker() self.session = sessionmaker()
self.session.configure(bind=self.engine) self.session.configure(bind=self.engine)

View File

@ -2,7 +2,7 @@ backports.functools-lru-cache==1.5
certifi==2019.6.16 certifi==2019.6.16
chardet==3.0.4 chardet==3.0.4
cheroot==6.5.2 cheroot==6.5.2
CherryPy==18.1.1 CherryPy==18.1.2
contextlib2==0.5.5 contextlib2==0.5.5
idna==2.8 idna==2.8
jaraco.functools==1.20 jaraco.functools==1.20