Skip to content

Commit 0fabc21

Browse files
committed
Allow to pass None, fix default value, don't allow negative numbers
1 parent 8be966a commit 0fabc21

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

gql/cli.py

+21-2
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,25 @@
4646
"""
4747

4848

49+
def positive_int_or_none(value_str: str) -> Optional[int]:
50+
"""Convert a string argument value into either an int or None.
51+
52+
Raise a ValueError if the argument is negative or a string which is not "none"
53+
"""
54+
try:
55+
value_int = int(value_str)
56+
except ValueError:
57+
if value_str.lower() == "none":
58+
return None
59+
else:
60+
raise
61+
62+
if value_int < 0:
63+
raise ValueError
64+
65+
return value_int
66+
67+
4968
def get_parser(with_examples: bool = False) -> ArgumentParser:
5069
"""Provides an ArgumentParser for the gql-cli script.
5170
@@ -106,8 +125,8 @@ def get_parser(with_examples: bool = False) -> ArgumentParser:
106125
parser.add_argument(
107126
"--execute-timeout",
108127
help="set the execute_timeout argument of the Client (default: 10)",
109-
type=int,
110-
default=None,
128+
type=positive_int_or_none,
129+
default=10,
111130
dest="execute_timeout",
112131
)
113132
parser.add_argument(

tests/test_cli.py

+14
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,20 @@ def test_cli_parser(parser):
7878
args = parser.parse_args(["https://your_server.com", "--execute-timeout", "1"])
7979
assert args.execute_timeout == 1
8080

81+
# gql-cli https://your_server.com --execute-timeout=none
82+
args = parser.parse_args(["https://your_server.com", "--execute-timeout", "none"])
83+
assert args.execute_timeout is None
84+
85+
# gql-cli https://your_server.com --execute-timeout=-1
86+
with pytest.raises(SystemExit):
87+
args = parser.parse_args(["https://your_server.com", "--execute-timeout", "-1"])
88+
89+
# gql-cli https://your_server.com --execute-timeout=invalid
90+
with pytest.raises(SystemExit):
91+
args = parser.parse_args(
92+
["https://your_server.com", "--execute-timeout", "invalid"]
93+
)
94+
8195

8296
def test_cli_parse_headers(parser):
8397

0 commit comments

Comments
 (0)