From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/
Date: Tue, 3 Jul 2012 17:48:06 +0000 (UTC) [thread overview]
Message-ID: <1341337555.6485e56521930bb59e4fdcdddc015286aa6c874b.dywi@gentoo> (raw)
commit: 6485e56521930bb59e4fdcdddc015286aa6c874b
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Jul 3 17:45:55 2012 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Jul 3 17:45:55 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=6485e565
roverlay/argutil (using argparse)
this sets up an ArgParser suitable for roverlay scripts
new file: roverlay/argutil.py
---
roverlay/argutil.py | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 211 insertions(+), 0 deletions(-)
diff --git a/roverlay/argutil.py b/roverlay/argutil.py
new file mode 100644
index 0000000..d1640ac
--- /dev/null
+++ b/roverlay/argutil.py
@@ -0,0 +1,211 @@
+
+import os.path
+import argparse
+import roverlay
+
+def get_parser ( CMD_DESC, DEFAULT_CONFIG ):
+
+ def is_fs_file ( value ):
+ f = os.path.abspath ( value )
+ if not os.path.isfile ( f ):
+ raise argparse.ArgumentTypeError (
+ "%r is not a file." % value
+ )
+ return f
+
+ def is_fs_dir ( value ):
+ d = os.path.abspath ( value )
+ if not os.path.isdir ( d ):
+ raise argparse.ArgumentTypeError (
+ "%r is not a directory." % value
+ )
+ return d
+
+ def couldbe_fs_dir ( value ):
+ d = os.path.abspath ( value )
+ if os.path.exists ( d ) and not os.path.isdir ( d ):
+ raise argparse.ArgumentTypeError (
+ "%r cannot be a directory." % value
+ )
+ return d
+
+ parser = argparse.ArgumentParser (
+ description='\n'.join ((
+ roverlay.description_str, roverlay.license_str,
+ )),
+ epilog = 'Known commands:\n' + '\n'.join (
+ ( ( '* ' + c ).ljust(17) + ' - ' + d for (c,d) in CMD_DESC.items() )
+ ),
+ add_help=True,
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ )
+
+ arg = parser.add_argument
+ opt_in = dict ( default=False, action='store_true' )
+ opt_out = dict ( default=True, action='store_false' )
+
+ fs_file = dict ( type=is_fs_file, metavar="<file>" )
+
+ # adding args starts here
+
+ arg (
+ '-V', '--version', action='version', version=roverlay.version_str
+ )
+
+ arg (
+ 'commands',
+ # fixme: CMD_DESC is "unknown", but default is set to a specific command
+ default='create',
+ help="action to perform. choices are " + ', '.join (CMD_DESC.keys()) + \
+ ". defaults to %(default)s.",
+ nargs="*",
+ choices=CMD_DESC.keys(),
+ metavar="command"
+ )
+
+ arg (
+ '-c', '--config',
+ default=DEFAULT_CONFIG,
+ help="config file",
+ **fs_file
+ )
+ arg (
+ '-F', '--field-definition', '--fdef', default=argparse.SUPPRESS,
+ help="field definition file",
+ **fs_file
+ )
+
+ arg (
+ '-R', '--repo-config', default=argparse.SUPPRESS,
+ action='append',
+ help="repo config file.",
+ **fs_file
+ )
+
+ arg (
+ '-D', '--deprule-file', default=argparse.SUPPRESS,
+ action='append',
+ help="simple rule file. can be specified more than once.",
+ **fs_file
+ )
+
+
+ arg (
+ '--distdir', '--from', default=argparse.SUPPRESS,
+ action='append',
+ help='''
+ use packages from %(metavar)s for ebuild creation (ignore all repos).
+ only useful for testing 'cause SRC_URI will be invalid in the created
+ ebuilds.
+ ''',
+ metavar="<DISTDIR>",
+ type=is_fs_dir
+ )
+
+ arg (
+ '--distroot', default=argparse.SUPPRESS,
+ help='''
+ use %(metavar)s as distdir root for repos
+ that don't define their own package dir.
+ ''',
+ metavar="<DISTROOT>",
+ type=couldbe_fs_dir
+ )
+
+ arg (
+ '--show',
+ help="print ebuilds and metadata to console",
+ **opt_in
+ )
+
+ arg (
+ '--write',
+ help="write overlay to filesystem",
+ # !! change to opt_out (FIXME)
+ **opt_in
+ )
+
+
+ arg (
+ '--nosync', '--no-sync',
+ help="disable syncing with remotes (offline mode). TODO",
+ **opt_in
+ )
+ arg (
+ '--force-distroot',
+ help="always use <DISTROOT>/<repo name> as repo distdir. TODO.",
+ **opt_in
+ )
+
+ arg (
+ '--debug',
+ help='''
+ Turn on debugging. This produces a lot of messages.
+ (TODO: always on).
+ ''',
+ **opt_out
+ )
+
+ return parser
+# --- end of get_parser (...) ---
+
+def parse_argv ( *args, **kw ):
+ """Parses sys.argv and returns the result as tuple
+ (<commands to run>, <config file>,
+ <dict for config>, <extra options as dict>).
+
+ All args/keywords are passed to get_parser().
+ Passes all exceptions.
+ """
+ def doconf ( value, path ):
+ pos = conf
+ if isinstance ( path, str ):
+ path = path.split ( '.' )
+ last = len ( path ) - 1
+ for i, k in enumerate ( path ):
+ if i == last:
+ pos [k.lower()] = value
+ else:
+ k = k.upper()
+ if not k in pos:
+ pos [k] = dict()
+
+ pos = pos [k]
+
+
+ p = get_parser ( *args, **kw ).parse_args()
+
+ given = lambda kw : hasattr ( p, kw )
+
+
+ conf = dict()
+ extra = dict (
+ nosync = p.nosync,
+ show = p.show,
+ write = p.write,
+ debug = p.debug,
+ force_distroot = p.force_distroot,
+ )
+
+ if given ( 'field_definition' ):
+ doconf ( p.field_definition, 'DESCRIPTION.field_definition_file' )
+
+ if given ( 'repo_config' ):
+ doconf ( p.repo_config, 'REPO.config_files' )
+
+ if given ( 'distroot' ):
+ doconf ( p.distroot, 'distfiles.root' )
+
+ if given ( 'distdir' ):
+ doconf ( (), 'REPO.config_files' )
+ extra ['distdir'] = p.distdir
+
+ if given ( 'deprule_file' ):
+ doconf ( p.deprule_file, 'DEPRES.SIMPLE_RULES.files' )
+
+
+ return (
+ ( p.commands, ) if isinstance ( p.commands, str ) else p.commands,
+ p.config, conf, extra
+ )
+# --- end of parse_argv (...) ---
next reply other threads:[~2012-07-03 17:48 UTC|newest]
Thread overview: 159+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-03 17:48 André Erdmann [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-01-26 17:41 [gentoo-commits] proj/R_overlay:master commit in: roverlay/ André Erdmann
2015-01-26 17:41 André Erdmann
2014-07-18 16:20 André Erdmann
2014-07-18 2:50 [gentoo-commits] proj/R_overlay:wip/addition_control " André Erdmann
2014-07-18 16:20 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2014-07-18 2:28 [gentoo-commits] proj/R_overlay:wip/addition_control " André Erdmann
2014-07-18 16:20 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2014-07-16 15:14 André Erdmann
2014-06-05 22:09 André Erdmann
2014-04-01 16:38 André Erdmann
2014-02-16 16:30 André Erdmann
2014-02-15 19:49 André Erdmann
2014-02-15 19:49 André Erdmann
2014-01-25 18:14 André Erdmann
2013-12-11 18:40 André Erdmann
2013-12-11 18:40 André Erdmann
2013-09-23 15:30 André Erdmann
2013-09-20 15:57 André Erdmann
2013-09-19 15:00 André Erdmann
2013-09-17 16:40 André Erdmann
2013-09-17 16:40 André Erdmann
2013-09-17 16:40 André Erdmann
2013-09-17 16:40 André Erdmann
2013-09-16 13:43 André Erdmann
2013-09-13 15:10 André Erdmann
2013-09-12 16:36 André Erdmann
2013-09-12 16:36 André Erdmann
2013-09-12 16:36 André Erdmann
2013-09-11 11:14 André Erdmann
2013-09-11 10:19 André Erdmann
2013-09-10 14:40 André Erdmann
2013-09-10 14:40 André Erdmann
2013-09-10 14:40 André Erdmann
2013-09-10 14:40 André Erdmann
2013-09-06 17:27 André Erdmann
2013-09-06 17:27 André Erdmann
2013-09-03 15:50 André Erdmann
2013-09-02 12:27 André Erdmann
2013-09-02 8:44 André Erdmann
2013-08-30 14:49 André Erdmann
2013-08-30 14:49 André Erdmann
2013-08-29 12:36 André Erdmann
2013-08-29 12:36 André Erdmann
2013-08-28 15:54 André Erdmann
2013-08-27 15:39 André Erdmann
2013-08-23 13:52 André Erdmann
2013-08-23 13:52 André Erdmann
2013-08-23 13:52 André Erdmann
2013-08-19 15:42 André Erdmann
2013-08-16 14:05 André Erdmann
2013-08-16 11:02 André Erdmann
2013-08-16 10:43 André Erdmann
2013-08-16 10:43 André Erdmann
2013-08-14 14:56 André Erdmann
2013-08-14 14:56 André Erdmann
2013-08-13 8:56 André Erdmann
2013-08-13 8:56 André Erdmann
2013-08-13 8:56 André Erdmann
2013-08-12 8:28 André Erdmann
2013-08-12 8:18 André Erdmann
2013-08-07 16:10 André Erdmann
2013-08-02 14:30 André Erdmann
2013-08-02 10:34 André Erdmann
2013-08-02 10:34 André Erdmann
2013-08-01 12:44 André Erdmann
2013-08-01 12:44 André Erdmann
2013-07-29 14:56 André Erdmann
2013-07-29 8:55 André Erdmann
2013-07-26 13:02 André Erdmann
2013-07-23 7:51 André Erdmann
2013-07-23 7:51 André Erdmann
2013-07-19 18:00 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-23 7:51 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-17 18:05 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-17 18:05 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-15 22:31 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-16 16:36 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-12 13:57 André Erdmann
2013-06-22 15:24 André Erdmann
2013-06-22 15:24 André Erdmann
2013-06-22 15:24 André Erdmann
2013-06-22 15:24 André Erdmann
2013-06-19 18:58 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-06-22 15:24 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-19 18:58 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-06-19 18:59 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-13 16:34 André Erdmann
2013-06-05 18:08 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-06-13 16:34 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-05 18:08 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-06-13 16:34 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-04 21:06 André Erdmann
2013-04-25 16:44 André Erdmann
2013-04-25 16:44 André Erdmann
2013-03-05 11:27 André Erdmann
2013-02-09 20:45 André Erdmann
2013-02-05 17:48 André Erdmann
2013-02-05 17:48 André Erdmann
2013-01-30 20:16 André Erdmann
2013-01-30 20:16 André Erdmann
2013-01-28 23:54 André Erdmann
2013-01-28 23:54 André Erdmann
2013-01-28 23:54 André Erdmann
2012-10-02 10:04 André Erdmann
2012-08-20 11:16 André Erdmann
2012-08-13 18:07 André Erdmann
2012-08-09 9:26 André Erdmann
2012-08-08 23:46 André Erdmann
2012-08-08 23:46 André Erdmann
2012-08-07 8:50 André Erdmann
2012-08-02 15:14 André Erdmann
2012-08-01 7:25 André Erdmann
2012-07-31 17:51 André Erdmann
2012-07-30 8:52 André Erdmann
2012-07-30 8:52 André Erdmann
2012-07-24 16:59 [gentoo-commits] proj/R_overlay:overlay_wip " André Erdmann
2012-07-30 8:52 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2012-07-18 16:49 [gentoo-commits] proj/R_overlay:overlay_wip " André Erdmann
2012-07-30 8:52 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2012-07-16 16:15 André Erdmann
2012-07-16 16:15 André Erdmann
2012-07-16 16:15 [gentoo-commits] proj/R_overlay:depres_wip " André Erdmann
2012-07-16 16:15 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2012-07-10 17:43 André Erdmann
2012-07-09 17:19 André Erdmann
2012-07-04 18:21 André Erdmann
2012-07-04 18:21 André Erdmann
2012-06-28 13:29 André Erdmann
2012-06-26 15:42 André Erdmann
2012-06-25 18:19 André Erdmann
2012-06-21 16:55 André Erdmann
2012-06-20 19:03 André Erdmann
2012-06-20 19:03 André Erdmann
2012-06-18 16:27 André Erdmann
2012-06-15 20:34 André Erdmann
2012-06-15 20:34 André Erdmann
2012-06-15 20:34 André Erdmann
2012-06-15 20:34 André Erdmann
2012-06-15 20:34 André Erdmann
2012-06-15 20:34 André Erdmann
2012-06-12 17:17 André Erdmann
2012-06-06 19:52 André Erdmann
2012-06-06 19:52 André Erdmann
2012-06-06 19:52 André Erdmann
2012-06-05 17:30 André Erdmann
2012-06-04 19:07 André Erdmann
2012-06-04 19:07 André Erdmann
2012-06-04 15:43 André Erdmann
2012-06-01 16:19 André Erdmann
2012-06-01 16:19 André Erdmann
2012-06-01 15:46 André Erdmann
2012-05-31 18:24 André Erdmann
2012-05-30 20:15 André Erdmann
2012-05-30 19:36 André Erdmann
2012-05-30 19:36 André Erdmann
2012-05-30 16:09 André Erdmann
2012-05-30 16:09 André Erdmann
2012-05-30 16:09 André Erdmann
2012-05-30 16:09 André Erdmann
2012-05-30 10:58 André Erdmann
2012-05-30 10:58 André Erdmann
2012-05-30 10:58 André Erdmann
2012-05-30 10:58 André Erdmann
2012-05-29 17:09 André Erdmann
2012-05-29 17:09 André Erdmann
2012-05-29 17:09 André Erdmann
2012-05-29 17:09 André Erdmann
2012-05-29 17:09 André Erdmann
2012-05-26 13:14 André Erdmann
2012-05-26 13:14 André Erdmann
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=1341337555.6485e56521930bb59e4fdcdddc015286aa6c874b.dywi@gentoo \
--to=dywi@mailerd.de \
--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