From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 1C59C1381F3 for ; Tue, 13 Aug 2013 08:56:49 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id B5DE1E0B2B; Tue, 13 Aug 2013 08:56:41 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 33A6AE0B2B for ; Tue, 13 Aug 2013 08:56:41 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 08BE333EC3B for ; Tue, 13 Aug 2013 08:56:40 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id EAD7BE5465 for ; Tue, 13 Aug 2013 08:56:35 +0000 (UTC) From: "André Erdmann" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "André Erdmann" Message-ID: <1376383226.6ab122cf449017862a26e6da196ce33badfe7ba6.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/argparser.py X-VCS-Directories: roverlay/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: 6ab122cf449017862a26e6da196ce33badfe7ba6 X-VCS-Branch: master Date: Tue, 13 Aug 2013 08:56:35 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 90dcd361-1e10-4061-91ce-b60ce1132cb5 X-Archives-Hash: 69c2959cae9ec06266db79d4c70d35a0 commit: 6ab122cf449017862a26e6da196ce33badfe7ba6 Author: André Erdmann mailerd de> AuthorDate: Tue Aug 13 08:40:26 2013 +0000 Commit: André Erdmann mailerd de> CommitDate: Tue Aug 13 08:40:26 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=6ab122cf roverlay/argparser: RoverlayStatusArgumentParser arg parser for the status script. This commit also modifies the main script's parser (-> defaultscript.main) as both parser now inherit RoverlayArgumentParser (and not ~Base). --- roverlay/argparser.py | 203 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 157 insertions(+), 46 deletions(-) diff --git a/roverlay/argparser.py b/roverlay/argparser.py index 054d710..84e1478 100644 --- a/roverlay/argparser.py +++ b/roverlay/argparser.py @@ -22,16 +22,32 @@ from roverlay.argutil import \ class RoverlayArgumentParserBase ( roverlay.argutil.ArgumentParserProxy ): + + DESCRIPTION_TEMPLATE = None + def __init__ ( - self, defaults=None, description=True, formatter_class=True, **kwargs + self, defaults=None, description=True, formatter_class=True, + format_description=False, **kwargs ): + if description is True: + if self.DESCRIPTION_TEMPLATE is None: + desc = ( + roverlay.core.description_str + '\n' + + roverlay.core.license_str + ) + else: + desc = self.format_description() + elif description: + if format_description: + desc = self.format_description ( description ) + else: + desc = description + else: + desc = None + super ( RoverlayArgumentParserBase, self ).__init__ ( - defaults = defaults, - description = ( - '\n'.join (( - roverlay.core.description_str, roverlay.core.license_str - )) if description is True else description - ), + defaults = defaults, + description = desc, formatter_class = ( argparse.RawDescriptionHelpFormatter if formatter_class is True else formatter_class @@ -43,6 +59,24 @@ class RoverlayArgumentParserBase ( roverlay.argutil.ArgumentParserProxy ): self.extra_conf = None # --- end of __init__ (...) --- + def format_description ( self, desc=None ): + return ( self.DESCRIPTION_TEMPLATE if desc is None else desc ).format ( + version=roverlay.core.version, + license=roverlay.core.license_str, + ) + # --- end of format_description (...) --- + + def format_command_map ( self, command_map ): + return ( + "\nKnown commands:\n" + '\n'.join ( + # '* - ' + '* {cmd} - {desc}'.format ( + cmd=cmd.ljust ( 15 ), desc=desc + ) for cmd, desc in command_map.items() + ) + ) + # --- end of format_command_map (...) --- + def do_extraconf ( self, value, path ): pos = self.extra_conf if isinstance ( path, str ): @@ -456,7 +490,122 @@ class RoverlayArgumentParserBase ( roverlay.argutil.ArgumentParserProxy ): # --- end of RoverlayArgumentParserBase --- -class RoverlayMainArgumentParser ( RoverlayArgumentParserBase ): +class RoverlayArgumentParser ( RoverlayArgumentParserBase ): + + COMMAND_DESCRIPTION = None + DEFAULT_COMMAND = None + + def __init__ ( self, default_command=None, **kwargs ): + super ( RoverlayArgumentParser, self ).__init__ ( **kwargs ) + self.default_command = ( + self.DEFAULT_COMMAND if default_command is None else default_command + ) + self.command = None + + if self.default_command: + assert self.default_command in self.COMMAND_DESCRIPTION + # --- end of __init__ (...) --- + + def setup_actions ( self ): + arg = self.add_argument_group ( + "actions", title="actions", + description=self.format_command_map ( self.COMMAND_DESCRIPTION ), + ) + + arg ( + 'command', default=self.default_command, metavar='', + nargs="?", choices=self.COMMAND_DESCRIPTION.keys(), + flags=self.ARG_HELP_DEFAULT, + help="action to perform" + ) + + return arg + # --- end of setup_actions (...) --- + + def parse_actions ( self ): + command = self.parsed ['command'] + # --- end of parse_actions (...) --- + +# --- end of RoverlayArgumentParser --- + +class RoverlayStatusArgumentParser ( RoverlayArgumentParser ): + + DESCRIPTION_TEMPLATE = "roverlay status tool {version}\n{license}" + + SETUP_TARGETS = ( + 'version', + 'output_options', 'script_mode', 'config_minimal', + 'actions', + ) + PARSE_TARGETS = ( 'config', 'actions', 'extra', ) + + COMMAND_DESCRIPTION = { + 'status': 'report overlay status', + } + DEFAULT_COMMAND = 'status' + + MODES = frozenset ({ 'cgi', 'cli' }) + DEFAULT_MODE = 'cli' + + def setup_script_mode ( self ): + arg = self.add_argument_group ( + "script_mode", title="script mode", + ) + + arg ( + '-m', '--mode', dest='script_mode', + default=self.DEFAULT_MODE, metavar='', + flags=self.ARG_WITH_DEFAULT, choices=self.MODES, + help='set script mode (%(choices)s)', + ) + + for script_mode in self.MODES: + arg ( + '--' + script_mode, dest='script_mode', + flags=self.ARG_SHARED, action='store_const', const=script_mode, + help='set script mode to {!r}'.format ( script_mode ), + ) + + return arg + # --- end of setup_script_mode (...) --- + + def setup_output_options ( self ): + arg = self.add_argument_group ( + 'output_options', title='output options', + ) + + arg ( + '-O', '--output', dest='outfile', default='-', + flags=self.ARG_WITH_DEFAULT|self.ARG_META_FILE, + type=couldbe_stdout_or_file, + help='output file (or stdout)', + ) + + arg ( + '-t', '--template', dest='template', default=argparse.SUPPRESS, + flags=self.ARG_WITH_DEFAULT|self.ARG_META_FILE, + type=is_fs_file, + help='template file for generating output', + ) + + arg ( + '--cgi-content-type', dest='cgi_content_type', default="text/html", + flags=self.ARG_WITH_DEFAULT, metavar='', + help='cgi content type', + ) + + return arg + # --- end of setup_output_options (...) --- + + def parse_extra ( self ): + self.parsed ['want_logging'] = False + self.parsed ['load_main_only'] = True + # --- end of parse_extra (...) --- + + +# --- end of RoverlayStatusArgumentParser (...) --- + +class RoverlayMainArgumentParser ( RoverlayArgumentParser ): SETUP_TARGETS = ( 'version', 'actions', 'config', 'overlay', 'remote', @@ -485,21 +634,6 @@ class RoverlayMainArgumentParser ( RoverlayArgumentParserBase ): DEFAULT_COMMAND = 'create' - def __init__ ( self, default_command=None, command_desc=None,**kwargs ): - super ( RoverlayMainArgumentParser, self ).__init__ ( **kwargs ) - - self.default_command = ( - self.DEFAULT_COMMAND if default_command is None else default_command - ) - self.command_desc = ( - self.COMMAND_DESCRIPTION if command_desc is None else command_desc - ) - - self.command = None - - assert self.default_command in self.command_desc - # --- end of __init__ (...) --- - def parse_actions ( self ): command = self.parsed ['command'] @@ -522,29 +656,6 @@ class RoverlayMainArgumentParser ( RoverlayArgumentParserBase ): self.command = command # --- end of parse_actions (...) --- - def setup_actions ( self ): - arg = self.add_argument_group ( - "actions", title="actions", - description=( - "\nKnown commands:\n" + '\n'.join ( - # '* - ' - '* {cmd} - {desc}'.format ( - cmd=cmd.ljust ( 15 ), desc=desc - ) for cmd, desc in self.command_desc.items() - ) - ) - ) - - arg ( - 'command', default=self.default_command, metavar='', - nargs="?", choices=self.command_desc.keys(), - flags=self.ARG_HELP_DEFAULT, - help="action to perform" - ) - - return arg - # --- end of setup_actions (...) --- - def setup_setupdirs ( self ): arg = self.add_argument_group ( 'setupdirs', title='setupdirs options',