flexget.options
Covered: 81 lines
Missed: 1 lines
Skipped 29 lines
Percent: 98 %
  1
import os
  2
import sys
  3
from optparse import OptionParser as OptParser, SUPPRESS_HELP
  4
import flexget
  7
class OptionParser(OptParser):
  8
    """Contains all the options that both the core and webui should have"""
 10
    def __init__(self, **kwargs):
 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',
 26
                        help=SUPPRESS_HELP)
 27
        self.add_option('--debug-trace', action='callback', callback=self._debug_callback, dest='debug_trace',
 28
                        help=SUPPRESS_HELP)
 29
        self.add_option('--loglevel', action='store', type='choice', default='verbose', dest='loglevel',
 30
                        choices=['none', 'critical', 'error', 'warning', 'info', 'verbose', 'debug', 'trace'],
 31
                        help=SUPPRESS_HELP)
 32
        self.add_option('--debug-sql', action='store_true', dest='debug_sql', default=False,
 33
                        help=SUPPRESS_HELP)
 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,
 37
                        help=SUPPRESS_HELP)
 38
        self.add_option('--del-db', action='store_true', dest='del_db', default=False,
 39
                        help=SUPPRESS_HELP)
 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):
 51
        import cgitb
 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,
 64
                        help=SUPPRESS_HELP)
 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.')
 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.')
 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,
 85
                        help=SUPPRESS_HELP)
 88
        self.add_option('--migrate', action='store', dest='migrate', default=None,
 89
                        help=SUPPRESS_HELP)
 92
        self.add_option('-q', '--quiet', action='store_true', dest='quiet', default=False,
 93
                        help=SUPPRESS_HELP)
 95
    def parse_args(self, args=None):
 96
        result = OptParser.parse_args(self, args or self._unit_test and ['flexget', '--reset'] or None)
 97
        options = result[0]
 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'))
103
        if (options.reset and not self._unit_test) or options.migrate:
104
            options.learn = True
107
        if options.quiet:
108
            options.loglevel = 'info'
110
        return options, args