Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-06-27 15:28:08 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-06-27 16:16:22 (GMT)
commit729303a97cff64db18f70ad80d302f06dce1646d (patch)
treed628461bf546ea65218eed47eb2483ab2085b3bb
parentce83769b20f8ed1fccd1b98a77ae1882f7af8b7a (diff)
Stop parsing command-line arguments on command level
-rw-r--r--sugar_network/toolkit/application.py25
1 files changed, 16 insertions, 9 deletions
diff --git a/sugar_network/toolkit/application.py b/sugar_network/toolkit/application.py
index 81a8e6a..e906d93 100644
--- a/sugar_network/toolkit/application.py
+++ b/sugar_network/toolkit/application.py
@@ -60,16 +60,17 @@ rundir = Option(
_LOGFILE_FORMAT = '%(asctime)s %(levelname)s %(name)s: %(message)s'
-def command(description='', name=None, args=None, hidden=False, **options):
+def command(description='', name=None, args=None, hidden=False,
+ interspersed_args=True, **options):
def decorator(func):
- # pylint: disable-msg=W0212
- func._is_command = True
+ func.is_command = True
func.name = name
func.description = description
func.args = args
func.options = options
func.hidden = hidden
+ func.interspersed_args = interspersed_args
return func
return decorator
@@ -78,17 +79,22 @@ def command(description='', name=None, args=None, hidden=False, **options):
class Application(object):
def __init__(self, name, description=None, version=None, epilog=None,
- where=None, **parse_args):
+ where=None, **kwargs):
self._rundir = None
self.args = None
self.name = name
-
self._commands = {}
+
+ stop_args = []
for name in dir(self.__class__):
attr = getattr(self.__class__, name)
- if hasattr(attr, '_is_command') and \
- (attr.name != 'config' or 'config_files' in parse_args):
- self._commands[attr.name or name] = getattr(self, name)
+ if not hasattr(attr, 'is_command') or \
+ (attr.name == 'config' and 'config_files' not in kwargs):
+ continue
+ cmd_name = attr.name or name
+ cmd = self._commands[cmd_name] = getattr(self, name)
+ if not cmd.interspersed_args:
+ stop_args.append(cmd_name)
parser = OptionParser(usage='%prog [OPTIONS]', description=description,
add_help_option=False)
@@ -103,7 +109,8 @@ class Application(object):
help=_('show this help message and exit'),
action='store_true')
- options, self.args = Option.parse_args(parser, **parse_args)
+ options, self.args = Option.parse_args(parser, stop_args=stop_args,
+ **kwargs)
def print_desc(term, desc):
text = []