Option parsing refactoring ; Moved version string to __version__
Brings terser option formatting to youtube-dl: from: -u USERNAME, --username USERNAME to: -u, --username USERNAME
This commit is contained in:
parent
5fb3df4aff
commit
4f9f96f646
1 changed files with 142 additions and 108 deletions
90
youtube-dl
90
youtube-dl
|
@ -12,6 +12,7 @@ __author__ = (
|
||||||
)
|
)
|
||||||
|
|
||||||
__license__ = "Public Domain"
|
__license__ = "Public Domain"
|
||||||
|
__version__ = '2011.08.04'
|
||||||
|
|
||||||
import cookielib
|
import cookielib
|
||||||
import ctypes
|
import ctypes
|
||||||
|
@ -2725,59 +2726,80 @@ def updateSelf(downloader, filename):
|
||||||
downloader.to_screen('Updated to version %s' % latest_version)
|
downloader.to_screen('Updated to version %s' % latest_version)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def parseOpts():
|
||||||
try:
|
# Deferred imports
|
||||||
# Modules needed only when running the main program
|
|
||||||
import getpass
|
import getpass
|
||||||
import optparse
|
import optparse
|
||||||
|
|
||||||
|
def _format_option_string(option):
|
||||||
|
''' ('-o', '--option') -> -o, --format METAVAR'''
|
||||||
|
|
||||||
# Parse command line
|
opts = []
|
||||||
parser = optparse.OptionParser(
|
|
||||||
usage='Usage: %prog [options] url...',
|
|
||||||
version='2011.08.04',
|
|
||||||
conflict_handler='resolve',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_option('-h', '--help',
|
if option._short_opts: opts.append(option._short_opts[0])
|
||||||
|
if option._long_opts: opts.append(option._long_opts[0])
|
||||||
|
if len(opts) > 1: opts.insert(1, ', ')
|
||||||
|
|
||||||
|
if option.takes_value(): opts.append(' %s' % option.metavar)
|
||||||
|
|
||||||
|
return "".join(opts)
|
||||||
|
|
||||||
|
fmt = optparse.IndentedHelpFormatter()
|
||||||
|
fmt.format_option_strings = _format_option_string
|
||||||
|
|
||||||
|
kw = {
|
||||||
|
'version' : __version__,
|
||||||
|
'formatter' : fmt,
|
||||||
|
'usage' : 'Usage : %prog [options] url...',
|
||||||
|
'conflict_handler' : 'resolve',
|
||||||
|
}
|
||||||
|
|
||||||
|
parser = optparse.OptionParser(**kw)
|
||||||
|
|
||||||
|
# option groups
|
||||||
|
general = optparse.OptionGroup(parser, 'General Options')
|
||||||
|
authentication = optparse.OptionGroup(parser, 'Authentication Options')
|
||||||
|
video_format = optparse.OptionGroup(parser, 'Video Format Options')
|
||||||
|
postproc = optparse.OptionGroup(parser, 'Post-processing Options')
|
||||||
|
filesystem = optparse.OptionGroup(parser, 'Filesystem Options')
|
||||||
|
verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options')
|
||||||
|
|
||||||
|
general.add_option('-h', '--help',
|
||||||
action='help', help='print this help text and exit')
|
action='help', help='print this help text and exit')
|
||||||
parser.add_option('-v', '--version',
|
general.add_option('-v', '--version',
|
||||||
action='version', help='print program version and exit')
|
action='version', help='print program version and exit')
|
||||||
parser.add_option('-U', '--update',
|
general.add_option('-U', '--update',
|
||||||
action='store_true', dest='update_self', help='update this program to latest stable version')
|
action='store_true', dest='update_self', help='update this program to latest stable version')
|
||||||
parser.add_option('-i', '--ignore-errors',
|
general.add_option('-i', '--ignore-errors',
|
||||||
action='store_true', dest='ignoreerrors', help='continue on download errors', default=False)
|
action='store_true', dest='ignoreerrors', help='continue on download errors', default=False)
|
||||||
parser.add_option('-r', '--rate-limit',
|
general.add_option('-r', '--rate-limit',
|
||||||
dest='ratelimit', metavar='LIMIT', help='download rate limit (e.g. 50k or 44.6m)')
|
dest='ratelimit', metavar='LIMIT', help='download rate limit (e.g. 50k or 44.6m)')
|
||||||
parser.add_option('-R', '--retries',
|
general.add_option('-R', '--retries',
|
||||||
dest='retries', metavar='RETRIES', help='number of retries (default is 10)', default=10)
|
dest='retries', metavar='RETRIES', help='number of retries (default is 10)', default=10)
|
||||||
parser.add_option('--playlist-start',
|
general.add_option('--playlist-start',
|
||||||
dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is 1)', default=1)
|
dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is 1)', default=1)
|
||||||
parser.add_option('--playlist-end',
|
general.add_option('--playlist-end',
|
||||||
dest='playlistend', metavar='NUMBER', help='playlist video to end at (default is last)', default=-1)
|
dest='playlistend', metavar='NUMBER', help='playlist video to end at (default is last)', default=-1)
|
||||||
parser.add_option('--dump-user-agent',
|
general.add_option('--dump-user-agent',
|
||||||
action='store_true', dest='dump_user_agent',
|
action='store_true', dest='dump_user_agent',
|
||||||
help='display the current browser identification', default=False)
|
help='display the current browser identification', default=False)
|
||||||
|
|
||||||
authentication = optparse.OptionGroup(parser, 'Authentication Options')
|
|
||||||
authentication.add_option('-u', '--username',
|
authentication.add_option('-u', '--username',
|
||||||
dest='username', metavar='USERNAME', help='account username')
|
dest='username', metavar='USERNAME', help='account username')
|
||||||
authentication.add_option('-p', '--password',
|
authentication.add_option('-p', '--password',
|
||||||
dest='password', metavar='PASSWORD', help='account password')
|
dest='password', metavar='PASSWORD', help='account password')
|
||||||
authentication.add_option('-n', '--netrc',
|
authentication.add_option('-n', '--netrc',
|
||||||
action='store_true', dest='usenetrc', help='use .netrc authentication data', default=False)
|
action='store_true', dest='usenetrc', help='use .netrc authentication data', default=False)
|
||||||
parser.add_option_group(authentication)
|
|
||||||
|
|
||||||
video_format = optparse.OptionGroup(parser, 'Video Format Options')
|
|
||||||
video_format.add_option('-f', '--format',
|
video_format.add_option('-f', '--format',
|
||||||
action='store', dest='format', metavar='FORMAT', help='video format code')
|
action='store', dest='format', metavar='FORMAT', help='video format code')
|
||||||
video_format.add_option('--all-formats',
|
video_format.add_option('--all-formats',
|
||||||
action='store_const', dest='format', help='download all available video formats', const='-1')
|
action='store_const', dest='format', help='download all available video formats', const='-1')
|
||||||
video_format.add_option('--max-quality',
|
video_format.add_option('--max-quality',
|
||||||
action='store', dest='format_limit', metavar='FORMAT', help='highest quality format to download')
|
action='store', dest='format_limit', metavar='FORMAT', help='highest quality format to download')
|
||||||
parser.add_option_group(video_format)
|
|
||||||
|
|
||||||
verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options')
|
|
||||||
verbosity.add_option('-q', '--quiet',
|
verbosity.add_option('-q', '--quiet',
|
||||||
action='store_true', dest='quiet', help='activates quiet mode', default=False)
|
action='store_true', dest='quiet', help='activates quiet mode', default=False)
|
||||||
verbosity.add_option('-s', '--simulate',
|
verbosity.add_option('-s', '--simulate',
|
||||||
|
@ -2800,9 +2822,8 @@ if __name__ == '__main__':
|
||||||
verbosity.add_option('--console-title',
|
verbosity.add_option('--console-title',
|
||||||
action='store_true', dest='consoletitle',
|
action='store_true', dest='consoletitle',
|
||||||
help='display progress in console titlebar', default=False)
|
help='display progress in console titlebar', default=False)
|
||||||
parser.add_option_group(verbosity)
|
|
||||||
|
|
||||||
filesystem = optparse.OptionGroup(parser, 'Filesystem Options')
|
|
||||||
filesystem.add_option('-t', '--title',
|
filesystem.add_option('-t', '--title',
|
||||||
action='store_true', dest='usetitle', help='use title in file name', default=False)
|
action='store_true', dest='usetitle', help='use title in file name', default=False)
|
||||||
filesystem.add_option('-l', '--literal',
|
filesystem.add_option('-l', '--literal',
|
||||||
|
@ -2825,16 +2846,29 @@ if __name__ == '__main__':
|
||||||
filesystem.add_option('--no-mtime',
|
filesystem.add_option('--no-mtime',
|
||||||
action='store_false', dest='updatetime',
|
action='store_false', dest='updatetime',
|
||||||
help='do not use the Last-modified header to set the file modification time', default=True)
|
help='do not use the Last-modified header to set the file modification time', default=True)
|
||||||
parser.add_option_group(filesystem)
|
|
||||||
|
|
||||||
postproc = optparse.OptionGroup(parser, 'Post-processing Options')
|
|
||||||
postproc.add_option('--extract-audio', action='store_true', dest='extractaudio', default=False,
|
postproc.add_option('--extract-audio', action='store_true', dest='extractaudio', default=False,
|
||||||
help='convert video files to audio-only files (requires ffmpeg and ffprobe)')
|
help='convert video files to audio-only files (requires ffmpeg and ffprobe)')
|
||||||
postproc.add_option('--audio-format', metavar='FORMAT', dest='audioformat', default='best',
|
postproc.add_option('--audio-format', metavar='FORMAT', dest='audioformat', default='best',
|
||||||
help='"best", "aac" or "mp3"; best by default')
|
help='"best", "aac" or "mp3"; best by default')
|
||||||
|
|
||||||
|
|
||||||
|
parser.add_option_group(general)
|
||||||
|
parser.add_option_group(filesystem)
|
||||||
|
parser.add_option_group(verbosity)
|
||||||
|
parser.add_option_group(video_format)
|
||||||
|
parser.add_option_group(authentication)
|
||||||
parser.add_option_group(postproc)
|
parser.add_option_group(postproc)
|
||||||
|
|
||||||
(opts, args) = parser.parse_args()
|
opts, args = parser.parse_args()
|
||||||
|
|
||||||
|
return parser, opts, args
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
parser, opts, args = parseOpts()
|
||||||
|
|
||||||
# Open appropriate CookieJar
|
# Open appropriate CookieJar
|
||||||
if opts.cookiefile is None:
|
if opts.cookiefile is None:
|
||||||
|
|
Loading…
Reference in a new issue