Give Albums and Tags an author_id column.

Keeping V11 because I hadn't published previous commits yet.
This commit is contained in:
voussoir 2018-03-18 15:28:26 -07:00
parent cc98cf5407
commit dffde094e8
7 changed files with 57 additions and 30 deletions

View file

@ -41,9 +41,12 @@ CREATE INDEX IF NOT EXISTS index_users_username on users(username COLLATE NOCASE
CREATE TABLE IF NOT EXISTS albums( CREATE TABLE IF NOT EXISTS albums(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
title TEXT, title TEXT,
description TEXT description TEXT,
author_id TEXT,
FOREIGN KEY(author_id) REFERENCES users(id)
); );
CREATE INDEX IF NOT EXISTS index_albums_id on albums(id); CREATE INDEX IF NOT EXISTS index_albums_id on albums(id);
CREATE INDEX IF NOT EXISTS index_albums_author_id on albums(author_id);
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS bookmarks( CREATE TABLE IF NOT EXISTS bookmarks(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
@ -53,7 +56,7 @@ CREATE TABLE IF NOT EXISTS bookmarks(
FOREIGN KEY(author_id) REFERENCES users(id) FOREIGN KEY(author_id) REFERENCES users(id)
); );
CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id); CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id);
CREATE INDEX IF NOT EXISTS index_bookmarks_author on bookmarks(author_id); CREATE INDEX IF NOT EXISTS index_bookmarks_author_id on bookmarks(author_id);
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS photos( CREATE TABLE IF NOT EXISTS photos(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
@ -85,10 +88,13 @@ CREATE INDEX IF NOT EXISTS index_photos_searchhidden on photos(searchhidden);
CREATE TABLE IF NOT EXISTS tags( CREATE TABLE IF NOT EXISTS tags(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
description TEXT description TEXT,
author_id TEXT,
FOREIGN KEY(author_id) REFERENCES users(id)
); );
CREATE INDEX IF NOT EXISTS index_tags_id on tags(id); CREATE INDEX IF NOT EXISTS index_tags_id on tags(id);
CREATE INDEX IF NOT EXISTS index_tags_name on tags(name); CREATE INDEX IF NOT EXISTS index_tags_name on tags(name);
CREATE INDEX IF NOT EXISTS index_tags_author_id on tags(author_id);
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------

View file

@ -216,6 +216,8 @@ class Album(ObjectBase, GroupableMixin):
self.id = db_row['id'] self.id = db_row['id']
self.title = db_row['title'] or '' self.title = db_row['title'] or ''
self.description = db_row['description'] or '' self.description = db_row['description'] or ''
self.author_id = db_row['author_id']
self.name = 'Album %s' % self.id self.name = 'Album %s' % self.id
self.group_getter = self.photodb.get_album self.group_getter = self.photodb.get_album
@ -1099,6 +1101,8 @@ class Tag(ObjectBase, GroupableMixin):
self.id = db_row['id'] self.id = db_row['id']
self.name = db_row['name'] self.name = db_row['name']
self.description = db_row['description'] or '' self.description = db_row['description'] or ''
self.author_id = db_row['author_id']
self.group_getter = self.photodb.get_tag self.group_getter = self.photodb.get_tag
self._cached_qualified_name = None self._cached_qualified_name = None

View file

@ -108,6 +108,7 @@ class PDBAlbumMixin:
description=None, description=None,
*, *,
associated_directory=None, associated_directory=None,
author=None,
commit=True, commit=True,
photos=None, photos=None,
): ):
@ -124,10 +125,14 @@ class PDBAlbumMixin:
raise TypeError('Description must be string, not %s' % type(description)) raise TypeError('Description must be string, not %s' % type(description))
self.log.debug('New Album: %s %s', album_id, title) self.log.debug('New Album: %s %s', album_id, title)
author_id = self.get_user_id_or_none(author)
data = { data = {
'id': album_id, 'id': album_id,
'title': title, 'title': title,
'description': description, 'description': description,
'author_id': author_id,
} }
self.sql_insert(table='albums', data=data) self.sql_insert(table='albums', data=data)
@ -860,7 +865,7 @@ class PDBTagMixin:
@decorators.required_feature('tag.new') @decorators.required_feature('tag.new')
@decorators.transaction @decorators.transaction
def new_tag(self, tagname, description=None, *, commit=True): def new_tag(self, tagname, description=None, *, author=None, commit=True):
''' '''
Register a new tag and return the Tag object. Register a new tag and return the Tag object.
''' '''
@ -876,10 +881,12 @@ class PDBTagMixin:
tagid = self.generate_id('tags') tagid = self.generate_id('tags')
self._cached_frozen_children = None self._cached_frozen_children = None
author_id = self.get_user_id_or_none(author)
data = { data = {
'id': tagid, 'id': tagid,
'name': tagname, 'name': tagname,
'description': description, 'description': description,
'author_id': author_id,
} }
self.sql_insert(table='tags', data=data) self.sql_insert(table='tags', data=data)
@ -1189,7 +1196,7 @@ class PDBUtilMixin:
else: else:
return None return None
def easybake(self, ebstring): def easybake(self, ebstring, author=None):
''' '''
Easily create tags, groups, and synonyms with a string like Easily create tags, groups, and synonyms with a string like
"group1.group2.tag+synonym" "group1.group2.tag+synonym"
@ -1204,7 +1211,7 @@ class PDBUtilMixin:
item = self.get_tag(name=name) item = self.get_tag(name=name)
note = ('existing_tag', item.qualified_name()) note = ('existing_tag', item.qualified_name())
except exceptions.NoSuchTag: except exceptions.NoSuchTag:
item = self.new_tag(name, commit=False) item = self.new_tag(name, author=author, commit=False)
note = ('new_tag', item.qualified_name()) note = ('new_tag', item.qualified_name())
output_notes.append(note) output_notes.append(note)
return item return item

