Move SQL heavy lifting to its own Mixin.

This commit is contained in:
voussoir 2018-02-25 16:30:05 -08:00
parent e4e542a8a6
commit 576fac416a

View file

@ -681,6 +681,60 @@ class PDBPhotoMixin:
print('Search results took:', end_time - start_time) print('Search results took:', end_time - start_time)
class PDBSQLMixin:
def __init__(self):
super().__init__()
self.on_commit_queue = []
def close(self):
self.sql.close()
if self.ephemeral:
self.ephemeral_directory.cleanup()
def commit(self):
while self.on_commit_queue:
task = self.on_commit_queue.pop()
print(task)
args = task.get('args', [])
kwargs = task.get('kwargs', {})
task['action'](*args, **kwargs)
self.sql.commit()
def sql_delete(self, table, pairs, *, commit=False):
cur = self.sql.cursor()
(qmarks, bindings) = sqlhelpers.delete_filler(pairs)
query = 'DELETE FROM %s %s' % (table, qmarks)
#self.log.debug(query)
cur.execute(query, bindings)
if commit:
self.commit()
def sql_insert(self, table, data, *, commit=False):
column_names = constants.SQL_COLUMNS[table]
cur = self.sql.cursor()
(qmarks, bindings) = sqlhelpers.insert_filler(column_names, data)
query = 'INSERT INTO %s VALUES(%s)' % (table, qmarks)
#self.log.debug(query)
cur.execute(query, bindings)
if commit:
self.commit()
def sql_update(self, table, pairs, where_key, *, commit=False):
cur = self.sql.cursor()
(qmarks, bindings) = sqlhelpers.update_filler(pairs, where_key=where_key)
query = 'UPDATE %s %s' % (table, qmarks)
#self.log.debug(query)
cur.execute(query, bindings)
if commit:
self.commit()
class PDBTagMixin: class PDBTagMixin:
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -945,7 +999,14 @@ class PDBUserMixin:
return objects.User(self, data) return objects.User(self, data)
class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUserMixin): class PhotoDB(
PDBAlbumMixin,
PDBBookmarkMixin,
PDBPhotoMixin,
PDBSQLMixin,
PDBTagMixin,
PDBUserMixin,
):
def __init__( def __init__(
self, self,
data_directory=None, data_directory=None,
@ -999,7 +1060,6 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
# OTHER # OTHER
self.on_commit_queue = []
self._cached_frozen_children = None self._cached_frozen_children = None
self._album_cache.maxlen = self.config['cache_size']['album'] self._album_cache.maxlen = self.config['cache_size']['album']
@ -1065,20 +1125,6 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
def _uncache(self): def _uncache(self):
self._cached_frozen_children = None self._cached_frozen_children = None
def close(self):
self.sql.close()
if self.ephemeral:
self.ephemeral_directory.cleanup()
def commit(self):
while self.on_commit_queue:
task = self.on_commit_queue.pop()
print(task)
args = task.get('args', [])
kwargs = task.get('kwargs', {})
task['action'](*args, **kwargs)
self.sql.commit()
@decorators.transaction @decorators.transaction
def digest_directory( def digest_directory(
self, self,
@ -1326,40 +1372,6 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
thing = thing_map['class'](self, db_row=thing) thing = thing_map['class'](self, db_row=thing)
yield thing yield thing
def sql_delete(self, table, pairs, *, commit=False):
cur = self.sql.cursor()
(qmarks, bindings) = sqlhelpers.delete_filler(pairs)
query = 'DELETE FROM %s %s' % (table, qmarks)
#self.log.debug(query)
cur.execute(query, bindings)
if commit:
self.commit()
def sql_insert(self, table, data, *, commit=False):
column_names = constants.SQL_COLUMNS[table]
cur = self.sql.cursor()
(qmarks, bindings) = sqlhelpers.insert_filler(column_names, data)
query = 'INSERT INTO %s VALUES(%s)' % (table, qmarks)
#self.log.debug(query)
cur.execute(query, bindings)
if commit:
self.commit()
def sql_update(self, table, pairs, where_key, *, commit=False):
cur = self.sql.cursor()
(qmarks, bindings) = sqlhelpers.update_filler(pairs, where_key=where_key)
query = 'UPDATE %s %s' % (table, qmarks)
#self.log.debug(query)
cur.execute(query, bindings)
if commit:
self.commit()
_THING_CLASSES = { _THING_CLASSES = {
'album': 'album':