From f46aafee388b3e51d34b7522daf0be4715860c0f Mon Sep 17 00:00:00 2001 From: Felix Kloft Date: Mon, 30 Apr 2018 13:50:13 +0200 Subject: [PATCH 1/3] assign bag_info from arguments to namespace instead of parser Python docs recommend to add properties to namespace, this allows for parsers to be reused. --- bagit.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bagit.py b/bagit.py index 7583a2e..3bcca5b 100755 --- a/bagit.py +++ b/bagit.py @@ -1442,15 +1442,18 @@ def force_unicode_py2(s): class BagArgumentParser(argparse.ArgumentParser): def __init__(self, *args, **kwargs): - self.bag_info = {} argparse.ArgumentParser.__init__(self, *args, **kwargs) class BagHeaderAction(argparse.Action): - def __call__(self, parser, _, values, option_string=None): + def __call__(self, parser, namespace, values, option_string=None): opt = option_string.lstrip("--") opt_caps = "-".join([o.capitalize() for o in opt.split("-")]) parser.bag_info[opt_caps] = values + try: + namespace.bag_info[opt_caps] = values + except AttributeError: + namespace.bag_info = {opt_caps: values} def _make_parser(): @@ -1593,7 +1596,7 @@ def main(): try: make_bag( bag_dir, - bag_info=parser.bag_info, + bag_info=args.bag_info, processes=args.processes, checksums=args.checksums, ) From 70c97e829251af98a45115f7cafedc0ae76873cf Mon Sep 17 00:00:00 2001 From: Felix Kloft Date: Mon, 30 Apr 2018 15:04:54 +0200 Subject: [PATCH 2/3] always set bag_info on namespace attribute wouldn't be set without any metadata args. also removes the need to check for AttributeError --- bagit.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/bagit.py b/bagit.py index 3bcca5b..94532c3 100755 --- a/bagit.py +++ b/bagit.py @@ -1443,17 +1443,14 @@ def force_unicode_py2(s): class BagArgumentParser(argparse.ArgumentParser): def __init__(self, *args, **kwargs): argparse.ArgumentParser.__init__(self, *args, **kwargs) + self.set_defaults(bag_info={}) class BagHeaderAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): opt = option_string.lstrip("--") opt_caps = "-".join([o.capitalize() for o in opt.split("-")]) - parser.bag_info[opt_caps] = values - try: - namespace.bag_info[opt_caps] = values - except AttributeError: - namespace.bag_info = {opt_caps: values} + namespace.bag_info[opt_caps] = values def _make_parser(): From 55071cf06837d805ea200cbb5901b52d899dab6e Mon Sep 17 00:00:00 2001 From: Felix Kloft Date: Mon, 30 Apr 2018 15:06:02 +0200 Subject: [PATCH 3/3] remove useless default values from namespace --- bagit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bagit.py b/bagit.py index 94532c3..a821973 100755 --- a/bagit.py +++ b/bagit.py @@ -1522,7 +1522,7 @@ def _make_parser(): metadata_args = parser.add_argument_group(_("Optional Bag Metadata")) for header in STANDARD_BAG_INFO_HEADERS: metadata_args.add_argument( - "--%s" % header.lower(), type=str, action=BagHeaderAction + "--%s" % header.lower(), type=str, action=BagHeaderAction, default=argparse.SUPPRESS ) parser.add_argument(