diff --git a/couchpotato/core/notifications/core/main.py b/couchpotato/core/notifications/core/main.py index 1a56718..243f621 100644 --- a/couchpotato/core/notifications/core/main.py +++ b/couchpotato/core/notifications/core/main.py @@ -65,6 +65,7 @@ class CoreNotifier(Notification): q.update({Notif.read: True}) db.commit() + db.close() return jsonified({ 'success': True @@ -90,6 +91,7 @@ class CoreNotifier(Notification): ndict['type'] = 'notification' notifications.append(ndict) + db.close() return jsonified({ 'success': True, 'empty': len(notifications) == 0, @@ -114,7 +116,8 @@ class CoreNotifier(Notification): ndict['time'] = time.time() self.messages.append(ndict) - db.remove() + db.close() + return True def frontend(self, type = 'notification', data = {}): self.messages.append({ @@ -143,6 +146,8 @@ class CoreNotifier(Notification): ndict['type'] = 'notification' messages.append(ndict) + db.close() + self.messages = [] return jsonified({ 'success': True, diff --git a/couchpotato/core/notifications/history/main.py b/couchpotato/core/notifications/history/main.py index d924f87..a4ad974 100644 --- a/couchpotato/core/notifications/history/main.py +++ b/couchpotato/core/notifications/history/main.py @@ -22,3 +22,6 @@ class History(Notification): ) db.add(history) db.commit() + db.close() + + return True diff --git a/couchpotato/core/plugins/file/main.py b/couchpotato/core/plugins/file/main.py index e0f0240..994da1e 100644 --- a/couchpotato/core/plugins/file/main.py +++ b/couchpotato/core/plugins/file/main.py @@ -87,7 +87,7 @@ class FileManager(Plugin): db.commit() type_dict = ft.to_dict() - db.remove() + db.close() return type_dict def getTypes(self): @@ -100,4 +100,5 @@ class FileManager(Plugin): for type_object in results: types.append(type_object.to_dict()) + db.close() return types diff --git a/couchpotato/core/plugins/library/main.py b/couchpotato/core/plugins/library/main.py index 9458aa2..bc38857 100644 --- a/couchpotato/core/plugins/library/main.py +++ b/couchpotato/core/plugins/library/main.py @@ -53,7 +53,7 @@ class LibraryPlugin(Plugin): library_dict = l.to_dict(self.default_dict) - db.remove() + db.close() return library_dict def update(self, identifier, default_title = '', force = False): @@ -130,7 +130,7 @@ class LibraryPlugin(Plugin): fireEvent('library.update_finish', data = library_dict) - db.remove() + db.close() return library_dict def updateReleaseDate(self, identifier): @@ -144,7 +144,7 @@ class LibraryPlugin(Plugin): db.commit() dates = library.info.get('release_date', {}) - db.remove() + db.close() return dates diff --git a/couchpotato/core/plugins/movie/main.py b/couchpotato/core/plugins/movie/main.py index 5a29755..52e6edc 100644 --- a/couchpotato/core/plugins/movie/main.py +++ b/couchpotato/core/plugins/movie/main.py @@ -6,7 +6,7 @@ from couchpotato.core.helpers.request import getParams, jsonified, getParam from couchpotato.core.helpers.variable import getImdb from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin -from couchpotato.core.settings.model import Movie, Library, LibraryTitle +from couchpotato.core.settings.model import Library, LibraryTitle, Movie from couchpotato.environment import Env from sqlalchemy.orm import joinedload_all from sqlalchemy.sql.expression import or_, asc, not_ @@ -109,10 +109,12 @@ class MoviePlugin(Plugin): db = get_session() m = db.query(Movie).filter_by(id = movie_id).first() + results = None if m: - return m.to_dict(self.default_dict) + results = m.to_dict(self.default_dict) - return None + db.close() + return results def list(self, status = ['active'], limit_offset = None, starts_with = None, search = None): @@ -175,6 +177,7 @@ class MoviePlugin(Plugin): }) movies.append(temp) + db.close() return movies def availableChars(self, status = ['active']): @@ -200,6 +203,7 @@ class MoviePlugin(Plugin): if char not in chars: chars += char + db.close() return chars def listView(self): @@ -246,6 +250,7 @@ class MoviePlugin(Plugin): fireEventAsync('library.update', identifier = movie.library.identifier, default_title = default_title, force = True) fireEventAsync('searcher.single', movie.to_dict(self.default_dict)) + db.close() return jsonified({ 'success': True, }) @@ -319,6 +324,7 @@ class MoviePlugin(Plugin): if (force_readd or do_search) and search_after: fireEventAsync('searcher.single', movie_dict) + db.close() return movie_dict @@ -365,6 +371,7 @@ class MoviePlugin(Plugin): movie_dict = m.to_dict(self.default_dict) fireEventAsync('searcher.single', movie_dict) + db.close() return jsonified({ 'success': True, }) @@ -419,6 +426,7 @@ class MoviePlugin(Plugin): else: fireEvent('movie.restatus', movie.id, single = True) + db.close() return True def restatus(self, movie_id): @@ -447,5 +455,6 @@ class MoviePlugin(Plugin): m.status_id = active_status.get('id') if move_to_wanted else done_status.get('id') db.commit() + db.close() return True diff --git a/couchpotato/core/plugins/profile/main.py b/couchpotato/core/plugins/profile/main.py index 0ba0637..77ad02a 100644 --- a/couchpotato/core/plugins/profile/main.py +++ b/couchpotato/core/plugins/profile/main.py @@ -47,6 +47,7 @@ class ProfilePlugin(Plugin): for profile in profiles: temp.append(profile.to_dict(self.to_dict)) + db.close() return temp def save(self): @@ -83,6 +84,7 @@ class ProfilePlugin(Plugin): profile_dict = p.to_dict(self.to_dict) + db.close() return jsonified({ 'success': True, 'profile': profile_dict @@ -92,8 +94,10 @@ class ProfilePlugin(Plugin): db = get_session() default = db.query(Profile).first() + default_dict = default.to_dict(self.to_dict) + db.close() - return default.to_dict(self.to_dict) + return default_dict def saveOrder(self): @@ -109,6 +113,7 @@ class ProfilePlugin(Plugin): order += 1 db.commit() + db.close() return jsonified({ 'success': True @@ -133,6 +138,8 @@ class ProfilePlugin(Plugin): message = 'Failed deleting Profile: %s' % e log.error(message) + db.close() + return jsonified({ 'success': success, 'message': message @@ -180,4 +187,5 @@ class ProfilePlugin(Plugin): order += 1 + db.close() return True diff --git a/couchpotato/core/plugins/quality/main.py b/couchpotato/core/plugins/quality/main.py index e1e81c3..682866f 100644 --- a/couchpotato/core/plugins/quality/main.py +++ b/couchpotato/core/plugins/quality/main.py @@ -68,6 +68,7 @@ class QualityPlugin(Plugin): q = mergeDicts(self.getQuality(quality.identifier), quality.to_dict()) temp.append(q) + db.close() return temp def single(self, identifier = ''): @@ -79,6 +80,7 @@ class QualityPlugin(Plugin): if quality: quality_dict = dict(self.getQuality(quality.identifier), **quality.to_dict()) + db.close() return quality_dict def getQuality(self, identifier): @@ -98,6 +100,7 @@ class QualityPlugin(Plugin): setattr(quality, params.get('value_type'), params.get('value')) db.commit() + db.close() return jsonified({ 'success': True }) @@ -149,6 +152,7 @@ class QualityPlugin(Plugin): order += 1 db.commit() + db.close() return True def guess(self, files, extra = {}): diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index f2d63e2..9364a0e 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -83,7 +83,7 @@ class Release(Plugin): fireEvent('movie.restatus', movie.id) - db.remove() + db.close() return True @@ -109,7 +109,7 @@ class Release(Plugin): rel.delete() db.commit() - db.remove() + db.close() return jsonified({ 'success': True }) @@ -126,7 +126,7 @@ class Release(Plugin): rel.status_id = available_status.get('id') if rel.status_id is ignored_status.get('id') else ignored_status.get('id') db.commit() - db.remove() + db.close() return jsonified({ 'success': True }) @@ -153,14 +153,14 @@ class Release(Plugin): 'files': {} }), manual = True) - db.remove() + db.close() return jsonified({ 'success': True }) else: log.error('Couldn\'t find release with id: %s' % id) - db.remove() + db.close() return jsonified({ 'success': False }) diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index 87fea38..ac6b88b 100644 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -378,6 +378,7 @@ class Renamer(Plugin): if self.shuttingDown(): break + db.close() self.renaming_started = False def getRenameExtras(self, extra_type = '', replacements = {}, folder_name = '', file_name = '', destination = '', group = {}, current_file = ''): diff --git a/couchpotato/core/plugins/scanner/main.py b/couchpotato/core/plugins/scanner/main.py index a882441..46eccea 100644 --- a/couchpotato/core/plugins/scanner/main.py +++ b/couchpotato/core/plugins/scanner/main.py @@ -8,9 +8,8 @@ from couchpotato.core.settings.model import File from couchpotato.environment import Env from enzyme.exceptions import NoParserError, ParseError from guessit import guess_movie_info -from subliminal.videos import scan +from subliminal.videos import scan, Video import enzyme -import logging import os import re import time @@ -102,12 +101,12 @@ class Scanner(Plugin): if group['library']: fireEvent('release.add', group = group) - def scanFolderToLibrary(self, folder = None, newer_than = None): + def scanFolderToLibrary(self, folder = None, newer_than = None, simple = True): if not os.path.isdir(folder): return - groups = self.scan(folder = folder) + groups = self.scan(folder = folder, simple = simple) added_identifier = [] while True and not self.shuttingDown(): @@ -128,7 +127,7 @@ class Scanner(Plugin): return added_identifier - def scan(self, folder = None, files = []): + def scan(self, folder = None, files = [], simple = False): if not folder or not os.path.isdir(folder): log.error('Folder doesn\'t exists: %s' % folder) @@ -292,7 +291,7 @@ class Scanner(Plugin): group['meta_data'] = self.getMetaData(group) # Subtitle meta - group['subtitle_language'] = self.getSubtitleLanguage(group) + group['subtitle_language'] = self.getSubtitleLanguage(group) if not simple else {} # Get parent dir from movie files for movie_file in group['files']['movie']: @@ -393,7 +392,9 @@ class Scanner(Plugin): scan_result = [] for p in paths: if not group['is_dvd']: - scan_result.extend(scan(p)) + video = Video.from_path(p) + video_result = [(video, video.scan())] + scan_result.extend(video_result) for video, detected_subtitles in scan_result: for s in detected_subtitles: @@ -454,7 +455,7 @@ class Scanner(Plugin): break except: pass - db.remove() + db.close() # Search based on OpenSubtitleHash if not imdb_id and not group['is_dvd']: diff --git a/couchpotato/core/plugins/searcher/main.py b/couchpotato/core/plugins/searcher/main.py index 4b11296..c27e101 100644 --- a/couchpotato/core/plugins/searcher/main.py +++ b/couchpotato/core/plugins/searcher/main.py @@ -61,6 +61,7 @@ class Searcher(Plugin): if self.shuttingDown(): break + db.close() self.in_progress = False def single(self, movie): @@ -147,7 +148,7 @@ class Searcher(Plugin): if self.shuttingDown(): break - db.remove() + db.close() return False def download(self, data, movie, manual = False): @@ -190,6 +191,7 @@ class Searcher(Plugin): except Exception, e: log.error('Failed marking movie finished: %s %s' % (e, traceback.format_exc())) + db.close() return True log.info('Tried to download, but none of the downloaders are enabled') diff --git a/couchpotato/core/plugins/status/main.py b/couchpotato/core/plugins/status/main.py index 9912fee..1683972 100644 --- a/couchpotato/core/plugins/status/main.py +++ b/couchpotato/core/plugins/status/main.py @@ -48,7 +48,10 @@ class StatusPlugin(Plugin): def getById(self, id): db = get_session() status = db.query(Status).filter_by(id = id).first() - return status.to_dict() + status_dict = status.to_dict() + db.close() + + return status_dict def all(self): @@ -61,6 +64,7 @@ class StatusPlugin(Plugin): s = status.to_dict() temp.append(s) + db.close() return temp def add(self, identifier): @@ -78,6 +82,7 @@ class StatusPlugin(Plugin): status_dict = s.to_dict() + db.close() return status_dict def fill(self): @@ -97,3 +102,5 @@ class StatusPlugin(Plugin): s.label = toUnicode(label) db.commit() + db.close() + diff --git a/couchpotato/core/plugins/subtitle/main.py b/couchpotato/core/plugins/subtitle/main.py index da86d49..56ff39d 100644 --- a/couchpotato/core/plugins/subtitle/main.py +++ b/couchpotato/core/plugins/subtitle/main.py @@ -38,6 +38,8 @@ class Subtitle(Plugin): # get subtitles for those files subliminal.list_subtitles(files, cache_dir = Env.get('cache_dir'), multi = True, languages = self.getLanguages(), services = self.services) + db.close() + def searchSingle(self, group): if self.isDisabled(): return diff --git a/couchpotato/core/providers/movie/_modifier/main.py b/couchpotato/core/providers/movie/_modifier/main.py index 527c7b9..c19af75 100644 --- a/couchpotato/core/providers/movie/_modifier/main.py +++ b/couchpotato/core/providers/movie/_modifier/main.py @@ -44,8 +44,8 @@ class MovieResultModifier(Plugin): } # Add release info from current library + db = get_session() try: - db = get_session() l = db.query(Library).filter_by(identifier = imdb).first() if l: @@ -63,6 +63,7 @@ class MovieResultModifier(Plugin): except: log.error('Tried getting more info on searched movies: %s' % traceback.format_exc()) + db.close() return temp def checkLibrary(self, result): diff --git a/couchpotato/core/providers/movie/couchpotatoapi/main.py b/couchpotato/core/providers/movie/couchpotatoapi/main.py index 26e42df..3e438f2 100644 --- a/couchpotato/core/providers/movie/couchpotatoapi/main.py +++ b/couchpotato/core/providers/movie/couchpotatoapi/main.py @@ -59,6 +59,7 @@ class CouchPotatoApi(MovieProvider): db = get_session() active_movies = db.query(Movie).filter(Movie.status.has(identifier = 'active')).all() movies = [x.library.identifier for x in active_movies] + db.close() suggestions = self.suggest(movies, ignore) diff --git a/couchpotato/core/settings/__init__.py b/couchpotato/core/settings/__init__.py index 48c7c32..985515a 100644 --- a/couchpotato/core/settings/__init__.py +++ b/couchpotato/core/settings/__init__.py @@ -197,11 +197,15 @@ class Settings(object): from couchpotato import get_session db = get_session() + prop = None try: - prop = db.query(Properties).filter_by(identifier = identifier).first() - return prop.value if prop else None + propert = db.query(Properties).filter_by(identifier = identifier).first() + prop = propert.value except: - return None + pass + + db.close() + return prop def setProperty(self, identifier, value = ''): from couchpotato import get_session @@ -217,3 +221,4 @@ class Settings(object): p.value = toUnicode(value) db.commit() + db.close()