From 5c787e7ae343c1adc1c596b39e58b8ea262d5c4d Mon Sep 17 00:00:00 2001 From: Nikolay Mahotkin Date: Wed, 23 Apr 2014 18:35:19 +0400 Subject: [PATCH] Add uploading context as a file * Added uploading context as a file using command execution-create Implements blueprint mistral-cli-exec-context-from-file Change-Id: Ifac51fd27a3e4144da12e40fce0e1d43fd63ea27 --- mistralclient/commands/executions.py | 8 ++++++-- mistralclient/tests/resources/ctx.json | 5 +++++ mistralclient/tests/test_cli_executions.py | 15 ++++++++++++++- mistralclient/version.py | 20 ++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 mistralclient/tests/resources/ctx.json create mode 100644 mistralclient/version.py diff --git a/mistralclient/commands/executions.py b/mistralclient/commands/executions.py index 907d1ad4..0be87079 100644 --- a/mistralclient/commands/executions.py +++ b/mistralclient/commands/executions.py @@ -103,16 +103,20 @@ class Create(ShowCommand): help='Execution task') parser.add_argument( 'context', - type=json.loads, help='Execution context') return parser def take_action(self, parsed_args): + try: + ctx = json.loads(parsed_args.context) + except: + ctx = open(parsed_args.context).read() + execution = ExecutionManager(self.app.client)\ .create(parsed_args.workbook, parsed_args.task, - parsed_args.context) + ctx) return format(execution) diff --git a/mistralclient/tests/resources/ctx.json b/mistralclient/tests/resources/ctx.json new file mode 100644 index 00000000..966920b5 --- /dev/null +++ b/mistralclient/tests/resources/ctx.json @@ -0,0 +1,5 @@ +{"context": { + "server": { + "name": "name" + } +}} \ No newline at end of file diff --git a/mistralclient/tests/test_cli_executions.py b/mistralclient/tests/test_cli_executions.py index 51d5fe77..529bcedb 100644 --- a/mistralclient/tests/test_cli_executions.py +++ b/mistralclient/tests/test_cli_executions.py @@ -14,11 +14,14 @@ # under the License. # +import pkg_resources as pkg + import mock from mistralclient.tests import base from mistralclient.commands import executions from mistralclient.api.executions import Execution +from mistralclient import version EXECUTION = Execution(mock, { 'id': '123', @@ -30,7 +33,7 @@ EXECUTION = Execution(mock, { class TestCLIExecutions(base.BaseCommandTest): @mock.patch('mistralclient.api.executions.ExecutionManager.create') - def test_create(self, mock): + def test_create_ctx_string(self, mock): mock.return_value = EXECUTION result = self.call(executions.Create, @@ -38,6 +41,16 @@ class TestCLIExecutions(base.BaseCommandTest): self.assertEqual(('123', 'some', 'else', 'RUNNING'), result[1]) + @mock.patch('mistralclient.api.executions.ExecutionManager.create') + def test_create_ctx_file(self, mock): + mock.return_value = EXECUTION + path = pkg.resource_filename(version.version_info.package, + 'tests/resources/ctx.json') + result = self.call(executions.Create, + app_args=['name', 'id', path]) + + self.assertEqual(('123', 'some', 'else', 'RUNNING'), result[1]) + @mock.patch('mistralclient.api.executions.ExecutionManager.update') def test_update(self, mock): mock.return_value = EXECUTION diff --git a/mistralclient/version.py b/mistralclient/version.py new file mode 100644 index 00000000..1f23e988 --- /dev/null +++ b/mistralclient/version.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2013 - Mirantis, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from pbr import version + +version_info = version.VersionInfo('mistralclient') +version_string = version_info.version_string