Skip to content

Commit

Permalink
switch METHOD to option-only argument
Browse files Browse the repository at this point in the history
  • Loading branch information
vergenzt committed May 9, 2022
1 parent 97594ef commit c9c60fb
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 46 deletions.
28 changes: 0 additions & 28 deletions httpie/cli/argparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,39 +414,11 @@ def _guess_method(self):
"""
if self.args.method is None:
# Invoked as `http URL'.
assert not self.args.request_items
if self.has_input_data:
self.args.method = HTTP_POST
else:
self.args.method = HTTP_GET

# FIXME: False positive, e.g., "localhost" matches but is a valid URL.
elif not re.match('^[a-zA-Z]+$', self.args.method):
# Invoked as `http URL item+'. The URL is now in `args.method`
# and the first ITEM is now incorrectly in `args.url`.
try:
# Parse the URL as an ITEM and store it as the first ITEM arg.
self.args.request_items.insert(0, KeyValueArgType(
*SEPARATOR_GROUP_ALL_ITEMS).__call__(self.args.url))

except argparse.ArgumentTypeError as e:
if self.args.traceback:
raise
self.error(e.args[0])

else:
# Set the URL correctly
self.args.url = self.args.method
# Infer the method
has_data = (
self.has_input_data
or any(
item.sep in SEPARATOR_GROUP_DATA_ITEMS
for item in self.args.request_items)
)
self.args.method = HTTP_POST if has_data else HTTP_GET

def _parse_items(self):
"""
Parse `args.request_items` into `args.headers`, `args.data`,
Expand Down
35 changes: 17 additions & 18 deletions httpie/cli/definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,24 +50,6 @@
Only URL is required.
""",
)

positional_arguments.add_argument(
dest='method',
metavar='METHOD',
nargs=Qualifiers.OPTIONAL,
default=None,
short_help='The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).',
help="""
The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).
This argument can be omitted in which case HTTPie will use POST if there
is some data to be sent, otherwise GET:
$ http example.org # => GET
$ http example.org hello=world # => POST
""",
)
positional_arguments.add_argument(
dest='url',
metavar='URL',
Expand Down Expand Up @@ -709,6 +691,23 @@ def format_auth_help(auth_plugins_mapping, *, isolation_mode: bool = False):

network = options.add_group('Network')

network.add_argument(
'--method',
'-X',
metavar='METHOD',
default=None,
short_help='The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).',
help="""
The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).
This argument can be omitted in which case HTTPie will use POST if there
is some data to be sent, otherwise GET:
$ http example.org # => GET
$ http example.org hello=world # => POST
""",
)
network.add_argument(
'--offline',
default=False,
Expand Down

0 comments on commit c9c60fb

Please sign in to comment.