From: "Devan Franchini" <twitch153@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/layman:gsoc2014 commit in: layman/
Date: Fri, 16 May 2014 01:07:07 +0000 (UTC) [thread overview]
Message-ID: <1400202406.492e7bb8c6591c0fd5105c750612b1d6dc918403.twitch153@gentoo> (raw)
commit: 492e7bb8c6591c0fd5105c750612b1d6dc918403
Author: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
AuthorDate: Wed May 14 23:58:29 2014 +0000
Commit: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
CommitDate: Fri May 16 01:06:46 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/layman.git;a=commit;h=492e7bb8
argsparser.py: Migrates from optparse to argparse
Included with this patch is another flag, -C for config dir as well
as default values for configdir, config, and overlay_defs. Also
included is interpolation of these variables, because argparse lacks
the necessary interpolation.
---
layman/argsparser.py | 363 ++++++++++++++++++++++++++-------------------------
1 file changed, 184 insertions(+), 179 deletions(-)
diff --git a/layman/argsparser.py b/layman/argsparser.py
index dd1cc85..6e5fee3 100644
--- a/layman/argsparser.py
+++ b/layman/argsparser.py
@@ -31,7 +31,7 @@ __version__ = "$Id: config.py 286 2007-01-09 17:48:23Z wrobel $"
import sys
-from optparse import OptionParser, OptionGroup
+from argparse import ArgumentParser
from layman.config import BareConfig
from layman.constants import OFF
@@ -71,178 +71,182 @@ class ArgsParser(BareConfig):
BareConfig.__init__(self, stdout=stdout, stderr=stderr,
stdin=stdin, root=root)
- if args == None:
- args = sys.argv
# get a couple BareConfig items
self.defaults = self.get_defaults()
self.output = self.get_option('output')
- self.parser = OptionParser(
- usage = _USAGE,
- version = VERSION)
+ self.parser = ArgumentParser(
+ usage = _USAGE)
- self.parser.add_option('-H',
+ self.parser.add_argument('-V',
+ '--version',
+ action = 'version',
+ version = VERSION)
+
+ self.parser.add_argument('-H',
'--setup_help',
action = 'store_true',
help = 'Print the NEW INSTALL help messages.')
-
#-----------------------------------------------------------------
# Main Options
- group = OptionGroup(self.parser,
- '<Actions>')
-
- group.add_option('-a',
- '--add',
- action = 'append',
- help = 'Add the given overlay from the cached remote li'
- 'st to your locally installed overlays.. Specify "ALL" '
- 'to add all overlays from the remote list.')
-
- group.add_option('-d',
- '--delete',
- action = 'append',
- help = 'Remove the given overlay from your locally inst'
- 'alled overlays. Specify "ALL" to remove all overlays')
-
- group.add_option('-s',
- '--sync',
- action = 'append',
- help = 'Update the specified overlay. Use "ALL" as para'
- 'meter to synchronize all overlays')
-
- group.add_option('-i',
- '--info',
- action = 'append',
- help = 'Display information about the specified overlay'
- '.')
-
- group.add_option('-S',
- '--sync-all',
- action = 'store_true',
- help = 'Update all overlays.')
-
- group.add_option('-L',
- '--list',
- action = 'store_true',
- help = 'List the contents of the remote list.')
-
- group.add_option('-l',
- '--list-local',
- action = 'store_true',
- help = 'List the locally installed overlays.')
-
- group.add_option('-f',
- '--fetch',
- action = 'store_true',
- help = 'Fetch a remote list of overlays. This option is'
- ' deprecated. The fetch operation will be performed by '
- 'default when you run sync, sync-all, or list.')
-
- group.add_option('-n',
- '--nofetch',
- action = 'store_true',
- help = 'Do not fetch a remote list of overlays.')
-
- group.add_option('-p',
- '--priority',
- action = 'store',
- help = 'Use this with the --add switch to set the prior'
- 'ity of the added overlay. This will influence the sort'
- 'ing order of the overlays in the PORTDIR_OVERLAY varia'
- 'ble.')
-
- self.parser.add_option_group(group)
+ actions = self.parser.add_argument_group('<Actions>')
+
+ actions.add_argument('-a',
+ '--add',
+ action = 'append',
+ help = 'Add the given overlay from the cached remote li'
+ 'st to your locally installed overlays.. Specify "ALL" '
+ 'to add all overlays from the remote list.')
+
+ actions.add_argument('-d',
+ '--delete',
+ action = 'append',
+ help = 'Remove the given overlay from your locally inst'
+ 'alled overlays. Specify "ALL" to remove all overlays.')
+
+ actions.add_argument('-s',
+ '--sync',
+ action = 'append',
+ help = 'Update the specified overlay. Use "ALL" as para'
+ 'meter to synchronize all overlays.')
+
+ actions.add_argument('-i',
+ '--info',
+ action = 'append',
+ help = 'Display information about the specified overlay'
+ '.')
+
+ actions.add_argument('-S',
+ '--sync-all',
+ action = 'store_true',
+ help = 'Update all overlays.')
+
+ actions.add_argument('-L',
+ '--list',
+ action = 'store_true',
+ help = 'List the contents of the remote list.')
+
+ actions.add_argument('-l',
+ '--list-local',
+ action = 'store_true',
+ help = 'List the locally installed overlays.')
+
+ actions.add_argument('-f',
+ '--fetch',
+ action = 'store_true',
+ help = 'Fetch a remote list of overlays. This option is'
+ ' deprecated. The fetch operation will be performed by '
+ 'default when you run sync, sync-all, or list.')
+
+ actions.add_argument('-n',
+ '--nofetch',
+ action = 'store_true',
+ help = 'Do not fetch a remote list of overlays.')
+
+ actions.add_argument('-p',
+ '--priority',
+ action = 'store',
+ help = 'Use this with the --add switch to set the prior'
+ 'ity of the added overlay. This will influence the sort'
+ 'ing order of the overlays in the PORTDIR_OVERLAY varia'
+ 'ble.')
#-----------------------------------------------------------------
# Additional Options
- group = OptionGroup(self.parser,
- '<Path options>')
+ path_opts = self.parser.add_argument_group('<Path options>')
+
+ path_opts.add_argument('-C',
+ '--configdir',
+ action = 'store',
+ default = '/etc/layman',
+ help = 'Directory path to user for all layman configu'
+ 'ration information [default: /etc/layman].')
+
+ path_opts.add_argument('-c',
+ '--config',
+ action = 'store',
+ default = self.defaults['config'],
+ # Force interpolation (to prevent argparse tracebacks)
+ help = 'Path to the config file [default: '
+ '%s].' % (self.defaults['config'] %self.defaults))
- group.add_option('-c',
- '--config',
- action = 'store',
- help = 'Path to the config file [default: ' \
- + self.defaults['config'] + '].')
- group.add_option('-O',
- '--overlay_defs',
- action = 'store',
- help = 'Path to aditional overlay.xml files [default: '\
- + self.defaults['overlay_defs'] + '].')
- group.add_option('-o',
- '--overlays',
- action = 'append',
- help = 'The list of overlays [default: ' \
- + self.defaults['overlays'] + '].')
+ path_opts.add_argument('-O',
+ '--overlay_defs',
+ action = 'store',
+ default = self.defaults['overlay_defs'],
+ # Force interpolation (to prevent argparse tracebacks)
+ help = 'Path to aditional overlay.xml files [default: '
+ '%s].' % (self.defaults['overlay_defs'] %self.defaults))
- self.parser.add_option_group(group)
+ path_opts.add_argument('-o',
+ '--overlays',
+ action = 'append',
+ help = 'The list of overlays [default: ' \
+ + self.defaults['overlays'] + '].')
#-----------------------------------------------------------------
# Output Options
- group = OptionGroup(self.parser,
- '<Output options>')
-
- group.add_option('-v',
- '--verbose',
- action = 'store_true',
- help = 'Increase the amount of output and describe the '
- 'overlays.')
-
- group.add_option('-q',
- '--quiet',
- action = 'store_true',
- help = 'Yield no output. Please be careful with this op'
- 'tion: If the processes spawned by layman when adding o'
- 'r synchronizing overlays require any input layman will'
- ' hang without telling you why. This might happen for e'
- 'xample if your overlay resides in subversion and the S'
- 'SL certificate of the server needs acceptance.')
-
- group.add_option('-N',
- '--nocolor',
- action = 'store_true',
- help = 'Remove color codes from the layman output.')
-
- group.add_option('-Q',
- '--quietness',
- action = 'store',
- type = 'int',
- default = '4',
- help = 'Set the level of output (0-4). Default: 4. Once'
- ' you set this below 2 the same warning as given for --'
- 'quiet applies! ')
-
- group.add_option('-W',
- '--width',
- action = 'store',
- type = 'int',
- default = '0',
- help = 'Sets the screen width. This setting is usually '
- 'not required as layman is capable of detecting the '
- 'available number of columns automatically.')
-
- group.add_option('-k',
- '--nocheck',
- action = 'store_true',
- help = 'Do not check overlay definitions and do not i'
- 'ssue a warning if description or contact information'
- ' are missing.')
-
- group.add_option('--debug-level',
- action = 'store',
- type = 'int',
- help = 'A value between 0 and 10. 0 means no debugging '
- 'messages will be selected, 10 selects all debugging me'
- 'ssages. Default is "4".')
-
-
- self.parser.add_option_group(group)
+ out_opts = self.parser.add_argument_group('<Output options>')
+
+ out_opts.add_argument('-v',
+ '--verbose',
+ action = 'store_true',
+ help = 'Increase the amount of output and describe the '
+ 'overlays.')
+
+ out_opts.add_argument('-q',
+ '--quiet',
+ action = 'store_true',
+ help = 'Yield no output. Please be careful with this op'
+ 'tion: If the processes spawned by layman when adding o'
+ 'r synchronizing overlays require any input layman will'
+ ' hang without telling you why. This might happen for e'
+ 'xample if your overlay resides in subversion and the S'
+ 'SL certificate of the server needs acceptance.')
+
+ out_opts.add_argument('-N',
+ '--nocolor',
+ action = 'store_true',
+ help = 'Remove color codes from the layman output.')
+
+ out_opts.add_argument('-Q',
+ '--quietness',
+ action = 'store',
+ type = int,
+ default = 4,
+ help = 'Set the level of output (0-4). Default: 4. Once'
+ ' you set this below 2 the same warning as given for --'
+ 'quiet applies!')
+
+ out_opts.add_argument('-W',
+ '--width',
+ action = 'store',
+ type = int,
+ default = 0,
+ help = 'Sets the screen width. This setting is usually '
+ 'not required as layman is capable of detecting the '
+ 'available number of columns automatically.')
+
+ out_opts.add_argument('-k',
+ '--nocheck',
+ action = 'store_true',
+ help = 'Do not check overlay definitions and do not i'
+ 'ssue a warning if description or contact information'
+ ' are missing.')
+
+ out_opts.add_argument('--debug-level',
+ action = 'store',
+ type = int,
+ help = 'A value between 0 and 10. 0 means no debugging '
+ 'messages will be selected, 10 selects all debugging me'
+ 'ssages. Default is "4".')
#-----------------------------------------------------------------
# Debug Options
@@ -251,45 +255,46 @@ class ArgsParser(BareConfig):
# Parse the command line first since we need to get the config
# file option.
- if len(args) == 1:
- self.output.notice('Usage:%s' % _USAGE)
- sys.exit(0)
- (self.options, remain_args) = self.parser.parse_args(args)
- # remain_args starts with something like "bin/layman" ...
- if len(remain_args) > 1:
- self.parser.error("ArgsParser(): Unhandled parameters: %s"
- % ', '.join(('"%s"' % e) for e in remain_args[1:]))
+ # If no flags are present print out usage
+ if len(sys.argv) == 1:
+ self.output.notice('usage:%s' % _USAGE)
+ sys.exit(0)
- # handle debugging
- #self.output.cli_handle(self.options)
+ self.options = self.parser.parse_args()
+ self.options = vars(self.options)
+ # Applying interpolation of values
+ for v in ['configdir', 'config', 'overlay_defs']:
+ self.options[v] = self.options[v] % self.options
+ self.defaults[v] = self.options[v]
- if (self.options.__dict__.has_key('debug_level') and
- self.options.__dict__['debug_level']):
- dbglvl = int(self.options.__dict__['debug_level'])
+ if ('debug_level' in self.options and
+ self.options['debug_level']):
+ dbglvl = int(self.options['debug_level'])
if dbglvl < 0:
dbglvl = 0
if dbglvl > 10:
dbglvl = 10
self.output.set_debug_level(dbglvl)
- if self.options.__dict__['nocolor']:
+ if self.options['nocolor']:
self.output.set_colorize(OFF)
# Set only alternate config settings from the options
- if self.options.__dict__['config'] is not None:
- self.defaults['config'] = self.options.__dict__['config']
+ if self.options['config'] is not None:
+ self.defaults['config'] = self.options['config']
self.output.debug('ARGSPARSER: Got config file at ' + \
self.defaults['config'], 8)
else: # fix the config path
self.defaults['config'] = self.defaults['config'] \
% {'configdir': self.defaults['configdir']}
- if self.options.__dict__['overlay_defs'] is not None:
- self.defaults['overlay_defs'] = self.options.__dict__['overlay_defs']
+
+ if self.options['overlay_defs'] is not None:
+ self.defaults['overlay_defs'] = self.options['overlay_defs']
self.output.debug('ARGSPARSER: Got overlay_defs location at ' + \
self.defaults['overlay_defs'], 8)
- self._options['setup_help'] = self.options.__dict__['setup_help']
+ self._options['setup_help'] = self.options['setup_help']
# Now parse the config file
self.output.debug('ARGSPARSER: Reading config file at ' + \
@@ -297,19 +302,19 @@ class ArgsParser(BareConfig):
self.read_config(self.defaults)
# handle quietness
- if self.options.__dict__['quiet']:
+ if self.options['quiet']:
self.set_option('quiet', True)
- elif self.options.__dict__['quietness']:
- self.set_option('quietness', self.options.__dict__['quietness'])
+ elif self.options['quietness']:
+ self.set_option('quietness', self.options['quietness'])
def __getitem__(self, key):
if key == 'overlays':
overlays = ''
- if (key in list(self.options.__dict__.keys())
- and not self.options.__dict__[key] is None):
- overlays = '\n'.join(self.options.__dict__[key])
+ if (key in list(self.options.keys())
+ and not self.options[key] is None):
+ overlays = '\n'.join(self.options[key])
if self.config.has_option('MAIN', 'overlays'):
overlays += '\n' + self.config.get('MAIN', 'overlays')
if len(overlays):
@@ -317,9 +322,9 @@ class ArgsParser(BareConfig):
self.output.debug('ARGSPARSER: Retrieving options option: %s' % key, 9)
- if (key in list(self.options.__dict__.keys())
- and not self.options.__dict__[key] is None):
- return self.options.__dict__[key]
+ if (key in list(self.options.keys())
+ and not self.options[key] is False):
+ return self.options[key]
self.output.debug('ARGSPARSER: Retrieving config option: %s' % key, 9)
@@ -346,8 +351,9 @@ class ArgsParser(BareConfig):
self.output.debug('ARGSPARSER: Retrieving keys', 9)
- keys = [i for i in list(self.options.__dict__.keys())
- if not self.options.__dict__[i] is None]
+ keys = [i for i in list(self.options)
+ if not self.options[i] is False
+ and not self.options[i] is None]
self.output.debug('ARGSPARSER: Retrieving keys 2', 9)
@@ -358,7 +364,6 @@ class ArgsParser(BareConfig):
keys += [i for i in list(self.defaults.keys())
if not i in keys]
-
self.output.debug('ARGSPARSER: Returning keys', 9)
return keys
next reply other threads:[~2014-05-16 1:07 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-16 1:07 Devan Franchini [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-08-15 23:59 [gentoo-commits] proj/layman:master commit in: layman/ Devan Franchini
2014-08-16 0:00 ` [gentoo-commits] proj/layman:gsoc2014 " Devan Franchini
2014-08-15 22:32 Devan Franchini
2014-08-15 22:32 Devan Franchini
2014-08-15 22:32 Devan Franchini
2014-08-15 22:32 Devan Franchini
2014-06-27 4:07 Devan Franchini
2014-06-27 4:07 Devan Franchini
2014-06-27 4:07 Devan Franchini
2014-06-16 3:40 [gentoo-commits] proj/layman:master " Brian Dolbec
2014-06-16 3:37 ` [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16 3:40 [gentoo-commits] proj/layman:master " Brian Dolbec
2014-06-16 3:37 ` [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16 3:40 [gentoo-commits] proj/layman:master " Brian Dolbec
2014-06-16 3:37 ` [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16 3:37 Brian Dolbec
2014-06-16 3:37 Brian Dolbec
2014-06-16 3:37 Brian Dolbec
2014-06-16 3:37 Brian Dolbec
2014-05-16 2:30 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 1:07 Devan Franchini
2014-05-16 0:58 Devan Franchini
2014-05-16 0:58 Devan Franchini
2014-05-16 0:57 Devan Franchini
2014-05-15 20:46 Devan Franchini
2014-05-15 20:46 Devan Franchini
2014-05-15 20:37 Devan Franchini
2014-05-15 20:30 Devan Franchini
2014-05-15 20:02 Devan Franchini
2014-05-15 0:04 Devan Franchini
2014-05-14 23:54 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 23:49 Devan Franchini
2014-05-14 22:16 Devan Franchini
2014-05-14 22:08 Devan Franchini
2014-05-14 21:42 Devan Franchini
2014-05-14 21:30 Devan Franchini
2014-05-14 21:15 Devan Franchini
2014-05-14 21:15 Devan Franchini
2014-05-14 19:29 Devan Franchini
2014-05-14 18:55 Devan Franchini
2014-05-14 18:44 Devan Franchini
2014-05-14 17:32 Devan Franchini
2014-05-14 3:21 Devan Franchini
2014-05-14 0:37 Devan Franchini
2014-05-07 22:21 Devan Franchini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1400202406.492e7bb8c6591c0fd5105c750612b1d6dc918403.twitch153@gentoo \
--to=twitch153@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox