Try NoSQL
This commit is contained in:
1 parent
aab10fb599
commit
a254886bad
65 files changed
+7372
-761
No files matched your search
@@ -1,4 +1,4 @@
|
||||
from couchpotato import get_session, md5
|
||||
from couchpotato import get_session, md5, get_db
|
||||
from couchpotato.api import addApiView
|
||||
from couchpotato.core.event import fireEvent, addEvent
|
||||
from couchpotato.core.helpers.encoding import ss, toUnicode
|
||||
@@ -72,34 +72,32 @@ class Release(Plugin):
|
||||
done_status, available_status, snatched_status, downloaded_status, ignored_status = \
|
||||
fireEvent('status.get', ['done', 'available', 'snatched', 'downloaded', 'ignored'], single = True)
|
||||
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
# get movies last_edit more than a week ago
|
||||
media = db.query(Media) \
|
||||
.filter(Media.status_id == done_status.get('id'), Media.last_edit < (now - week)) \
|
||||
.all()
|
||||
medias = db.run('media', 'with_status', ['done'])
|
||||
|
||||
for item in media:
|
||||
for rel in item.releases:
|
||||
for media in medias:
|
||||
if media['last_edit'] > (now - week):
|
||||
continue
|
||||
|
||||
for rel in db.run('release', 'for_media', media['_id']):
|
||||
# Remove all available releases
|
||||
if rel.status_id in [available_status.get('id')]:
|
||||
fireEvent('release.delete', id = rel.id, single = True)
|
||||
# Set all snatched and downloaded releases to ignored to make sure they are ignored when re-adding the move
|
||||
elif rel.status_id in [snatched_status.get('id'), downloaded_status.get('id')]:
|
||||
self.updateStatus(id = rel.id, status = ignored_status)
|
||||
if rel['status'] in ['available']:
|
||||
fireEvent('release.delete', id = rel['_id'], single = True)
|
||||
|
||||
db.close()
|
||||
# Set all snatched and downloaded releases to ignored to make sure they are ignored when re-adding the move
|
||||
elif rel['status'] in ['snatched', 'downloaded']:
|
||||
self.updateStatus(id = rel['id'], status = ignored_status)
|
||||
|
||||
|
||||
def add(self, group):
|
||||
|
||||
try:
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
identifier = '%s.%s.%s' % (group['library']['identifier'], group['meta_data'].get('audio', 'unknown'), group['meta_data']['quality']['identifier'])
|
||||
|
||||
done_status, snatched_status = fireEvent('status.get', ['done', 'snatched'], single = True)
|
||||
|
||||
# Add movie
|
||||
media = db.query(Media).filter_by(library_id = group['library'].get('id')).first()
|
||||
if not media:
|
||||
@@ -129,41 +127,28 @@ class Release(Plugin):
|
||||
db.commit()
|
||||
|
||||
# Add each file type
|
||||
added_files = []
|
||||
rel['files'] = []
|
||||
for type in group['files']:
|
||||
for cur_file in group['files'][type]:
|
||||
added_file = self.saveFile(cur_file, type = type, include_media_info = type is 'movie')
|
||||
added_files.append(added_file.get('id'))
|
||||
added_file = self.saveFile(cur_file, type = type)
|
||||
rel['files'].append(added_file.get('id'))
|
||||
|
||||
# Add the release files in batch
|
||||
try:
|
||||
added_files = db.query(File).filter(or_(*[File.id == x for x in added_files])).all()
|
||||
rel.files.extend(added_files)
|
||||
db.commit()
|
||||
except:
|
||||
log.debug('Failed to attach "%s" to release: %s', (added_files, traceback.format_exc()))
|
||||
|
||||
fireEvent('media.restatus', media.id)
|
||||
fireEvent('media.restatus', media['_id'])
|
||||
|
||||
return True
|
||||
except:
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
return False
|
||||
|
||||
def saveFile(self, filepath, type = 'unknown', include_media_info = False):
|
||||
|
||||
properties = {}
|
||||
|
||||
# Get media info for files
|
||||
if include_media_info:
|
||||
properties = {}
|
||||
|
||||
# Check database and update/insert if necessary
|
||||
return fireEvent('file.add', path = filepath, part = fireEvent('scanner.partnumber', file, single = True), type_tuple = Scanner.file_types.get(type), properties = properties, single = True)
|
||||
return {
|
||||
'type': '%s_%s' % Scanner.file_types.get(type),
|
||||
'path': filepath,
|
||||
'part': fireEvent('scanner.partnumber', file, single = True),
|
||||
}
|
||||
|
||||
def deleteView(self, id = None, **kwargs):
|
||||
|
||||
@@ -171,60 +156,58 @@ class Release(Plugin):
|
||||
'success': self.delete(id)
|
||||
}
|
||||
|
||||
def delete(self, id):
|
||||
def delete(self, release_id):
|
||||
|
||||
try:
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
rel = db.query(Relea).filter_by(id = id).first()
|
||||
if rel:
|
||||
db.delete(rel)
|
||||
db.commit()
|
||||
return True
|
||||
rel = db.get('release', release_id, with_doc = True)
|
||||
db.delete(rel['doc'])
|
||||
return True
|
||||
except:
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
return False
|
||||
|
||||
def clean(self, id):
|
||||
def clean(self, release_id):
|
||||
|
||||
try:
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
rel = db.query(Relea).filter_by(id = id).first()
|
||||
if rel:
|
||||
for release_file in rel.files:
|
||||
if not os.path.isfile(ss(release_file.path)):
|
||||
db.delete(release_file)
|
||||
db.commit()
|
||||
rel = db.get('release', release_id, with_doc = True)
|
||||
files = []
|
||||
for release_file in rel['files']:
|
||||
if os.path.isfile(ss(release_file['path'])):
|
||||
files.append(release_file)
|
||||
|
||||
if len(rel.files) == 0:
|
||||
self.delete(id)
|
||||
if len(rel['files']) == 0:
|
||||
self.delete(rel['_id'])
|
||||
else:
|
||||
rel['files'] = files
|
||||
db.update(rel)
|
||||
|
||||
return True
|
||||
return True
|
||||
except:
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
return False
|
||||
|
||||
def ignore(self, id = None, **kwargs):
|
||||
def ignore(self, release_id = None, **kwargs):
|
||||
|
||||
db = get_session()
|
||||
db = get_db()
|
||||
|
||||
rel = db.query(Relea).filter_by(id = id).first()
|
||||
if rel:
|
||||
ignored_status, failed_status, available_status = fireEvent('status.get', ['ignored', 'failed', 'available'], single = True)
|
||||
self.updateStatus(id, available_status if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status)
|
||||
try:
|
||||
rel = db.get('release', release_id, with_doc = True)['doc']
|
||||
self.updateStatus(release_id, 'available' if rel['status'] in ['ignored', 'failed'] else 'ignored')
|
||||
|
||||
return {
|
||||
'success': True
|
||||
}
|
||||
except:
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
|
||||
db.close()
|
||||
return {
|
||||
'success': True
|
||||
'success': False
|
||||
}
|
||||
|
||||
def manualDownload(self, id = None, **kwargs):
|
||||
@@ -265,7 +248,7 @@ class Release(Plugin):
|
||||
if success:
|
||||
fireEvent('notify.frontend', type = 'release.manual_download', data = True, message = 'Successfully snatched "%s"' % item['name'])
|
||||
|
||||
db.close()
|
||||
pass #db.close()
|
||||
return {
|
||||
'success': success == True
|
||||
}
|
||||
@@ -361,7 +344,7 @@ class Release(Plugin):
|
||||
db.rollback()
|
||||
return False
|
||||
finally:
|
||||
db.close()
|
||||
pass #db.close()
|
||||
|
||||
return True
|
||||
|
||||
@@ -441,7 +424,7 @@ class Release(Plugin):
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
pass #db.close()
|
||||
|
||||
return []
|
||||
|
||||
@@ -458,7 +441,7 @@ class Release(Plugin):
|
||||
releases = [r.to_dict({'info': {}, 'files': {}}) for r in releases_raw]
|
||||
releases = sorted(releases, key = lambda k: k['info'].get('score', 0), reverse = True)
|
||||
|
||||
db.close()
|
||||
pass #db.close()
|
||||
return releases
|
||||
|
||||
def forMovieView(self, id = None, **kwargs):
|
||||
@@ -506,6 +489,6 @@ class Release(Plugin):
|
||||
log.error('Failed: %s', traceback.format_exc())
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
pass #db.close()
|
||||
|
||||
return False
|
||||
Reference in new issue
Block a user