From 5fcad77383f64d68d69b3abc60da9916e2442a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Fri, 13 Sep 2019 16:30:18 -0400 Subject: [PATCH 01/10] Missing Cork file creation. --- bazarr/init.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bazarr/init.py b/bazarr/init.py index 87ff2a9d7..552848bb7 100644 --- a/bazarr/init.py +++ b/bazarr/init.py @@ -68,6 +68,23 @@ config_file = os.path.normpath(os.path.join(args.config_dir, 'config', 'config.i cfg = ConfigParser() +if not os.path.exists(os.path.normpath(os.path.join(args.config_dir, 'config', 'users.json'))): + cork = Cork(os.path.normpath(os.path.join(args.config_dir, 'config')), initialize=True) + + cork._store.roles[''] = 100 + cork._store.save_roles() + + tstamp = str(time.time()) + username = password = '' + cork._store.users[username] = { + 'role': '', + 'hash': cork._hash(username, password), + 'email_addr': username, + 'desc': username, + 'creation_date': tstamp + } + cork._store.save_users() + def init_binaries(): exe = get_binary("unrar") From 2fcf3dee087bff8e6005da5438e47e552bbc3864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Fri, 13 Sep 2019 21:53:12 -0400 Subject: [PATCH 02/10] Fix for new install since peewee integration. --- bazarr/database.py | 21 ++++------------- bazarr/main.py | 47 ++++++++++++++++++++------------------ views/wizard_subtitles.tpl | 6 ++--- 3 files changed, 32 insertions(+), 42 deletions(-) diff --git a/bazarr/database.py b/bazarr/database.py index bee060907..f5ec1d85c 100644 --- a/bazarr/database.py +++ b/bazarr/database.py @@ -8,9 +8,9 @@ from playhouse.sqliteq import SqliteQueueDatabase from helper import path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie database = SqliteQueueDatabase( - os.path.join(args.config_dir, 'db', 'bazarr.db'), + None, use_gevent=False, - autostart=True, + autostart=False, queue_max_size=256, # Max. # of pending writes that can accumulate. results_timeout=30.0) # Max. time to wait for query to be executed. @@ -168,6 +168,8 @@ class TableSettingsNotifier(BaseModel): def database_init(): + database.init(os.path.join(args.config_dir, 'db', 'bazarr.db')) + database.start() database.connect() database.pragma('wal_checkpoint', 'TRUNCATE') # Run a checkpoint and merge remaining wal-journal. @@ -180,22 +182,7 @@ def database_init(): database.create_tables(models_list, safe=True) - # Insert default values - if System.select().count() == 0: - System.insert( - { - System.updated: 0, - System.configured: 0 - } - ).execute() - def wal_cleaning(): database.pragma('wal_checkpoint', 'TRUNCATE') # Run a checkpoint and merge remaining wal-journal. database.wal_autocheckpoint = 50 # Run an automatic checkpoint every 50 write transactions. - - -@atexit.register -def _stop_worker_threads(): - database.close() - database.stop() diff --git a/bazarr/main.py b/bazarr/main.py index 33917be77..80e7f52fd 100644 --- a/bazarr/main.py +++ b/bazarr/main.py @@ -88,10 +88,16 @@ else: bottle.ERROR_PAGE_TEMPLATE = bottle.ERROR_PAGE_TEMPLATE.replace('if DEBUG and', 'if') # Reset restart required warning on start -System.update({ - System.configured: 0, - System.updated: 0 -}).execute() +if System.select().count(): + System.update({ + System.configured: 0, + System.updated: 0 + }).execute() +else: + System.insert({ + System.configured: 0, + System.updated: 0 + }).execute() # Load languages in database load_language_in_db() @@ -188,32 +194,29 @@ def shutdown(): except Exception as e: logging.error('BAZARR Cannot create bazarr.stop file.') else: - stop_file.write('') - stop_file.close() + server.stop() database.close() database.stop() - server.stop() + stop_file.write('') + stop_file.close() sys.exit(0) @route(base_url + 'restart') def restart(): try: - server.stop() - except: - logging.error('BAZARR Cannot stop CherryPy.') + restart_file = open(os.path.join(args.config_dir, "bazarr.restart"), "w") + except Exception as e: + logging.error('BAZARR Cannot create bazarr.restart file.') else: - try: - restart_file = open(os.path.join(args.config_dir, "bazarr.restart"), "w") - except Exception as e: - logging.error('BAZARR Cannot create bazarr.restart file.') - else: - # print 'Bazarr is being restarted...' - logging.info('Bazarr is being restarted...') - restart_file.write('') - restart_file.close() - database.close() - database.stop() + # print 'Bazarr is being restarted...' + logging.info('Bazarr is being restarted...') + server.stop() + database.close() + database.stop() + restart_file.write('') + restart_file.close() + sys.exit(0) @route(base_url + 'wizard') @@ -439,7 +442,7 @@ def save_wizard(): settings_movie_default_hi = 'True' settings.general.movie_default_hi = text_type(settings_movie_default_hi) - settings_movie_default_forced = str(request.forms.getall('settings_movie_default_forced')) + settings_movie_default_forced = str(request.forms.get('settings_movie_default_forced')) settings.general.movie_default_forced = text_type(settings_movie_default_forced) with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle: diff --git a/views/wizard_subtitles.tpl b/views/wizard_subtitles.tpl index 74f6d2de9..71e075a23 100644 --- a/views/wizard_subtitles.tpl +++ b/views/wizard_subtitles.tpl @@ -105,9 +105,9 @@ %enabled_languages = [] %for language in settings_languages: - - %if language[3] == True: - % enabled_languages.append(str(language[1])) + + %if language.enabled == True: + % enabled_languages.append(str(language.code2)) %end %end From 5c905021f5ffe8947864b9bdeea0dbb26495a15d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Fri, 13 Sep 2019 21:56:52 -0400 Subject: [PATCH 03/10] Added better logging of exception while getting video information from a file. --- bazarr/get_subtitle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bazarr/get_subtitle.py b/bazarr/get_subtitle.py index a12fadd92..dbbc57b28 100644 --- a/bazarr/get_subtitle.py +++ b/bazarr/get_subtitle.py @@ -74,7 +74,7 @@ def get_video(path, title, sceneName, use_scenename, providers=None, media_type= logging.debug('BAZARR is using those video object properties: %s', vars(video)) return video - except: + except Exception as e: logging.exception("BAZARR Error trying to get video information for this file: " + path) From a0200b23da430fdf33e412bdf046327df845af97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Sat, 14 Sep 2019 09:32:19 -0400 Subject: [PATCH 04/10] Removed 1 hour interval for search subtitles task. --- views/settings_subtitles.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/settings_subtitles.tpl b/views/settings_subtitles.tpl index b07c37afc..e5abf4406 100644 --- a/views/settings_subtitles.tpl +++ b/views/settings_subtitles.tpl @@ -9,7 +9,7 @@
From 1005584f4f78ff3dde3c34ba40b0e1627f12f9c8 Mon Sep 17 00:00:00 2001 From: Pika <15848969+ThatNerdyPikachu@users.noreply.github.com> Date: Sat, 14 Sep 2019 18:15:59 -0400 Subject: [PATCH 05/10] Actually skip PGS subtitles (#543) * Update embedded_subs_reader.py * Update list_subtitles.py --- bazarr/embedded_subs_reader.py | 2 +- bazarr/list_subtitles.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/bazarr/embedded_subs_reader.py b/bazarr/embedded_subs_reader.py index df9625d4c..c808b8f46 100644 --- a/bazarr/embedded_subs_reader.py +++ b/bazarr/embedded_subs_reader.py @@ -27,7 +27,7 @@ class EmbeddedSubsReader: detected_languages = [] for detected_language in data['subtitles']: - subtitles_list.append([detected_language['language'], detected_language['forced']]) + subtitles_list.append([detected_language['language'], detected_language['forced'], detected_language["codec"]]) else: if os.path.splitext(file)[1] == '.mkv': with open(file, 'rb') as f: diff --git a/bazarr/list_subtitles.py b/bazarr/list_subtitles.py index dcac64f4b..2c15d4a31 100644 --- a/bazarr/list_subtitles.py +++ b/bazarr/list_subtitles.py @@ -36,8 +36,12 @@ def store_subtitles(file): logging.debug("BAZARR is trying to index embedded subtitles.") try: subtitle_languages = embedded_subs_reader.list_languages(file) - for subtitle_language, subtitle_forced in subtitle_languages: + for subtitle_language, subtitle_forced, subtitle_codec in subtitle_languages: try: + if settings.general.getboolean("ignore_pgs_subs") and subtitle_codec == "hdmv_pgs_subtitle": + logging.debug("BAZARR skipping pgs sub for language: " + str(alpha2_from_alpha3(subtitle_language))) + continue + if alpha2_from_alpha3(subtitle_language) is not None: lang = str(alpha2_from_alpha3(subtitle_language)) if subtitle_forced: @@ -128,8 +132,12 @@ def store_subtitles_movie(file): logging.debug("BAZARR is trying to index embedded subtitles.") try: subtitle_languages = embedded_subs_reader.list_languages(file) - for subtitle_language, subtitle_forced in subtitle_languages: + for subtitle_language, subtitle_forced, subtitle_codec in subtitle_languages: try: + if settings.general.getboolean("ignore_pgs_subs") and subtitle_codec == "hdmv_pgs_subtitle": + logging.debug("BAZARR skipping pgs sub for language: " + str(alpha2_from_alpha3(subtitle_language))) + continue + if alpha2_from_alpha3(subtitle_language) is not None: lang = str(alpha2_from_alpha3(subtitle_language)) if subtitle_forced: From 7910fa55cefe700492b659ca1df94c376d551910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Sun, 15 Sep 2019 10:39:31 -0400 Subject: [PATCH 06/10] Fix for history when series/movies have been deleted. --- bazarr/main.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/bazarr/main.py b/bazarr/main.py index 80e7f52fd..5f1e7efb1 100644 --- a/bazarr/main.py +++ b/bazarr/main.py @@ -1124,7 +1124,13 @@ def history(): def historyseries(): authorize() - row_count = TableHistory.select().count() + row_count = TableHistory.select( + + ).join_from( + TableHistory, TableShows, JOIN.LEFT_OUTER + ).where( + TableShows.title.is_null(False) + ).count() page = request.GET.page if page == "": page = "1" @@ -1168,6 +1174,8 @@ def historyseries(): TableHistory, TableShows, JOIN.LEFT_OUTER ).join_from( TableHistory, TableEpisodes, JOIN.LEFT_OUTER + ).where( + TableShows.title.is_null(False) ).order_by( TableHistory.timestamp.desc() ).paginate( @@ -1229,7 +1237,13 @@ def historyseries(): def historymovies(): authorize() - row_count = TableHistoryMovie.select().count() + row_count = TableHistoryMovie.select( + + ).join_from( + TableHistoryMovie, TableMovies, JOIN.LEFT_OUTER + ).where( + TableMovies.title.is_null(False) + ).count() page = request.GET.page if page == "": page = "1" @@ -1269,6 +1283,8 @@ def historymovies(): TableMovies.forced ).join_from( TableHistoryMovie, TableMovies, JOIN.LEFT_OUTER + ).where( + TableMovies.title.is_null(False) ).order_by( TableHistoryMovie.timestamp.desc() ).paginate( From 7d318117afcdad0a4ed7c7ffec41b372be2a4c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Sun, 15 Sep 2019 14:21:57 -0400 Subject: [PATCH 07/10] Fix for #546 --- bazarr/get_series.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bazarr/get_series.py b/bazarr/get_series.py index b3ac34d28..2fdc7e9de 100644 --- a/bazarr/get_series.py +++ b/bazarr/get_series.py @@ -17,6 +17,7 @@ from utils import get_sonarr_version def update_series(): notifications.write(msg="Update series list from Sonarr is running...", queue='get_series') apikey_sonarr = settings.sonarr.apikey + sonarr_version = get_sonarr_version() serie_default_enabled = settings.general.getboolean('serie_default_enabled') serie_default_language = settings.general.serie_default_language serie_default_hi = settings.general.serie_default_hi @@ -89,7 +90,7 @@ def update_series(): 'overview': unicode(overview), 'poster': unicode(poster), 'fanart': unicode(fanart), - 'audio_language': unicode(profile_id_to_language((show['qualityProfileId'] if get_sonarr_version().startswith('2') else show['languageProfileId']), audio_profiles)), + 'audio_language': unicode(profile_id_to_language((show['qualityProfileId'] if sonarr_version.startswith('2') else show['languageProfileId']), audio_profiles)), 'sort_title': unicode(show['sortTitle']), 'year': unicode(show['year']), 'alternate_titles': unicode(alternateTitles)}) @@ -104,7 +105,7 @@ def update_series(): 'overview': overview, 'poster': poster, 'fanart': fanart, - 'audio_language': profile_id_to_language((show['qualityProfileId'] if get_sonarr_version().startswith('2') else show['languageProfileId']), audio_profiles), + 'audio_language': profile_id_to_language((show['qualityProfileId'] if sonarr_version.startswith('2') else show['languageProfileId']), audio_profiles), 'sort_title': show['sortTitle'], 'year': show['year'], 'alternate_titles': alternateTitles, @@ -117,7 +118,7 @@ def update_series(): 'overview': overview, 'poster': poster, 'fanart': fanart, - 'audio_language': profile_id_to_language((show['qualityProfileId'] if get_sonarr_version().startswith('2') else show['languageProfileId']), audio_profiles), + 'audio_language': profile_id_to_language((show['qualityProfileId'] if sonarr_version.startswith('2') else show['languageProfileId']), audio_profiles), 'sort_title': show['sortTitle'], 'year': show['year'], 'alternate_title': alternateTitles}) From 5c80278629ccd38b1df0ef489429942d44447c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Sun, 15 Sep 2019 22:25:18 -0400 Subject: [PATCH 08/10] Fix for Google Analytics unique ID issue #539. --- bazarr/analytics.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bazarr/analytics.py b/bazarr/analytics.py index a751dc477..1eccd37a0 100644 --- a/bazarr/analytics.py +++ b/bazarr/analytics.py @@ -27,11 +27,13 @@ def track_event(category=None, action=None, label=None): tracker = Tracker('UA-138214134-3', 'none', conf=anonymousConfig) try: - visitor = pickle.loads(base64.b64decode(settings.analytics.visitor)) + if settings.analytics.visitor: + visitor = pickle.loads(base64.b64decode(settings.analytics.visitor)) + if visitor.unique_id > int(0x7fffffff): + visitor.unique_id = random.randint(0, 0x7fffffff) except: visitor = Visitor() - unique_id = long(random.getrandbits(32)) - visitor.unique_id = unique_id + visitor.unique_id = long(random.randint(0, 0x7fffffff)) session = Session() event = Event(category=category, action=action, label=label, value=1) From d910cbcc6c0edc7c118d64c29c95a92aeb6cfc79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Mon, 16 Sep 2019 06:34:24 -0400 Subject: [PATCH 09/10] Removed erroneous null constraint on DB. --- bazarr/database.py | 110 ++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/bazarr/database.py b/bazarr/database.py index f5ec1d85c..014077d83 100644 --- a/bazarr/database.py +++ b/bazarr/database.py @@ -34,8 +34,8 @@ class BaseModel(Model): class System(BaseModel): - configured = TextField(null=True) - updated = TextField(null=True) + configured = TextField() + updated = TextField() class Meta: table_name = 'system' @@ -43,41 +43,41 @@ class System(BaseModel): class TableShows(BaseModel): - alternate_titles = TextField(column_name='alternateTitles', null=True) - audio_language = TextField(null=True) - fanart = TextField(null=True) - forced = TextField(null=True) - hearing_impaired = TextField(null=True) - languages = TextField(null=True) - overview = TextField(null=True) + alternate_titles = TextField(column_name='alternateTitles') + audio_language = TextField() + fanart = TextField() + forced = TextField() + hearing_impaired = TextField() + languages = TextField() + overview = TextField() path = TextField(unique=True) - poster = TextField(null=True) + poster = TextField() sonarr_series_id = IntegerField(column_name='sonarrSeriesId', unique=True) - sort_title = TextField(column_name='sortTitle', null=True) + sort_title = TextField(column_name='sortTitle') title = TextField() tvdb_id = AutoField(column_name='tvdbId') - year = TextField(null=True) + year = TextField() class Meta: table_name = 'table_shows' class TableEpisodes(BaseModel): - audio_codec = TextField(null=True) + audio_codec = TextField() episode = IntegerField() - failed_attempts = TextField(column_name='failedAttempts', null=True) - format = TextField(null=True) - missing_subtitles = TextField(null=True) - monitored = TextField(null=True) + failed_attempts = TextField(column_name='failedAttempts') + format = TextField() + missing_subtitles = TextField() + monitored = TextField() path = TextField() - resolution = TextField(null=True) - scene_name = TextField(null=True) + resolution = TextField() + scene_name = TextField() season = IntegerField() sonarr_episode_id = IntegerField(column_name='sonarrEpisodeId', unique=True) sonarr_series_id = ForeignKeyField(TableShows, field='sonarr_series_id', column_name='sonarrSeriesId') - subtitles = TextField(null=True) + subtitles = TextField() title = TextField() - video_codec = TextField(null=True) + video_codec = TextField() class Meta: table_name = 'table_episodes' @@ -85,30 +85,30 @@ class TableEpisodes(BaseModel): class TableMovies(BaseModel): - alternative_titles = TextField(column_name='alternativeTitles', null=True) - audio_codec = TextField(null=True) - audio_language = TextField(null=True) - failed_attempts = TextField(column_name='failedAttempts', null=True) - fanart = TextField(null=True) - forced = TextField(null=True) - format = TextField(null=True) - hearing_impaired = TextField(null=True) - imdb_id = TextField(column_name='imdbId', null=True) - languages = TextField(null=True) - missing_subtitles = TextField(null=True) - monitored = TextField(null=True) - overview = TextField(null=True) + alternative_titles = TextField(column_name='alternativeTitles') + audio_codec = TextField() + audio_language = TextField() + failed_attempts = TextField(column_name='failedAttempts') + fanart = TextField() + forced = TextField() + format = TextField() + hearing_impaired = TextField() + imdb_id = TextField(column_name='imdbId') + languages = TextField() + missing_subtitles = TextField() + monitored = TextField() + overview = TextField() path = TextField(unique=True) - poster = TextField(null=True) + poster = TextField() radarr_id = IntegerField(column_name='radarrId', unique=True) - resolution = TextField(null=True) - scene_name = TextField(column_name='sceneName', null=True) - sort_title = TextField(column_name='sortTitle', null=True) - subtitles = TextField(null=True) + resolution = TextField() + scene_name = TextField(column_name='sceneName') + sort_title = TextField(column_name='sortTitle') + subtitles = TextField() title = TextField() tmdb_id = TextField(column_name='tmdbId', primary_key=True) - video_codec = TextField(null=True) - year = TextField(null=True) + video_codec = TextField() + year = TextField() class Meta: table_name = 'table_movies' @@ -118,13 +118,13 @@ class TableHistory(BaseModel): id = IntegerField(null=False) action = IntegerField() description = TextField() - language = TextField(null=True) - provider = TextField(null=True) - score = TextField(null=True) + language = TextField(null=False) + provider = TextField(null=False) + score = TextField(null=False) sonarr_episode_id = ForeignKeyField(TableEpisodes, field='sonarr_episode_id', column_name='sonarrEpisodeId') sonarr_series_id = ForeignKeyField(TableShows, field='sonarr_series_id', column_name='sonarrSeriesId') timestamp = IntegerField() - video_path = TextField(null=True) + video_path = TextField(null=False) class Meta: table_name = 'table_history' @@ -135,12 +135,12 @@ class TableHistoryMovie(BaseModel): id = IntegerField(null=False) action = IntegerField() description = TextField() - language = TextField(null=True) - provider = TextField(null=True) + language = TextField(null=False) + provider = TextField(null=False) radarr_id = ForeignKeyField(TableMovies, field='radarr_id', column_name='radarrId') - score = TextField(null=True) + score = TextField(null=False) timestamp = IntegerField() - video_path = TextField(null=True) + video_path = TextField(null=False) class Meta: table_name = 'table_history_movie' @@ -148,10 +148,10 @@ class TableHistoryMovie(BaseModel): class TableSettingsLanguages(BaseModel): - code2 = TextField(null=True) + code2 = TextField() code3 = TextField(primary_key=True) - code3b = TextField(null=True) - enabled = IntegerField(null=True) + code3b = TextField() + enabled = IntegerField() name = TextField() class Meta: @@ -159,9 +159,9 @@ class TableSettingsLanguages(BaseModel): class TableSettingsNotifier(BaseModel): - enabled = IntegerField(null=True) - name = TextField(null=True, primary_key=True) - url = TextField(null=True) + enabled = IntegerField() + name = TextField(primary_key=True) + url = TextField() class Meta: table_name = 'table_settings_notifier' From 10e73994e633c6f3f8fef94da7ec6316add427d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Mon, 16 Sep 2019 19:40:42 -0400 Subject: [PATCH 10/10] Revert "Removed erroneous null constraint on DB." This reverts commit d910cbcc --- bazarr/database.py | 110 ++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/bazarr/database.py b/bazarr/database.py index 014077d83..f5ec1d85c 100644 --- a/bazarr/database.py +++ b/bazarr/database.py @@ -34,8 +34,8 @@ class BaseModel(Model): class System(BaseModel): - configured = TextField() - updated = TextField() + configured = TextField(null=True) + updated = TextField(null=True) class Meta: table_name = 'system' @@ -43,41 +43,41 @@ class System(BaseModel): class TableShows(BaseModel): - alternate_titles = TextField(column_name='alternateTitles') - audio_language = TextField() - fanart = TextField() - forced = TextField() - hearing_impaired = TextField() - languages = TextField() - overview = TextField() + alternate_titles = TextField(column_name='alternateTitles', null=True) + audio_language = TextField(null=True) + fanart = TextField(null=True) + forced = TextField(null=True) + hearing_impaired = TextField(null=True) + languages = TextField(null=True) + overview = TextField(null=True) path = TextField(unique=True) - poster = TextField() + poster = TextField(null=True) sonarr_series_id = IntegerField(column_name='sonarrSeriesId', unique=True) - sort_title = TextField(column_name='sortTitle') + sort_title = TextField(column_name='sortTitle', null=True) title = TextField() tvdb_id = AutoField(column_name='tvdbId') - year = TextField() + year = TextField(null=True) class Meta: table_name = 'table_shows' class TableEpisodes(BaseModel): - audio_codec = TextField() + audio_codec = TextField(null=True) episode = IntegerField() - failed_attempts = TextField(column_name='failedAttempts') - format = TextField() - missing_subtitles = TextField() - monitored = TextField() + failed_attempts = TextField(column_name='failedAttempts', null=True) + format = TextField(null=True) + missing_subtitles = TextField(null=True) + monitored = TextField(null=True) path = TextField() - resolution = TextField() - scene_name = TextField() + resolution = TextField(null=True) + scene_name = TextField(null=True) season = IntegerField() sonarr_episode_id = IntegerField(column_name='sonarrEpisodeId', unique=True) sonarr_series_id = ForeignKeyField(TableShows, field='sonarr_series_id', column_name='sonarrSeriesId') - subtitles = TextField() + subtitles = TextField(null=True) title = TextField() - video_codec = TextField() + video_codec = TextField(null=True) class Meta: table_name = 'table_episodes' @@ -85,30 +85,30 @@ class TableEpisodes(BaseModel): class TableMovies(BaseModel): - alternative_titles = TextField(column_name='alternativeTitles') - audio_codec = TextField() - audio_language = TextField() - failed_attempts = TextField(column_name='failedAttempts') - fanart = TextField() - forced = TextField() - format = TextField() - hearing_impaired = TextField() - imdb_id = TextField(column_name='imdbId') - languages = TextField() - missing_subtitles = TextField() - monitored = TextField() - overview = TextField() + alternative_titles = TextField(column_name='alternativeTitles', null=True) + audio_codec = TextField(null=True) + audio_language = TextField(null=True) + failed_attempts = TextField(column_name='failedAttempts', null=True) + fanart = TextField(null=True) + forced = TextField(null=True) + format = TextField(null=True) + hearing_impaired = TextField(null=True) + imdb_id = TextField(column_name='imdbId', null=True) + languages = TextField(null=True) + missing_subtitles = TextField(null=True) + monitored = TextField(null=True) + overview = TextField(null=True) path = TextField(unique=True) - poster = TextField() + poster = TextField(null=True) radarr_id = IntegerField(column_name='radarrId', unique=True) - resolution = TextField() - scene_name = TextField(column_name='sceneName') - sort_title = TextField(column_name='sortTitle') - subtitles = TextField() + resolution = TextField(null=True) + scene_name = TextField(column_name='sceneName', null=True) + sort_title = TextField(column_name='sortTitle', null=True) + subtitles = TextField(null=True) title = TextField() tmdb_id = TextField(column_name='tmdbId', primary_key=True) - video_codec = TextField() - year = TextField() + video_codec = TextField(null=True) + year = TextField(null=True) class Meta: table_name = 'table_movies' @@ -118,13 +118,13 @@ class TableHistory(BaseModel): id = IntegerField(null=False) action = IntegerField() description = TextField() - language = TextField(null=False) - provider = TextField(null=False) - score = TextField(null=False) + language = TextField(null=True) + provider = TextField(null=True) + score = TextField(null=True) sonarr_episode_id = ForeignKeyField(TableEpisodes, field='sonarr_episode_id', column_name='sonarrEpisodeId') sonarr_series_id = ForeignKeyField(TableShows, field='sonarr_series_id', column_name='sonarrSeriesId') timestamp = IntegerField() - video_path = TextField(null=False) + video_path = TextField(null=True) class Meta: table_name = 'table_history' @@ -135,12 +135,12 @@ class TableHistoryMovie(BaseModel): id = IntegerField(null=False) action = IntegerField() description = TextField() - language = TextField(null=False) - provider = TextField(null=False) + language = TextField(null=True) + provider = TextField(null=True) radarr_id = ForeignKeyField(TableMovies, field='radarr_id', column_name='radarrId') - score = TextField(null=False) + score = TextField(null=True) timestamp = IntegerField() - video_path = TextField(null=False) + video_path = TextField(null=True) class Meta: table_name = 'table_history_movie' @@ -148,10 +148,10 @@ class TableHistoryMovie(BaseModel): class TableSettingsLanguages(BaseModel): - code2 = TextField() + code2 = TextField(null=True) code3 = TextField(primary_key=True) - code3b = TextField() - enabled = IntegerField() + code3b = TextField(null=True) + enabled = IntegerField(null=True) name = TextField() class Meta: @@ -159,9 +159,9 @@ class TableSettingsLanguages(BaseModel): class TableSettingsNotifier(BaseModel): - enabled = IntegerField() - name = TextField(primary_key=True) - url = TextField() + enabled = IntegerField(null=True) + name = TextField(null=True, primary_key=True) + url = TextField(null=True) class Meta: table_name = 'table_settings_notifier'