Migration start

This commit is contained in:
Ruud committed 2014-02-14 19:36:23 +01:00
1 parent eb1556f3e8
commit 1f982b7999
2 files changed
+113

No files matched your search

+111
View File
@@ -1,9 +1,11 @@
import json import json
import os
import time import time
import traceback import traceback
from couchpotato import CPLog from couchpotato import CPLog
from couchpotato.api import addApiView from couchpotato.api import addApiView
from couchpotato.core.event import addEvent from couchpotato.core.event import addEvent
from couchpotato.core.helpers.encoding import toUnicode
log = CPLog(__name__) log = CPLog(__name__)
@@ -20,6 +22,7 @@ class Database(object):
addApiView('database.document.delete', self.deleteDocument) addApiView('database.document.delete', self.deleteDocument)
addEvent('database.setup_index', self.setupIndex) addEvent('database.setup_index', self.setupIndex)
addEvent('app.migrate', self.migrate)
def getDB(self): def getDB(self):
@@ -106,3 +109,111 @@ class Database(object):
return results return results
def migrate(self):
time.sleep(1)
from couchpotato import Env
old_db = os.path.join(Env.get('data_dir'), 'couchpotato.db')
if os.path.isfile(old_db):
import sqlite3
conn = sqlite3.connect(old_db)
c = conn.cursor()
migrate_list = {
'category': ['id', 'label', 'order', 'required', 'preferred', 'ignored', 'destination'],
'profile': ['id', 'label', 'order', 'core', 'hide'],
'profiletype': ['id', 'order', 'finish', 'wait_for', 'quality_id', 'profile_id'],
'quality': ['id', 'identifier', 'order', 'size_min', 'size_max'],
'movie': ['id', 'last_edit', 'library_id', 'status_id', 'profile_id', 'category_id'],
'library': ['id', 'identifier'],
'release': ['id', 'identifier', 'movie_id', 'status_id', 'quality_id', 'last_edit'],
'status': ['id', 'identifier'],
'properties': ['id', 'identifier', 'value'],
}
migrate_data = {}
for ml in migrate_list:
migrate_data[ml] = {}
rows = migrate_list[ml]
c.execute('SELECT %s FROM `%s`' % ('`' + '`,`'.join(rows) + '`', ml))
for p in c.fetchall():
columns = {}
for row in migrate_list[ml]:
columns[row] = p[rows.index(row)]
migrate_data[ml][p[0]] = columns
db = self.getDB()
# Categories
categories = migrate_data['category']
category_link = {}
for x in categories:
continue
c = categories[x]
new_c = db.insert({
'_t': 'category',
'order': c.get('order', 999),
'label': toUnicode(c.get('label', '')),
'ignored': toUnicode(c.get('ignored', '')),
'preferred': toUnicode(c.get('preferred', '')),
'required': toUnicode(c.get('required', '')),
'destination': toUnicode(c.get('destination', '')),
})
category_link[x] = new_c.get('_id')
# Profiles
new_profiles = db.all('profile', with_doc = True)
new_profiles_by_label = {}
for x in new_profiles:
# Remove default non core profiles
if not x['doc'].get('core'):
db.delete(x['doc'])
else:
new_profiles_by_label[x['doc']['label']] = x['_id']
profiles = migrate_data['profile']
profile_link = {}
for x in profiles:
p = profiles[x]
exists = new_profiles_by_label.get(p.get('label'))
# Update existing with order only
if exists and p.get('core'):
profile = db.get('id', exists)
profile['order'] = p.get('order')
db.update(profile)
profile_link[x] = profile.get('_id')
else:
new_profile = {
'_t': 'profile',
'label': p.get('label'),
'order': int(p.get('order', 999)),
'core': p.get('core', False),
'qualities': [],
'wait_for': [],
'finish': []
}
types = migrate_data['profiletype']
for profile_type in types:
p_type = types[profile_type]
if types[profile_type]['profile_id'] == p['id']:
new_profile['finish'].append(p_type['finish'])
new_profile['wait_for'].append(p_type['wait_for'])
new_profile['qualities'].append(migrate_data['quality'][p_type['quality_id']]['identifier'])
print new_profile
new_profile.update(db.insert(new_profile))
profile_link[x] = new_profile.get('_id')
+2
View File
@@ -89,6 +89,7 @@ def runCouchPotato(options, base_path, args, data_dir = None, log_dir = None, En
db_exists = db.exists() db_exists = db.exists()
if db_exists: if db_exists:
db.open() db.open()
db.compact()
else: else:
db.create() db.create()
@@ -223,6 +224,7 @@ def runCouchPotato(options, base_path, args, data_dir = None, log_dir = None, En
fireEvent('database.setup') fireEvent('database.setup')
if not db_exists: if not db_exists:
fireEvent('app.initialize', in_order = True) fireEvent('app.initialize', in_order = True)
fireEvent('app.migrate')
# Go go go! # Go go go!
from tornado.ioloop import IOLoop from tornado.ioloop import IOLoop