parent
b1a0e5e0ea
commit
98e3ff14a7
@ -1,224 +0,0 @@
|
||||
import os
|
||||
import atexit
|
||||
|
||||
from get_args import args
|
||||
from peewee import *
|
||||
from playhouse.sqliteq import SqliteQueueDatabase
|
||||
from playhouse.migrate import *
|
||||
|
||||
from helper import path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie
|
||||
|
||||
database = SqliteQueueDatabase(
|
||||
None,
|
||||
use_gevent=False,
|
||||
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.
|
||||
)
|
||||
|
||||
|
||||
@database.func('path_substitution')
|
||||
def path_substitution(path):
|
||||
return path_replace(path)
|
||||
|
||||
|
||||
@database.func('path_substitution_movie')
|
||||
def path_substitution_movie(path):
|
||||
return path_replace_movie(path)
|
||||
|
||||
|
||||
class UnknownField(object):
|
||||
def __init__(self, *_, **__): pass
|
||||
|
||||
class BaseModel(Model):
|
||||
class Meta:
|
||||
database = database
|
||||
|
||||
|
||||
class System(BaseModel):
|
||||
configured = TextField(null=True)
|
||||
updated = TextField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'system'
|
||||
primary_key = False
|
||||
|
||||
|
||||
class TableShows(BaseModel):
|
||||
alternate_titles = TextField(column_name='alternateTitles', null=True)
|
||||
audio_language = TextField(null=True)
|
||||
fanart = TextField(null=True)
|
||||
forced = TextField(null=True, constraints=[SQL('DEFAULT "False"')])
|
||||
hearing_impaired = TextField(null=True)
|
||||
languages = TextField(null=True)
|
||||
overview = TextField(null=True)
|
||||
path = TextField(null=False, unique=True)
|
||||
poster = TextField(null=True)
|
||||
sonarr_series_id = IntegerField(column_name='sonarrSeriesId', null=True, unique=True)
|
||||
sort_title = TextField(column_name='sortTitle', null=True)
|
||||
title = TextField(null=True)
|
||||
tvdb_id = IntegerField(column_name='tvdbId', null=True, unique=True, primary_key=True)
|
||||
year = TextField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_shows'
|
||||
|
||||
|
||||
class TableEpisodes(BaseModel):
|
||||
rowid = IntegerField()
|
||||
audio_codec = TextField(null=True)
|
||||
episode = IntegerField(null=False)
|
||||
failed_attempts = TextField(column_name='failedAttempts', null=True)
|
||||
format = TextField(null=True)
|
||||
missing_subtitles = TextField(null=True)
|
||||
monitored = TextField(null=True)
|
||||
path = TextField(null=False)
|
||||
resolution = TextField(null=True)
|
||||
scene_name = TextField(null=True)
|
||||
season = IntegerField(null=False)
|
||||
sonarr_episode_id = IntegerField(column_name='sonarrEpisodeId', unique=True, null=False)
|
||||
sonarr_series_id = ForeignKeyField(TableShows, field='sonarr_series_id', column_name='sonarrSeriesId', null=False)
|
||||
subtitles = TextField(null=True)
|
||||
title = TextField(null=True)
|
||||
video_codec = TextField(null=True)
|
||||
episode_file_id = IntegerField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_episodes'
|
||||
primary_key = False
|
||||
|
||||
|
||||
class TableMovies(BaseModel):
|
||||
rowid = IntegerField()
|
||||
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, constraints=[SQL('DEFAULT "False"')])
|
||||
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(null=True)
|
||||
radarr_id = IntegerField(column_name='radarrId', null=False, 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)
|
||||
title = TextField(null=False)
|
||||
tmdb_id = TextField(column_name='tmdbId', primary_key=True, null=False)
|
||||
video_codec = TextField(null=True)
|
||||
year = TextField(null=True)
|
||||
movie_file_id = IntegerField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_movies'
|
||||
|
||||
|
||||
class TableHistory(BaseModel):
|
||||
id = PrimaryKeyField(null=False)
|
||||
action = IntegerField(null=False)
|
||||
description = 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', null=False)
|
||||
sonarr_series_id = ForeignKeyField(TableShows, field='sonarr_series_id', column_name='sonarrSeriesId', null=False)
|
||||
timestamp = IntegerField(null=False)
|
||||
video_path = TextField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_history'
|
||||
|
||||
|
||||
class TableHistoryMovie(BaseModel):
|
||||
id = PrimaryKeyField(null=False)
|
||||
action = IntegerField(null=False)
|
||||
description = TextField(null=False)
|
||||
language = TextField(null=True)
|
||||
provider = TextField(null=True)
|
||||
radarr_id = ForeignKeyField(TableMovies, field='radarr_id', column_name='radarrId', null=False)
|
||||
score = TextField(null=True)
|
||||
timestamp = IntegerField(null=False)
|
||||
video_path = TextField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_history_movie'
|
||||
|
||||
|
||||
class TableSettingsLanguages(BaseModel):
|
||||
code2 = TextField(null=False)
|
||||
code3 = TextField(null=False, unique=True, primary_key=True)
|
||||
code3b = TextField(null=True)
|
||||
enabled = IntegerField(null=True)
|
||||
name = TextField(null=False)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_settings_languages'
|
||||
|
||||
|
||||
class TableSettingsNotifier(BaseModel):
|
||||
enabled = IntegerField(null=False)
|
||||
name = TextField(null=False, primary_key=True)
|
||||
url = TextField(null=True)
|
||||
|
||||
class Meta:
|
||||
table_name = 'table_settings_notifier'
|
||||
|
||||
|
||||
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.
|
||||
database.cache_size = -1024 # Number of KB of cache for wal-journal.
|
||||
# Must be negative because positive means number of pages.
|
||||
database.wal_autocheckpoint = 50 # Run an automatic checkpoint every 50 write transactions.
|
||||
|
||||
# Database tables creation if they don't exists
|
||||
models_list = [TableShows, TableEpisodes, TableMovies, TableHistory, TableHistoryMovie, TableSettingsLanguages,
|
||||
TableSettingsNotifier, System]
|
||||
|
||||
database.create_tables(models_list, safe=True)
|
||||
|
||||
# Upgrade DB schema
|
||||
database_upgrade()
|
||||
|
||||
|
||||
def database_upgrade():
|
||||
# Database migration
|
||||
migrator = SqliteMigrator(database)
|
||||
|
||||
# TableShows migration
|
||||
table_shows_columns = []
|
||||
for column in database.get_columns('table_shows'):
|
||||
table_shows_columns.append(column.name)
|
||||
if 'forced' not in table_shows_columns:
|
||||
migrate(migrator.add_column('table_shows', 'forced', TableShows.forced))
|
||||
|
||||
# TableEpisodes migration
|
||||
table_episodes_columns = []
|
||||
for column in database.get_columns('table_episodes'):
|
||||
table_episodes_columns.append(column.name)
|
||||
if 'episode_file_id' not in table_episodes_columns:
|
||||
migrate(migrator.add_column('table_episodes', 'episode_file_id', TableEpisodes.episode_file_id))
|
||||
|
||||
# TableMovies migration
|
||||
table_movies_columns = []
|
||||
for column in database.get_columns('table_movies'):
|
||||
table_movies_columns.append(column.name)
|
||||
if 'forced' not in table_movies_columns:
|
||||
migrate(migrator.add_column('table_movies', 'forced', TableMovies.forced))
|
||||
if 'movie_file_id' not in table_movies_columns:
|
||||
migrate(migrator.add_column('table_movies', 'movie_file_id', TableMovies.movie_file_id))
|
||||
|
||||
|
||||
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.
|
Loading…
Reference in new issue