python argparse best practice.
Project description
argparse-best-practice
def best_practice_bool() -> None:
def default_false() -> None:
parser = ArgumentParser()
parser.add_argument('--default-false', action=BooleanOptionalAction, default=False)
parser.add_argument('--default-false-exist', action=BooleanOptionalAction, default=False)
parser.add_argument('--default-false-exist-with-no', action=BooleanOptionalAction, default=False)
args = parser.parse_args(['--default-false-exist',
'--no-default-false-exist-with-no'
])
assert args.default_false == False
assert args.default_false_exist == True
assert args.default_false_exist_with_no == False
default_false()
def default_true() -> None:
parser = ArgumentParser()
parser.add_argument('--default-true', action=BooleanOptionalAction, default=True)
parser.add_argument('--default-true-exist', action=BooleanOptionalAction, default=True)
parser.add_argument('--default-true-exist-with-no', action=BooleanOptionalAction, default=True)
args = parser.parse_args(['--default-true-exist',
'--no-default-true-exist-with-no'
])
assert args.default_true == True
assert args.default_true_exist == True
assert args.default_true_exist_with_no == False
default_true()
def best_practice_string() -> None:
def default_string() -> None:
parser = ArgumentParser()
parser.add_argument('--default-string', default='a')
parser.add_argument('--default-string-exist', default='a')
args = parser.parse_args(['--default-string-exist', 'b'])
assert args.default_string == 'a'
assert args.default_string_exist == 'b'
default_string()
def my_string_validation() -> None:
class MyStringValidationError(Exception):
def __init__(self, value: str) -> None:
self.value = value
super().__init__()
class MyStringValidator(Action):
def __call__(self,
parser: ArgumentParser,
namespace: Namespace,
values: Union[Text, Sequence[Any], None],
option_string: Optional[Text]) -> None:
if values.islower():
raise MyStringValidationError(values)
setattr(namespace, self.dest, values)
parser = ArgumentParser()
parser.add_argument('--my-string-validation', action=MyStringValidator)
try:
args = parser.parse_args(['--my-string-validation', 'a'])
except MyStringValidationError as e:
assert MyStringValidationError('a').value == e.value
else:
assert False
args = parser.parse_args(['--my-string-validation', 'A'])
assert args.my_string_validation == 'A'
my_string_validation()
def best_practice_number() -> None:
def default_number() -> None:
parser = ArgumentParser()
parser.add_argument('--default-number', type=int, default=0)
parser.add_argument('--default-number-exist', type=int, default=0)
args = parser.parse_args(['--default-number-exist', '1'])
assert args.default_number == 0
assert args.default_number_exist == 1
default_number()
def my_number_validation() -> None:
class MyNumberValidationError(Exception):
def __init__(self, value: int) -> None:
self.value = value
super().__init__()
class MyNumberValidator(Action):
def __call__(self,
parser: ArgumentParser,
namespace: Namespace,
values: Union[Text, Sequence[Any], None],
option_string: Optional[Text]) -> None:
if 0 > values:
raise MyNumberValidationError(values)
setattr(namespace, self.dest, values)
parser = ArgumentParser()
parser.add_argument('--my-number-validation', action=MyNumberValidator, type=int, default=0)
try:
args = parser.parse_args(['--my-number-validation', '-1'])
except MyNumberValidationError as e:
assert MyNumberValidationError(-1).value == e.value
else:
assert False
my_number_validation()
def best_practice_list() -> None:
def default_empty_list() -> None:
parser = ArgumentParser()
parser.add_argument('--default-empty-list', action='extend', nargs='+', default=[])
parser.add_argument('--default-empty-list-exist', action='extend', nargs='+', default=[])
args = parser.parse_args(['--default-empty-list-exist', 'a', 'b'])
assert args.default_empty_list == []
assert args.default_empty_list_exist == ['a', 'b']
default_empty_list()
def my_unique_list() -> None:
class MyUniqueListCreator(Action):
def __call__(self,
parser: ArgumentParser,
namespace: Namespace,
values: Union[Text, Sequence[Any], None],
option_string: Optional[Text]) -> None:
default = getattr(namespace, self.dest) if hasattr(namespace, self.dest) else []
default.extend(values)
new_value = list(set(default))
new_value.sort()
setattr(namespace, self.dest, new_value)
parser = ArgumentParser()
parser.add_argument('--my-unique-list', action=MyUniqueListCreator, nargs='+', default=['a'])
args = parser.parse_args(['--my-unique-list', 'a', 'b'])
assert args.my_unique_list == ['a', 'b']
my_unique_list()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for argparse-best-practice-0.1.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb9026792f077c77ebd06a2670414bd29e9f25d4c127d31c0efe47e9d02d4d72 |
|
MD5 | b215bd6fb953a45983e199d249de6b3c |
|
BLAKE2b-256 | e40391c4646744d52ef4b7b226bf9f481e1b7115d9e3b1296327b17d8118f88d |
Close
Hashes for argparse_best_practice-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a724456e9f201b4da6518026f3605647b4b8115fdc38ddba8b7fa0fe501e2584 |
|
MD5 | af2fdbbb4d09fe0ce99c43357741bc7d |
|
BLAKE2b-256 | e5152fbb2889e4203a00eb8fb99aeaa14591ff73193a7c83b4a31c42212f25fc |