store metadata per user. remove primaryid. only store isbn13
This commit is contained in:
parent
90648f9e65
commit
02e040d9f5
16 changed files with 245 additions and 192 deletions
61
oml/setup.py
61
oml/setup.py
|
|
@ -111,7 +111,6 @@ CREATE TABLE sort (
|
|||
date VARCHAR(1000),
|
||||
language VARCHAR(1000),
|
||||
pages BIGINT,
|
||||
classification VARCHAR(1000),
|
||||
extension VARCHAR(1000),
|
||||
size BIGINT,
|
||||
created DATETIME,
|
||||
|
|
@ -136,7 +135,6 @@ CREATE INDEX ix_sort_accessed ON sort (accessed);
|
|||
CREATE INDEX ix_sort_added ON sort (added);
|
||||
CREATE INDEX ix_sort_asin ON sort (asin);
|
||||
CREATE INDEX ix_sort_author ON sort (author);
|
||||
CREATE INDEX ix_sort_classification ON sort (classification);
|
||||
CREATE INDEX ix_sort_country ON sort (country);
|
||||
CREATE INDEX ix_sort_created ON sort (created);
|
||||
CREATE INDEX ix_sort_date ON sort (date);
|
||||
|
|
@ -274,7 +272,64 @@ def upgrade_db(old, new=None):
|
|||
i.update_sort()
|
||||
i.update_find()
|
||||
session.commit()
|
||||
|
||||
if old <= '20160111-603-90648f9' and new > '20160111-603-90648f9':
|
||||
for f in settings.ui['filters']:
|
||||
if f['id'] == 'classification':
|
||||
f['id'] = 'categories'
|
||||
settings.ui._save()
|
||||
run_sql('ALTER TABLE sort ADD categories VARCHAR(1000)')
|
||||
run_sql('ALTER TABLE sort ADD series VARCHAR(1000)')
|
||||
run_sql('CREATE INDEX ix_sort_categories ON sort (categories)')
|
||||
run_sql('''CREATE TABLE user_metadata (
|
||||
created DATETIME,
|
||||
modified DATETIME,
|
||||
id INTEGER NOT NULL,
|
||||
item_id VARCHAR(32),
|
||||
user_id VARCHAR(43),
|
||||
data_hash VARCHAR(40),
|
||||
data BLOB,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY(user_id) REFERENCES user (id)
|
||||
)''')
|
||||
run_sql('CREATE UNIQUE INDEX IF NOT EXISTS user_metadata_index ON user_metadata(id, user_id)')
|
||||
run_sql('CREATE INDEX ix_user_metadata_data_hash ON user_metadata (data_hash)')
|
||||
from meta.utils import to_isbn13
|
||||
from item.models import Item
|
||||
from user.models import Metadata
|
||||
with db.session() as session:
|
||||
for i in Item.query:
|
||||
update = False
|
||||
if 'primaryid' in i.meta:
|
||||
del i.meta['primaryid']
|
||||
update = True
|
||||
if 'primaryid' in i.info:
|
||||
del i.info['primaryid']
|
||||
update = True
|
||||
for key in i.meta_keys:
|
||||
if key not in i.meta and key in i.info:
|
||||
i.meta[key] = i.info[key]
|
||||
update = True
|
||||
if 'isbn' in i.meta and isinstance(i.meta['isbn'], list):
|
||||
isbns = [to_isbn13(isbn) for isbn in i.meta['isbn']]
|
||||
isbns = [isbn for isbn in isbns if isbn]
|
||||
if isbns:
|
||||
i.meta['isbn'] = isbns[0]
|
||||
if 'isbn' in i.info:
|
||||
i.info['isbn'] = i.meta['isbn']
|
||||
else:
|
||||
del i.meta['isbn']
|
||||
if 'isbn' in i.info:
|
||||
del i.info['isbn']
|
||||
update = True
|
||||
if 'isbn' in i.meta and not i.meta['isbn']:
|
||||
del i.meta['isbn']
|
||||
update = True
|
||||
if update:
|
||||
session.add(i)
|
||||
for u in i.users:
|
||||
if u.id != settings.USER_ID:
|
||||
Metadata.get_or_create(u.id, i.id, i.meta, False)
|
||||
session.commit()
|
||||
|
||||
if old <= '20140527-120-3cb9819':
|
||||
run_sql('CREATE INDEX ix_find_findvalue ON find (findvalue)')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue