Source code for flexget.plugins.cli.database
from argparse import ArgumentParser
from sqlalchemy import text
from flexget import options
from flexget.db_schema import plugin_schemas, reset_schema
from flexget.event import event
from flexget.manager import Base, Session
from flexget.terminal import console
[docs]
def do_cli(manager, options):
with manager.acquire_lock():
if options.db_action == 'cleanup':
cleanup(manager)
elif options.db_action == 'vacuum':
vacuum()
elif options.db_action == 'reset':
reset(manager)
elif options.db_action == 'reset-plugin':
reset_plugin(options)
[docs]
def cleanup(manager):
manager.db_cleanup(force=True)
console('Database cleanup complete.')
[docs]
def vacuum():
console('Running VACUUM on sqlite database, this could take a while.')
session = Session()
try:
session.execute(text('VACUUM'))
session.commit()
finally:
session.close()
console('VACUUM complete.')
[docs]
def reset(manager):
Base.metadata.drop_all(bind=manager.engine)
Base.metadata.create_all(bind=manager.engine)
console('The FlexGet database has been reset.')
[docs]
def reset_plugin(options):
plugin = options.plugin_name[0]
try:
reset_schema(plugin)
console(f'The database for `{plugin}` has been reset.')
except ValueError as e:
console(f'Unable to reset {plugin}: {e.message}')
[docs]
@event('options.register')
def register_parser_arguments():
plugins_parser = ArgumentParser(add_help=False)
plugins_parser.add_argument(
'plugin_name', help='Name of plugin to reset', nargs=1, choices=list(plugin_schemas)
)
parser = options.register_command(
'database', do_cli, help='Utilities to manage the FlexGet database'
)
subparsers = parser.add_subparsers(title='Actions', metavar='<action>', dest='db_action')
subparsers.add_parser(
'cleanup', help='Make all plugins clean un-needed data from the database'
)
subparsers.add_parser(
'vacuum', help='Running vacuum can increase performance and decrease database size'
)
reset_parser = subparsers.add_parser(
'reset', add_help=False, help='Reset the entire database (DANGEROUS!)'
)
reset_parser.add_argument(
'--sure',
action='store_true',
required=True,
help='You must use this flag to indicate you REALLY want to do this',
)
subparsers.add_parser(
'reset-plugin', help='Reset the database for a specific plugin', parents=[plugins_parser]
)