|
|
|
import json
|
|
|
|
import time
|
|
|
|
import traceback
|
|
|
|
from couchpotato import CPLog
|
|
|
|
from couchpotato.api import addApiView
|
|
|
|
from couchpotato.core.event import addEvent
|
|
|
|
|
|
|
|
log = CPLog(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
class Database(object):
|
|
|
|
|
|
|
|
indexes = []
|
|
|
|
db = None
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
|
|
addApiView('database.list_documents', self.listDocuments)
|
|
|
|
addApiView('database.document.update', self.updateDocument)
|
|
|
|
addApiView('database.document.delete', self.deleteDocument)
|
|
|
|
|
|
|
|
addEvent('database.setup_index', self.setupIndex)
|
|
|
|
|
|
|
|
def test():
|
|
|
|
time.sleep(1)
|
|
|
|
self.listDocuments()
|
|
|
|
|
|
|
|
addEvent('app.load', test)
|
|
|
|
|
|
|
|
|
|
|
|
def getDB(self):
|
|
|
|
|
|
|
|
if not self.db:
|
|
|
|
from couchpotato import get_db
|
|
|
|
self.db = get_db()
|
|
|
|
|
|
|
|
return self.db
|
|
|
|
|
|
|
|
def setupIndex(self, index_name, klass):
|
|
|
|
|
|
|
|
self.indexes.append(index_name)
|
|
|
|
|
|
|
|
db = self.getDB()
|
|
|
|
|
|
|
|
# Category index
|
|
|
|
try:
|
|
|
|
db.add_index(klass(db.path, index_name))
|
|
|
|
db.reindex_index(index_name)
|
|
|
|
except:
|
|
|
|
previous_version = db.indexes_names[index_name]._version
|
|
|
|
current_version = klass._version
|
|
|
|
|
|
|
|
# Only edit index if versions are different
|
|
|
|
if previous_version < current_version:
|
|
|
|
log.debug('Index "%s" already exists, updating and reindexing', index_name)
|
|
|
|
db.edit_index(klass(db.path, index_name), reindex = True)
|
|
|
|
|
|
|
|
def deleteDocument(self, **kwargs):
|
|
|
|
|
|
|
|
db = self.getDB()
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
document_id = kwargs.get('_request').get_argument('id')
|
|
|
|
document = db.get('id', document_id)
|
|
|
|
db.delete(document)
|
|
|
|
|
|
|
|
return {
|
|
|
|
'success': True
|
|
|
|
}
|
|
|
|
except:
|
|
|
|
return {
|
|
|
|
'success': False,
|
|
|
|
'error': traceback.format_exc()
|
|
|
|
}
|
|
|
|
|
|
|
|
def updateDocument(self, **kwargs):
|
|
|
|
|
|
|
|
db = self.getDB()
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
document = json.loads(kwargs.get('_request').get_argument('document'))
|
|
|
|
d = db.update(document)
|
|
|
|
document.update(d)
|
|
|
|
|
|
|
|
return {
|
|
|
|
'success': True,
|
|
|
|
'document': document
|
|
|
|
}
|
|
|
|
except:
|
|
|
|
return {
|
|
|
|
'success': False,
|
|
|
|
'error': traceback.format_exc()
|
|
|
|
}
|
|
|
|
|
|
|
|
def listDocuments(self, **kwargs):
|
|
|
|
db = self.getDB()
|
|
|
|
|
|
|
|
results = {
|
|
|
|
'unknown': []
|
|
|
|
}
|
|
|
|
|
|
|
|
for document in db.all('id'):
|
|
|
|
key = document.get('_t', 'unknown')
|
|
|
|
if not results.get(key):
|
|
|
|
results[key] = []
|
|
|
|
results[key].append(document)
|
|
|
|
|
|
|
|
|
|
|
|
return results
|