Merge pull request #7808 from zedr/feat-yaml-import

Allow YAML as a CLI import format

Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
softwarefactory-project-zuul[bot]
2020-08-11 14:31:01 +00:00
committed by GitHub
4 changed files with 39 additions and 5 deletions

View File

@@ -70,9 +70,10 @@ class CLI(object):
subparsers = {} subparsers = {}
original_action = None original_action = None
def __init__(self, stdout=sys.stdout, stderr=sys.stderr): def __init__(self, stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin):
self.stdout = stdout self.stdout = stdout
self.stderr = stderr self.stderr = stderr
self.stdin = stdin
def get_config(self, key): def get_config(self, key):
"""Helper method for looking up the value of a --conf.xyz flag""" """Helper method for looking up the value of a --conf.xyz flag"""

View File

@@ -40,7 +40,7 @@ def add_authentication_arguments(parser, env):
def add_output_formatting_arguments(parser, env): def add_output_formatting_arguments(parser, env):
formatting = parser.add_argument_group('output formatting') formatting = parser.add_argument_group('input/output formatting')
formatting.add_argument( formatting.add_argument(
'-f', '-f',
@@ -49,7 +49,7 @@ def add_output_formatting_arguments(parser, env):
choices=FORMATTERS.keys(), choices=FORMATTERS.keys(),
default=env.get('TOWER_FORMAT', 'json'), default=env.get('TOWER_FORMAT', 'json'),
help=( help=(
'specify an output format' 'specify a format for the input and output'
), ),
) )
formatting.add_argument( formatting.add_argument(

View File

@@ -1,8 +1,9 @@
import yaml
import json import json
import os import os
import sys
from awxkit import api, config from awxkit import api, config
from awxkit.exceptions import ImportExportError
from awxkit.utils import to_str from awxkit.utils import to_str
from awxkit.api.pages import Page from awxkit.api.pages import Page
from awxkit.api.pages.api import EXPORTABLE_RESOURCES from awxkit.api.pages.api import EXPORTABLE_RESOURCES
@@ -135,7 +136,13 @@ class Import(CustomCommand):
parser.print_help() parser.print_help()
raise SystemExit() raise SystemExit()
data = json.load(sys.stdin) fmt = client.get_config('format')
if fmt == 'json':
data = json.load(client.stdin)
elif fmt == 'yaml':
data = yaml.safe_load(client.stdin)
else:
raise ImportExportError("Unsupported format for Import: " + fmt)
client.authenticate() client.authenticate()
client.v2.import_assets(data) client.v2.import_assets(data)

View File

@@ -1,10 +1,13 @@
import io
import json import json
import yaml import yaml
from awxkit.api.pages import Page from awxkit.api.pages import Page
from awxkit.api.pages.users import Users, User from awxkit.api.pages.users import Users, User
from awxkit.cli import CLI
from awxkit.cli.format import format_response from awxkit.cli.format import format_response
from awxkit.cli.resource import Import
def test_json_empty_list(): def test_json_empty_list():
@@ -44,3 +47,26 @@ def test_yaml_list():
page = Users.from_json(users) page = Users.from_json(users)
formatted = format_response(page, fmt='yaml') formatted = format_response(page, fmt='yaml')
assert yaml.safe_load(formatted) == users assert yaml.safe_load(formatted) == users
def test_yaml_import():
class MockedV2:
def import_assets(self, data):
self._parsed_data = data
def _dummy_authenticate():
pass
yaml_fd = io.StringIO(
"""
workflow_job_templates:
- name: Workflow1
"""
)
cli = CLI(stdin=yaml_fd)
cli.parse_args(['--conf.format', 'yaml'])
cli.v2 = MockedV2()
cli.authenticate = _dummy_authenticate
Import().handle(cli, None)
assert cli.v2._parsed_data['workflow_job_templates'][0]['name']