More nosql
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
from CodernityDB.hash_index import HashIndex
|
||||
from hashlib import md5
|
||||
|
||||
|
||||
class QualityIndex(HashIndex):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs['key_format'] = '32s'
|
||||
super(QualityIndex, self).__init__(*args, **kwargs)
|
||||
|
||||
def make_key(self, key):
|
||||
return md5(key).hexdigest()
|
||||
|
||||
def make_key_value(self, data):
|
||||
if data.get('_t') == 'quality' and data.get('identifier'):
|
||||
return md5(data.get('identifier')).hexdigest(), None
|
||||
@@ -1,15 +1,14 @@
|
||||
import traceback
|
||||
from couchpotato import get_session
|
||||
from couchpotato import get_session, get_db
|
||||
from couchpotato.api import addApiView
|
||||
from couchpotato.core.event import addEvent
|
||||
from couchpotato.core.helpers.encoding import toUnicode, ss
|
||||
from couchpotato.core.helpers.variable import mergeDicts, getExt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.plugins.base import Plugin
|
||||
from couchpotato.core.settings.model import Quality, Profile, ProfileType
|
||||
from sqlalchemy.sql.expression import or_
|
||||
from couchpotato.core.plugins.quality.index import QualityIndex
|
||||
from couchpotato.core.settings.model import Quality
|
||||
import re
|
||||
import time
|
||||
|
||||
log = CPLog(__name__)
|
||||
|
||||
@@ -39,6 +38,7 @@ class QualityPlugin(Plugin):
|
||||
addEvent('quality.single', self.single)
|
||||
addEvent('quality.guess', self.guess)
|
||||
addEvent('quality.pre_releases', self.preReleases)
|
||||
addEvent('quality.order', self.getOrder)
|
||||
|
||||
addApiView('quality.size.save', self.saveSize)
|
||||
addApiView('quality.list', self.allView, docs = {
|
||||
@@ -50,9 +50,31 @@ class QualityPlugin(Plugin):
|
||||
})
|
||||
|
||||
addEvent('app.initialize', self.fill, priority = 10)
|
||||
addEvent('database.setup', self.databaseSetup)
|
||||
|
||||
addEvent('app.test', self.doTest)
|
||||
|
||||
self.addOrder()
|
||||
|
||||
def addOrder(self):
|
||||
self.order = []
|
||||
for q in self.qualities:
|
||||
self.order.append(q.get('identifier'))
|
||||
|
||||
def getOrder(self):
|
||||
return self.order
|
||||
|
||||
def databaseSetup(self):
|
||||
|
||||
db = get_db()
|
||||
|
||||
# Quality index
|
||||
try:
|
||||
db.add_index(QualityIndex(db.path, 'quality'))
|
||||
except:
|
||||
log.debug('Index already exists')
|
||||
db.edit_index(QualityIndex(db.path, 'quality'))
|
||||
|
||||
def preReleases(self):
|
||||
return self.pre_releases
|
||||
|
||||
@@ -68,30 +90,29 @@ class QualityPlugin(Plugin):
|
||||
if self.cached_qualities:
|
||||
return self.cached_qualities
|
||||
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
qualities = db.query(Quality).all()
|
||||
qualities = db.all('quality', with_doc = True)
|
||||
|
||||
temp = []
|
||||
for quality in qualities:
|
||||
q = mergeDicts(self.getQuality(quality.identifier), quality.to_dict())
|
||||
quality = quality['doc']
|
||||
q = mergeDicts(self.getQuality(quality.get('identifier')), quality)
|
||||
temp.append(q)
|
||||
|
||||
self.cached_qualities = temp
|
||||
|
||||
pass #db.close()
|
||||
return temp
|
||||
|
||||
def single(self, identifier = ''):
|
||||
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
quality_dict = {}
|
||||
|
||||
quality = db.query(Quality).filter(or_(Quality.identifier == identifier, Quality.id == identifier)).first()
|
||||
quality = db.get('quality', identifier, with_doc = True)['doc']
|
||||
if quality:
|
||||
quality_dict = dict(self.getQuality(quality.identifier), **quality.to_dict())
|
||||
quality_dict = mergeDicts(self.getQuality(quality['identifier']), quality)
|
||||
|
||||
pass #db.close()
|
||||
return quality_dict
|
||||
|
||||
def getQuality(self, identifier):
|
||||
@@ -128,60 +149,35 @@ class QualityPlugin(Plugin):
|
||||
def fill(self):
|
||||
|
||||
try:
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
order = 0
|
||||
for q in self.qualities:
|
||||
|
||||
# Create quality
|
||||
qual = db.query(Quality).filter_by(identifier = q.get('identifier')).first()
|
||||
db.insert({
|
||||
'_t': 'quality',
|
||||
'order': order,
|
||||
'identifier': q.get('identifier'),
|
||||
'size_min': q.get('size')[0],
|
||||
'size_max': q.get('size')[1]
|
||||
})
|
||||
|
||||
if not qual:
|
||||
log.info('Creating quality: %s', q.get('label'))
|
||||
qual = Quality()
|
||||
qual.order = order
|
||||
qual.identifier = q.get('identifier')
|
||||
qual.label = toUnicode(q.get('label'))
|
||||
qual.size_min, qual.size_max = q.get('size')
|
||||
|
||||
db.add(qual)
|
||||
|
||||
# Create single quality profile
|
||||
prof = db.query(Profile).filter(
|
||||
Profile.core == True
|
||||
).filter(
|
||||
Profile.types.any(quality = qual)
|
||||
).all()
|
||||
|
||||
if not prof:
|
||||
log.info('Creating profile: %s', q.get('label'))
|
||||
prof = Profile(
|
||||
core = True,
|
||||
label = toUnicode(qual.label),
|
||||
order = order
|
||||
)
|
||||
db.add(prof)
|
||||
|
||||
profile_type = ProfileType(
|
||||
quality = qual,
|
||||
profile = prof,
|
||||
finish = True,
|
||||
order = 0
|
||||
)
|
||||
prof.types.append(profile_type)
|
||||
log.info('Creating profile: %s', q.get('label'))
|
||||
db.insert({
|
||||
'_t': 'profile',
|
||||
'order': order + 20, # Make sure it goes behind other profiles
|
||||
'core': True,
|
||||
'qualities': [q.get('identifier')],
|
||||
'label': toUnicode(q.get('label')),
|
||||
'finish': [True],
|
||||
'wait_for': [0],
|
||||
})
|
||||
|
||||
order += 1
|
||||
|
||||
db.commit()
|
||||
|
||||
time.sleep(0.3) # Wait a moment
|
||||
|
||||
return True
|
||||
except:
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
db.rollback()
|
||||
finally:
|
||||
pass #db.close()
|
||||
|
||||
return False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user