1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-27 17:55:10 +03:00

cli: make "detail" actions actually respect Allow: headers

This commit is contained in:
Ryan Petrello 2019-09-09 19:30:31 -04:00
parent edb7ddb9ae
commit ee47e98c50
No known key found for this signature in database
GPG Key ID: F2AA5F2122351777
3 changed files with 23 additions and 5 deletions

View File

@ -244,10 +244,11 @@ class CLI(object):
# parse any action arguments
if self.resource != 'settings':
for method in ('list', 'modify', 'create'):
parser.build_query_arguments(
method,
'GET' if method == 'list' else 'POST'
)
if method in parser.parser.choices:
parser.build_query_arguments(
method,
'GET' if method == 'list' else 'POST'
)
if from_sphinx:
parsed, extra = self.parser.parse_known_args(self.argv)
else:

View File

@ -83,6 +83,7 @@ class ResourceOptionsParser(object):
self.options = getattr(
self.page.options().json, 'actions', {'GET': {}}
)
self.get_allowed_options()
if self.resource != 'settings':
# /api/v2/settings is a special resource that doesn't have
# traditional list/detail endpoints
@ -91,6 +92,11 @@ class ResourceOptionsParser(object):
self.handle_custom_actions()
def get_allowed_options(self):
self.allowed_options = self.page.connection.options(
self.page.endpoint + '1'
).headers['Allow'].split(', ')
def build_list_actions(self):
action_map = {
'GET': 'list',
@ -110,7 +116,12 @@ class ResourceOptionsParser(object):
add_output_formatting_arguments(parser, {})
def build_detail_actions(self):
for method in ('get', 'modify', 'delete'):
allowed = ['get']
if 'PUT' in self.allowed_options:
allowed.append('modify')
if 'DELETE' in self.allowed_options:
allowed.append('delete')
for method in allowed:
parser = self.parser.add_parser(method, help='')
self.parser.choices[method].add_argument(
'id',

View File

@ -13,6 +13,12 @@ from awxkit.api.pages import Page
from awxkit.cli.options import ResourceOptionsParser
class ResourceOptionsParser(ResourceOptionsParser):
def get_allowed_options(self):
self.allowed_options = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']
class OptionsPage(Page):
def options(self):