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
commit 3ca43e63b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 39 additions and 5 deletions

View File

@ -70,9 +70,10 @@ class CLI(object):
subparsers = {}
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.stderr = stderr
self.stdin = stdin
def get_config(self, key):
"""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):
formatting = parser.add_argument_group('output formatting')
formatting = parser.add_argument_group('input/output formatting')
formatting.add_argument(
'-f',
@ -49,7 +49,7 @@ def add_output_formatting_arguments(parser, env):
choices=FORMATTERS.keys(),
default=env.get('TOWER_FORMAT', 'json'),
help=(
'specify an output format'
'specify a format for the input and output'
),
)
formatting.add_argument(

View File

@ -1,8 +1,9 @@
import yaml
import json
import os
import sys
from awxkit import api, config
from awxkit.exceptions import ImportExportError
from awxkit.utils import to_str
from awxkit.api.pages import Page
from awxkit.api.pages.api import EXPORTABLE_RESOURCES
@ -135,7 +136,13 @@ class Import(CustomCommand):
parser.print_help()
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.v2.import_assets(data)

View File

@ -1,10 +1,13 @@
import io
import json
import yaml
from awxkit.api.pages import Page
from awxkit.api.pages.users import Users, User
from awxkit.cli import CLI
from awxkit.cli.format import format_response
from awxkit.cli.resource import Import
def test_json_empty_list():
@ -44,3 +47,26 @@ def test_yaml_list():
page = Users.from_json(users)
formatted = format_response(page, fmt='yaml')
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']