Skip to content

Commit

Permalink
Not using assertRaises since it is not supported in python2.6.
Browse files Browse the repository at this point in the history
mutually_exclusive_groups, not working as expected in python2.6, so manually
adding the functionality only for python_version < 2.7
  • Loading branch information
Nicolas Brignone committed Oct 18, 2019
1 parent 2339c41 commit 9bbe6dc
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 15 deletions.
41 changes: 34 additions & 7 deletions python/qpid_dispatch_internal/tools/command.py
Expand Up @@ -25,7 +25,8 @@
from __future__ import absolute_import
from __future__ import print_function

import sys, json, argparse, os
import sys, argparse, os
from itertools import combinations
try:
from collections.abc import Mapping, Sequence
except ImportError:
Expand Down Expand Up @@ -86,10 +87,36 @@ def parse_args_qdmanage(operations, argv=None):
common_parser.add_argument("-v", "--verbose", help="Show maximum detail",
action="count") # support -vvv

def _custom_optional_arguments_parser(*args, **kwargs):
parser = argparse.ArgumentParser(*args, **kwargs)
parser._optionals.title = "Optional Arguments"
return parser
class CustomOptionalArgumentsParser(argparse.ArgumentParser):
def __init__(self, *args, **kwargs):
super(CustomOptionalArgumentsParser, self).__init__(*args, **kwargs)
self._optionals.title = "Optional Arguments"

class QdstatArgumentParser(CustomOptionalArgumentsParser):
display_group_options = ["-g", "-c",
"-l","-n","-e","-a","-m","--autolinks","--linkroutes","--log",
"--all-entities"]
target_group_options = ["--all-routers", "-r"]

def parse_args(self, args=None, namespace=None):
#copy = args[:]
parsed_args = super(QdstatArgumentParser, self).parse_args(args, namespace)
if (sys.version_info[0] == 2 and sys.version_info[1] < 7):
self.verify_mutually_exclusive_args(args)
return parsed_args

def verify_mutually_exclusive_args(self, args):
if args is None:
args = sys.argv[1:]

def _check(exclusive_list):
for j, k in combinations(args, 2):
if j in exclusive_list and k in exclusive_list:
self.error('argument %s: not allowed with argument %s' % (j, k))

_check(self.display_group_options)
_check(self.target_group_options)


def add_connection_options(parser):
group = parser.add_argument_group('Connection Options')
Expand Down Expand Up @@ -163,7 +190,7 @@ def _qdstat_add_display_args(parser, BusManager):
display.set_defaults(show=BusManager.displayGeneral.__name__)

def _qdstat_parser(BusManager):
parser = _custom_optional_arguments_parser(prog="qdstat", parents=[common_parser])
parser = QdstatArgumentParser(prog="qdstat", parents=[common_parser])
_qdstat_add_display_args(parser, BusManager)

_group = parser.add_argument_group('Target', 'Choose destination router to \
Expand Down Expand Up @@ -200,7 +227,7 @@ def _qdmanage_add_args(parser):

def _qdmanage_parser(operations):
description = "Standard operations: %s. Use GET-OPERATIONS to find additional operations." % (", ".join(operations))
parser = _custom_optional_arguments_parser(prog="qdmanage <operation>",
parser = CustomOptionalArgumentsParser(prog="qdmanage <operation>",
parents=[common_parser],
description=description)
_qdmanage_add_args(parser)
Expand Down
22 changes: 14 additions & 8 deletions tests/test_command.py
Expand Up @@ -27,6 +27,8 @@
_qdmanage_parser,
_qdstat_parser)

from qpid_dispatch_internal.tools.command import QdstatArgumentParser

def mock_error(self, message):
raise ValueError(message)

Expand Down Expand Up @@ -57,18 +59,22 @@ def test_parse_args_qdstat_print_help(self):
self.parser.print_help()

def test_parse_args_qdstat_mutually_exclusive(self):
options1 = ["-g", "-c",
"-l","-n","-e","-a","-m","--autolinks","--linkroutes","--log",
"--all-entities"]
options2 = ["-r", "--all-routers"]
def _call(options):
try:
self.parser.parse_args(options)
except ValueError as e:
self.assertIn("not allowed with", str(e))
except Exception as e:
self.fail("Not expected exception.")
else:
self.fail("ValueError exception expected.")

def _call_pairs(options):
for options_pair in combinations(options, 2):
with self.assertRaises(ValueError):
self.parser.parse_args(options_pair)
_call(list(options_pair))

_call_pairs(options1)
_call_pairs(options2)
_call_pairs(QdstatArgumentParser.display_group_options)
_call(QdstatArgumentParser.target_group_options + ["some"]) # "some" complements -r

def test_parse_args_qdstat_default(self):
args = parse_args_qdstat(FBM, argv = [])
Expand Down

0 comments on commit 9bbe6dc

Please sign in to comment.