public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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 (...) ---



             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