3
from optparse import OptionParser as OptParser, SUPPRESS_HELP
7
class OptionParser(OptParser):
8
"""Contains all the options that both the core and webui should have"""
10
def __init__(self, **kwargs):
11
# Do this early, so even option processing stuff is caught
12
if '--bugreport' in sys.argv:
13
self._debug_tb_callback()
15
OptParser.__init__(self, **kwargs)
17
self.version = flexget.__version__
18
self.add_option('-V', '--version', action='version',
19
help='Print FlexGet version and exit.')
20
self.add_option('--bugreport', action='callback', callback=self._debug_tb_callback, dest='debug_tb',
21
help="Use this option to create a detailed bug report,"
22
" note that the output might contain PRIVATE data, so edit that out")
23
self.add_option('--logfile', action='store', dest='logfile', default='flexget.log',
24
help='Specify a custom logfile name/location. Default is flexget.log in the config directory.')
25
self.add_option('--debug', action='callback', callback=self._debug_callback, dest='debug',
27
self.add_option('--debug-trace', action='callback', callback=self._debug_callback, dest='debug_trace',
29
self.add_option('--loglevel', action='store', type='choice', default='verbose', dest='loglevel',
30
choices=['none', 'critical', 'error', 'warning', 'info', 'verbose', 'debug', 'trace'],
32
self.add_option('--debug-sql', action='store_true', dest='debug_sql', default=False,
34
self.add_option('-c', action='store', dest='config', default='config.yml',
35
help='Specify configuration file. Default is config.yml')
36
self.add_option('--experimental', action='store_true', dest='experimental', default=False,
38
self.add_option('--del-db', action='store_true', dest='del_db', default=False,
40
self.add_option('--profile', action='store_true', dest='profile', default=False, help=SUPPRESS_HELP)
42
def _debug_callback(self, option, opt, value, parser):
43
setattr(parser.values, option.dest, 1)
44
if option.dest == 'debug':
45
setattr(parser.values, 'loglevel', 'debug')
46
elif option.dest == 'debug_trace':
47
setattr(parser.values, 'debug', 1)
48
setattr(parser.values, 'loglevel', 'trace')
50
def _debug_tb_callback(self, *dummy):
52
cgitb.enable(format="text")
55
class CoreOptionParser(OptionParser):
56
"""Contains all the options that should only be used when running without a ui"""
58
def __init__(self, unit_test=False, **kwargs):
59
OptionParser.__init__(self, **kwargs)
61
self._unit_test = unit_test
63
self.add_option('--log-start', action='store_true', dest='log_start', default=0,
65
self.add_option('--test', action='store_true', dest='test', default=0,
66
help='Verbose what would happen on normal execution.')
67
self.add_option('--check', action='store_true', dest='validate', default=0,
68
help='Validate configuration file and print errors.')
69
self.add_option('--learn', action='store_true', dest='learn', default=0,
70
help='Matches are not downloaded but will be skipped in the future.')
71
self.add_option('--no-cache', action='store_true', dest='nocache', default=0,
72
help='Disable caches. Works only in plugins that have explicit support.')
73
self.add_option('--reset', action='store_true', dest='reset', default=0,
74
help='DANGEROUS. Obliterates the database and runs with learn in order to to regain useful state.')
75
# TODO: rename dest to cron, since this does more than just quiet
76
self.add_option('--cron', action='store_true', dest='quiet', default=False,
77
help='Disables stdout and stderr output, log file used. Reduces logging level slightly.')
78
self.add_option('--db-cleanup', action='store_true', dest='db_cleanup', default=False,
79
help='Forces the database cleanup event to run right now.')
81
# Plugins should respect this flag and retry where appropriate
82
self.add_option('--retry', action='store_true', dest='retry', default=0, help=SUPPRESS_HELP)
84
self.add_option('--validate', action='store_true', dest='validate', default=False,
88
self.add_option('--migrate', action='store', dest='migrate', default=None,
91
# provides backward compatibility to --cron and -d
92
self.add_option('-q', '--quiet', action='store_true', dest='quiet', default=False,
95
def parse_args(self, args=None):
96
result = OptParser.parse_args(self, args or self._unit_test and ['flexget', '--reset'] or None)
99
if options.test and (options.learn or options.reset):
100
self.error('--test and %s are mutually exclusive' % ('--learn' if options.learn else '--reset'))
102
# reset and migrate should be executed with learn
103
if (options.reset and not self._unit_test) or options.migrate:
106
# Lower the log level when executed with --cron
108
options.loglevel = 'info'