Integrate voussoirkit sqlhelpers.

https://github.com/voussoir/else/tree/master/SQLHelpers
This commit is contained in:
voussoir 2018-01-09 21:15:50 -08:00
parent 6f371701e4
commit b5902ba4f1
4 changed files with 9 additions and 37 deletions

View file

@ -51,36 +51,6 @@ def album_zip_filenames(album, recursive=True):
return arcnames return arcnames
def binding_filler(column_names, values, require_all=True):
'''
Manually aligning question marks and bindings is annoying.
Given the table's column names and a dictionary of {column: value},
return the question marks and the list of bindings in the right order.
require_all:
If `values` does not contain one of the column names, should we raise
an exception?
Otherwise, that column will simply receive None.
Ex:
column_names=['id', 'name', 'score'],
values={'score': 20, 'id': '1111', 'name': 'James'}
->
returns ('?, ?, ?', ['1111', 'James', 20])
'''
values = values.copy()
for column in column_names:
if column in values:
continue
if require_all:
raise ValueError('Missing column "%s"' % column)
else:
values.setdefault(column, None)
qmarks = '?' * len(column_names)
qmarks = ', '.join(qmarks)
bindings = [values[column] for column in column_names]
return (qmarks, bindings)
def checkerboard_image(color_1, color_2, image_size, checker_size): def checkerboard_image(color_1, color_2, image_size, checker_size):
''' '''
Generate a PIL Image with a checkerboard pattern. Generate a PIL Image with a checkerboard pattern.

View file

@ -10,6 +10,7 @@ from . import helpers
from voussoirkit import bytestring from voussoirkit import bytestring
from voussoirkit import pathclass from voussoirkit import pathclass
from voussoirkit import spinal from voussoirkit import spinal
from voussoirkit import sqlhelpers
class ObjectBase: class ObjectBase:
@ -284,7 +285,7 @@ class Album(ObjectBase, GroupableMixin):
'albumid': self.id, 'albumid': self.id,
'directory': filepath.absolute_path, 'directory': filepath.absolute_path,
} }
(qmarks, bindings) = helpers.binding_filler(constants.SQL_ALBUM_DIRECTORY_COLUMNS, data) (qmarks, bindings) = sqlhelpers.insert_filler(constants.SQL_ALBUM_DIRECTORY_COLUMNS, data)
query = 'INSERT INTO album_associated_directories VALUES(%s)' % qmarks query = 'INSERT INTO album_associated_directories VALUES(%s)' % qmarks
cur = self.photodb.sql.cursor() cur = self.photodb.sql.cursor()
cur.execute(query, bindings) cur.execute(query, bindings)

View file

@ -21,6 +21,7 @@ from voussoirkit import cacheclass
from voussoirkit import expressionmatch from voussoirkit import expressionmatch
from voussoirkit import pathclass from voussoirkit import pathclass
from voussoirkit import spinal from voussoirkit import spinal
from voussoirkit import sqlhelpers
logging.basicConfig() logging.basicConfig()
@ -247,7 +248,7 @@ class PDBAlbumMixin:
'description': description, 'description': description,
} }
(qmarks, bindings) = helpers.binding_filler(constants.SQL_ALBUM_COLUMNS, data) (qmarks, bindings) = sqlhelpers.insert_filler(constants.SQL_ALBUM_COLUMNS, data)
query = 'INSERT INTO albums VALUES(%s)' % qmarks query = 'INSERT INTO albums VALUES(%s)' % qmarks
cur.execute(query, bindings) cur.execute(query, bindings)
@ -297,7 +298,7 @@ class PDBBookmarkMixin:
'url': url, 'url': url,
} }
(qmarks, bindings) = helpers.binding_filler(constants.SQL_BOOKMARK_COLUMNS, data) (qmarks, bindings) = sqlhelpers.insert_filler(constants.SQL_BOOKMARK_COLUMNS, data)
query = 'INSERT INTO bookmarks VALUES(%s)' % qmarks query = 'INSERT INTO bookmarks VALUES(%s)' % qmarks
cur = self.sql.cursor() cur = self.sql.cursor()
cur.execute(query, bindings) cur.execute(query, bindings)
@ -409,7 +410,7 @@ class PDBPhotoMixin:
'thumbnail': None, 'thumbnail': None,
} }
(qmarks, bindings) = helpers.binding_filler(constants.SQL_PHOTO_COLUMNS, data) (qmarks, bindings) = sqlhelpers.insert_filler(constants.SQL_PHOTO_COLUMNS, data)
query = 'INSERT INTO photos VALUES(%s)' % qmarks query = 'INSERT INTO photos VALUES(%s)' % qmarks
cur = self.sql.cursor() cur = self.sql.cursor()
cur.execute(query, bindings) cur.execute(query, bindings)
@ -918,7 +919,7 @@ class PDBTagMixin:
'name': tagname, 'name': tagname,
'description': description, 'description': description,
} }
(qmarks, bindings) = helpers.binding_filler(constants.SQL_TAG_COLUMNS, data) (qmarks, bindings) = sqlhelpers.insert_filler(constants.SQL_TAG_COLUMNS, data)
query = 'INSERT INTO tags VALUES(%s)' % qmarks query = 'INSERT INTO tags VALUES(%s)' % qmarks
cur.execute(query, bindings) cur.execute(query, bindings)
if commit: if commit:
@ -1086,7 +1087,7 @@ class PDBUserMixin:
'created': created, 'created': created,
} }
(qmarks, bindings) = helpers.binding_filler(constants.SQL_USER_COLUMNS, data) (qmarks, bindings) = sqlhelpers.insert_filler(constants.SQL_USER_COLUMNS, data)
query = 'INSERT INTO users VALUES(%s)' % qmarks query = 'INSERT INTO users VALUES(%s)' % qmarks
cur = self.sql.cursor() cur = self.sql.cursor()
cur.execute(query, bindings) cur.execute(query, bindings)

View file

@ -2,6 +2,6 @@ bcrypt
flask flask
gevent gevent
pillow pillow
voussoirkit voussoirkit>=0.0.18
zipstream zipstream
git+https://github.com/senko/python-video-converter.git git+https://github.com/senko/python-video-converter.git