diff --git a/bazarr/database.py b/bazarr/database.py index 44fa35ac1..0619773d2 100644 --- a/bazarr/database.py +++ b/bazarr/database.py @@ -3,6 +3,7 @@ import atexit import json import ast import logging +import gevent from peewee import * from playhouse.sqliteq import SqliteQueueDatabase from playhouse.shortcuts import model_to_dict @@ -231,24 +232,34 @@ class TableShowsRootfolder(BaseModel): primary_key = False -# Create tables if they don't exists. -database.create_tables([System, - TableBlacklist, - TableBlacklistMovie, - TableEpisodes, - TableHistory, - TableHistoryMovie, - TableLanguagesProfiles, - TableMovies, - TableMoviesRootfolder, - TableSettingsLanguages, - TableSettingsNotifier, - TableShows, - TableShowsRootfolder]) +def init_db(): + # Create tables if they don't exists. + database.create_tables([System, + TableBlacklist, + TableBlacklistMovie, + TableEpisodes, + TableHistory, + TableHistoryMovie, + TableLanguagesProfiles, + TableMovies, + TableMoviesRootfolder, + TableSettingsLanguages, + TableSettingsNotifier, + TableShows, + TableShowsRootfolder]) + + # add the system table single row if it's not existing + # we must retry until the tables are created + tables_created = False + while not tables_created: + try: + if not System.select().count(): + System.insert({System.configured: '0', System.updated: '0'}).execute() + except: + gevent.sleep(0.1) + else: + tables_created = True -# add the system table single row if it's not existing -if not System.select().count(): - System.insert({System.configured: '0', System.updated: '0'}).execute() class SqliteDictPathMapper: def __init__(self): diff --git a/bazarr/init.py b/bazarr/init.py index 176f03bf5..dcaf0c776 100644 --- a/bazarr/init.py +++ b/bazarr/init.py @@ -10,6 +10,7 @@ from config import settings, configure_captcha_func from get_args import args from logger import configure_logging from helper import path_mappings +from database import init_db from dogpile.cache.region import register_backend as register_cache_backend import subliminal @@ -174,5 +175,6 @@ def init_binaries(): return unrar +init_db() init_binaries() path_mappings.update()