View file

@ -193,8 +193,11 @@ def post_albums_create():
if parent is not None: if parent is not None:
parent = common.P_album(parent) parent = common.P_album(parent)
album = common.P.new_album(title=title, description=description) user = session_manager.get(request).user
album = common.P.new_album(title=title, description=description, author=user)
if parent is not None: if parent is not None:
parent.add_child(album) parent.add_child(album)
response = etiquette.jsonify.album(album, minimal=False) response = etiquette.jsonify.album(album, minimal=False)
return jsonify.make_json_response(response) return jsonify.make_json_response(response)

View file

@ -97,7 +97,8 @@ def post_tag_create():
Create a tag. Create a tag.
''' '''
easybake_string = request.form['tagname'] easybake_string = request.form['tagname']
notes = common.P.easybake(easybake_string) user = session_manager.get(request).user
notes = common.P.easybake(easybake_string, author=user)
notes = [{'action': action, 'tagname': tagname} for (action, tagname) in notes] notes = [{'action': action, 'tagname': tagname} for (action, tagname) in notes]
return jsonify.make_json_response(notes) return jsonify.make_json_response(notes)

View file

@ -178,28 +178,28 @@ def upgrade_9_to_10(photodb):
def upgrade_10_to_11(photodb): def upgrade_10_to_11(photodb):
''' '''
Added Primary keys, Foreign keys, and NOT NULL constraints which cannot be Added Primary keys, Foreign keys, and NOT NULL constraints.
done in-place and requires the reconstruction of all the affected tables. Added author_id column to Album and Tag tables.
''' '''
tables_to_delete = [ tables_to_copy = {
'users', 'users': '*',
'albums', 'albums': '*, NULL',
'bookmarks', 'bookmarks': '*',
'photos', 'photos': '*',
'tags', 'tags': '*, NULL',
'album_associated_directories', 'album_associated_directories': '*',
'album_group_rel', 'album_group_rel': '*',
'album_photo_rel', 'album_photo_rel': '*',
'id_numbers', 'id_numbers': '*',
'photo_tag_rel', 'photo_tag_rel': '*',
'tag_group_rel', 'tag_group_rel': '*',
'tag_synonyms', 'tag_synonyms': '*',
] }
cur = photodb.sql.cursor() cur = photodb.sql.cursor()
cur.execute('PRAGMA foreign_keys = OFF') cur.execute('PRAGMA foreign_keys = OFF')
print('Renaming existing tables.') print('Renaming existing tables.')
for table in tables_to_delete: for table in tables_to_copy:
statement = 'ALTER TABLE %s RENAME TO %s_old' % (table, table) statement = 'ALTER TABLE %s RENAME TO %s_old' % (table, table)
cur.execute(statement) cur.execute(statement)
@ -215,8 +215,8 @@ def upgrade_10_to_11(photodb):
cur.execute(statement) cur.execute(statement)
print('Migrating table data.') print('Migrating table data.')
for table in tables_to_delete: for (table, select_columns) in tables_to_copy.items():
statement = 'INSERT INTO %s SELECT * FROM %s_old' % (table, table) statement = 'INSERT INTO %s SELECT %s FROM %s_old' % (table, select_columns, table)
cur.execute(statement) cur.execute(statement)
statement = 'DROP TABLE %s_old' % table statement = 'DROP TABLE %s_old' % table
cur.execute(statement) cur.execute(statement)

View file

@ -17,9 +17,12 @@ CREATE INDEX IF NOT EXISTS index_users_username on users(username COLLATE NOCASE
CREATE TABLE IF NOT EXISTS albums( CREATE TABLE IF NOT EXISTS albums(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
title TEXT, title TEXT,
description TEXT description TEXT,
author_id TEXT,
FOREIGN KEY(author_id) REFERENCES users(id)
); );
CREATE INDEX IF NOT EXISTS index_albums_id on albums(id); CREATE INDEX IF NOT EXISTS index_albums_id on albums(id);
CREATE INDEX IF NOT EXISTS index_albums_author_id on albums(author_id);
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS bookmarks( CREATE TABLE IF NOT EXISTS bookmarks(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
@ -29,7 +32,7 @@ CREATE TABLE IF NOT EXISTS bookmarks(
FOREIGN KEY(author_id) REFERENCES users(id) FOREIGN KEY(author_id) REFERENCES users(id)
); );
CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id); CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id);
CREATE INDEX IF NOT EXISTS index_bookmarks_author on bookmarks(author_id); CREATE INDEX IF NOT EXISTS index_bookmarks_author_id on bookmarks(author_id);
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS photos( CREATE TABLE IF NOT EXISTS photos(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
@ -61,10 +64,13 @@ CREATE INDEX IF NOT EXISTS index_photos_searchhidden on photos(searchhidden);
CREATE TABLE IF NOT EXISTS tags( CREATE TABLE IF NOT EXISTS tags(
id TEXT PRIMARY KEY NOT NULL, id TEXT PRIMARY KEY NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
description TEXT description TEXT,
author_id TEXT,
FOREIGN KEY(author_id) REFERENCES users(id)
); );
CREATE INDEX IF NOT EXISTS index_tags_id on tags(id); CREATE INDEX IF NOT EXISTS index_tags_id on tags(id);
CREATE INDEX IF NOT EXISTS index_tags_name on tags(name); CREATE INDEX IF NOT EXISTS index_tags_name on tags(name);
CREATE INDEX IF NOT EXISTS index_tags_author_id on tags(author_id);
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------