Environments fuel2 command refactored
Standard cliff formatters used. Environments operations refactored to use TuningBox errors on object not found error. Change-Id: I2bf66ec8169fd72dc4abd70ebc56501a58923e8e Closes-Bug: #1616867
This commit is contained in:
parent
fe297395cc
commit
5502205a27
|
@ -106,11 +106,11 @@ class BaseOneCommand(BaseCommand):
|
|||
return '{0}/{1}'.format(self.base_url, parsed_args.id)
|
||||
|
||||
def get_deletion_message(self, parsed_args):
|
||||
return '{0} with id {1} was deleted'.format(
|
||||
return '{0} with id {1} was deleted\n'.format(
|
||||
self.entity_name.capitalize(), parsed_args.id)
|
||||
|
||||
def get_update_message(self, parsed_args):
|
||||
return '{0} with id {1} was updated'.format(
|
||||
return '{0} with id {1} was updated\n'.format(
|
||||
self.entity_name.capitalize(), parsed_args.id)
|
||||
|
||||
|
||||
|
|
|
@ -10,25 +10,37 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from cliff import show
|
||||
import six
|
||||
|
||||
from tuning_box.cli import base
|
||||
from tuning_box.cli.base import BaseCommand
|
||||
|
||||
|
||||
class ListEnvironments(base.FormattedCommand, BaseCommand):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
return self.get_client().get('/environments')
|
||||
class EnvironmentsCommand(base.BaseCommand):
|
||||
entity_name = 'environment'
|
||||
base_url = '/environments'
|
||||
columns = ('id', 'components', 'hierarchy_levels')
|
||||
|
||||
|
||||
class CreateEnvironment(base.FormattedCommand, BaseCommand):
|
||||
class ListEnvironments(EnvironmentsCommand, base.BaseListCommand):
|
||||
pass
|
||||
|
||||
|
||||
class ShowEnvironment(EnvironmentsCommand, base.BaseShowCommand):
|
||||
pass
|
||||
|
||||
|
||||
class DeleteEnvironment(EnvironmentsCommand, base.BaseDeleteCommand):
|
||||
pass
|
||||
|
||||
|
||||
class CreateEnvironment(EnvironmentsCommand, show.ShowOne):
|
||||
|
||||
def get_parser(self, *args, **kwargs):
|
||||
parser = super(CreateEnvironment, self).get_parser(
|
||||
*args, **kwargs)
|
||||
parser.add_argument(
|
||||
'-c', '--components',
|
||||
'-i', '--components',
|
||||
type=str,
|
||||
help="Comma separated components IDs",
|
||||
)
|
||||
|
@ -44,42 +56,21 @@ class CreateEnvironment(base.FormattedCommand, BaseCommand):
|
|||
parsed_args, 'levels', six.text_type)
|
||||
components = self._parse_comma_separated(
|
||||
parsed_args, 'components', int)
|
||||
res = self.get_client().post(
|
||||
'/environments',
|
||||
|
||||
result = self.get_client().post(
|
||||
self.base_url,
|
||||
{'hierarchy_levels': levels, 'components': components}
|
||||
)
|
||||
return res
|
||||
return zip(*result.items())
|
||||
|
||||
|
||||
class EnvironmentCommand(base.FormattedCommand, BaseCommand):
|
||||
|
||||
def get_parser(self, *args, **kwargs):
|
||||
parser = super(EnvironmentCommand, self).get_parser(*args, **kwargs)
|
||||
parser.add_argument('id', type=int, help='Id of the environment')
|
||||
return parser
|
||||
|
||||
|
||||
class ShowEnvironment(EnvironmentCommand):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
return self.get_client().get('/environments/{0}'.format(
|
||||
parsed_args.id))
|
||||
|
||||
|
||||
class DeleteEnvironment(EnvironmentCommand):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
return self.get_client().delete('/environments/{0}'.format(
|
||||
parsed_args.id))
|
||||
|
||||
|
||||
class UpdateEnvironment(EnvironmentCommand):
|
||||
class UpdateEnvironment(EnvironmentsCommand, base.BaseOneCommand):
|
||||
|
||||
def get_parser(self, *args, **kwargs):
|
||||
parser = super(UpdateEnvironment, self).get_parser(
|
||||
*args, **kwargs)
|
||||
parser.add_argument(
|
||||
'-c', '--components',
|
||||
'-i', '--components',
|
||||
dest='components',
|
||||
type=str,
|
||||
help="Comma separated components IDs. "
|
||||
|
@ -103,7 +94,7 @@ class UpdateEnvironment(EnvironmentCommand):
|
|||
data['components'] = self._parse_comma_separated(
|
||||
parsed_args, 'components', int)
|
||||
|
||||
return self.get_client().patch(
|
||||
'/environments/{0}'.format(parsed_args.id),
|
||||
data
|
||||
)
|
||||
result = self.get_client().patch(self.get_url(parsed_args), data)
|
||||
if result is None:
|
||||
result = self.get_update_message(parsed_args)
|
||||
self.app.stdout.write(six.text_type(result))
|
||||
|
|
|
@ -80,7 +80,7 @@ class Environment(flask_restful.Resource):
|
|||
method_decorators = [flask_restful.marshal_with(environment_fields)]
|
||||
|
||||
def get(self, environment_id):
|
||||
env = db.Environment.query.get_or_404(environment_id)
|
||||
env = db.get_or_404(db.Environment, environment_id)
|
||||
hierarchy_levels = db.EnvironmentHierarchyLevel.\
|
||||
get_for_environment(env)
|
||||
# Proper order of levels can't be provided by ORM backref
|
||||
|
@ -120,7 +120,7 @@ class Environment(flask_restful.Resource):
|
|||
|
||||
@db.with_transaction
|
||||
def _perform_update(self, environment_id):
|
||||
environment = db.Environment.query.get_or_404(environment_id)
|
||||
environment = db.get_or_404(db.Environment, environment_id)
|
||||
update_by = flask.request.json
|
||||
|
||||
components = update_by.get('components')
|
||||
|
@ -138,6 +138,6 @@ class Environment(flask_restful.Resource):
|
|||
|
||||
@db.with_transaction
|
||||
def delete(self, environment_id):
|
||||
environment = db.Environment.query.get_or_404(environment_id)
|
||||
environment = db.get_or_404(db.Environment, environment_id)
|
||||
db.db.session.delete(environment)
|
||||
return None, 204
|
||||
|
|
|
@ -94,7 +94,7 @@ class TestDeleteComponent(testscenarios.WithScenarios, _BaseCLITest):
|
|||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('', ('/components/9', 'comp delete 9',
|
||||
'Component with id 9 was deleted')),
|
||||
'Component with id 9 was deleted\n')),
|
||||
]
|
||||
]
|
||||
mock_url = None
|
||||
|
|
|
@ -20,32 +20,18 @@ class TestCreateEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('json', ('/environments',
|
||||
'env create --levels lvl1 --components 1 --format json',
|
||||
'{}')),
|
||||
'env create -l lvl1 -i 1 -f json',
|
||||
'{\n "a": "b"\n}')),
|
||||
('yaml', ('/environments',
|
||||
'env create --levels lvl1,lvl2 --components 1 '
|
||||
'--format yaml',
|
||||
'{}\n')),
|
||||
('plain', ('/environments',
|
||||
'env create --levels lvl1,lvl2 --components 1,2,3 '
|
||||
'--format plain',
|
||||
'{}')),
|
||||
('plain', ('/environments',
|
||||
'env create '
|
||||
'--format plain',
|
||||
'{}')),
|
||||
('json', ('/environments',
|
||||
'env create -l lvl1 -c 1 -f json',
|
||||
'{}')),
|
||||
('yaml', ('/environments',
|
||||
'env create -l lvl1,lvl2 -c 1 -f yaml',
|
||||
'{}\n')),
|
||||
('plain', ('/environments',
|
||||
'env create -l lvl1,lvl2 -c 1,2,3 -f plain',
|
||||
'{}')),
|
||||
('plain', ('/environments',
|
||||
'env create -f plain',
|
||||
'{}'))
|
||||
'env create -l lvl1,lvl2 -i 1 -f yaml',
|
||||
'a: b\n')),
|
||||
('multi', ('/environments',
|
||||
'env create -l lvl1,lvl2 -i 1,2,3 -f yaml',
|
||||
'a: b\n')),
|
||||
('no_data', ('/environments',
|
||||
'env create -f yaml',
|
||||
'a: b\n'))
|
||||
|
||||
]
|
||||
]
|
||||
|
||||
|
@ -57,7 +43,7 @@ class TestCreateEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
self.req_mock.post(
|
||||
self.BASE_URL + self.mock_url,
|
||||
headers={'Content-Type': 'application/json'},
|
||||
json={},
|
||||
json={'a': 'b'},
|
||||
)
|
||||
self.cli.run(self.args.split())
|
||||
self.assertEqual(self.expected_result, self.cli.stdout.getvalue())
|
||||
|
@ -68,9 +54,8 @@ class TestListEnvironments(testscenarios.WithScenarios, _BaseCLITest):
|
|||
scenarios = [
|
||||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('json', ('/environments', 'env list', '{}')),
|
||||
('yaml', ('/environments', 'env list --format yaml', '{}\n')),
|
||||
('plain', ('/environments', 'env list --format plain', '{}'))
|
||||
('json', ('/environments', 'env list -f json', '[]')),
|
||||
('yaml', ('/environments', 'env list -f yaml', '[]\n'))
|
||||
]
|
||||
]
|
||||
mock_url = None
|
||||
|
@ -92,9 +77,9 @@ class TestShowEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
scenarios = [
|
||||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('json', ('/environments/9', 'env show 9 --format json', '{}')),
|
||||
('yaml', ('/environments/9', 'env show 9 --format yaml', '{}\n')),
|
||||
('plain', ('/environments/9', 'env show 9 --format plain', '{}'))
|
||||
('json', ('/environments/9', 'env show 9 -f json',
|
||||
'{\n "id": 1\n}')),
|
||||
('yaml', ('/environments/9', 'env show 9 -f yaml', 'id: 1\n'))
|
||||
]
|
||||
]
|
||||
mock_url = None
|
||||
|
@ -105,7 +90,7 @@ class TestShowEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
self.req_mock.get(
|
||||
self.BASE_URL + self.mock_url,
|
||||
headers={'Content-Type': 'application/json'},
|
||||
json={},
|
||||
json={'id': 1},
|
||||
)
|
||||
self.cli.run(self.args.split())
|
||||
self.assertEqual(self.expected_result, self.cli.stdout.getvalue())
|
||||
|
@ -116,12 +101,8 @@ class TestDeleteEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
scenarios = [
|
||||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('json', ('/environments/9', 'env delete 9 --format json',
|
||||
'{}')),
|
||||
('yaml', ('/environments/9', 'env delete 9 --format yaml',
|
||||
'{}\n')),
|
||||
('plain', ('/environments/9', 'env delete 9 --format plain',
|
||||
'{}'))
|
||||
('json', ('/environments/9', 'env delete 9',
|
||||
'Environment with id 9 was deleted\n'))
|
||||
]
|
||||
]
|
||||
mock_url = None
|
||||
|
@ -131,8 +112,7 @@ class TestDeleteEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
def test_delete(self):
|
||||
self.req_mock.delete(
|
||||
self.BASE_URL + self.mock_url,
|
||||
headers={'Content-Type': 'application/json'},
|
||||
json={}
|
||||
headers={'Content-Type': 'application/json'}
|
||||
)
|
||||
self.cli.run(self.args.split())
|
||||
self.assertEqual(self.expected_result, self.cli.stdout.getvalue())
|
||||
|
@ -143,33 +123,19 @@ class TestUpdateEnvironment(testscenarios.WithScenarios, _BaseCLITest):
|
|||
scenarios = [
|
||||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('json', ('/environments/9',
|
||||
'env update 9 -f json',
|
||||
'{}')),
|
||||
('json', ('/environments/9',
|
||||
'env update 9 -l lvl1 -f json',
|
||||
'{}')),
|
||||
('yaml', ('/environments/9',
|
||||
'env update 9 -l lvl1,lvl2 -f yaml',
|
||||
'{}\n')),
|
||||
('plain', ('/environments/9',
|
||||
'env update 9 -l lvl1,lvl2 -c 1 -f plain',
|
||||
'{}')),
|
||||
('json', ('/environments/9',
|
||||
'env update 9 -l lvl1,lvl2 -c 1,2 -f json',
|
||||
'{}')),
|
||||
('json', ('/environments/9',
|
||||
'env update 9 -l [] -c 1,2 -f json',
|
||||
'{}')),
|
||||
('json', ('/environments/9',
|
||||
'env update 9 -l [] -c [] -f json',
|
||||
'{}')),
|
||||
('json', ('/environments/9',
|
||||
'env update 9 --levels [] --components [] --format json',
|
||||
'{}')),
|
||||
('json', ('/environments/9',
|
||||
'env update 9 --levels a,b --components 1,2',
|
||||
'{}')),
|
||||
('no_data', ('/environments/9', 'env update 9', '{}')),
|
||||
('level', ('/environments/9', 'env update 9 -l lvl1', '{}')),
|
||||
('levels', ('/environments/9',
|
||||
'env update 9 -l lvl1,lvl2',
|
||||
'{}')),
|
||||
('component', ('/environments/9',
|
||||
'env update 9 -l lvl1,lvl2 -i 1',
|
||||
'{}')),
|
||||
('components', ('/environments/9',
|
||||
'env update 9 -l lvl1,lvl2 -i 1,2',
|
||||
'{}')),
|
||||
('erase', ('/environments/9', 'env update 9 -l [] -i 1,2', '{}')),
|
||||
('erase', ('/environments/9', 'env update 9 -l [] -i []', '{}')),
|
||||
]
|
||||
]
|
||||
mock_url = None
|
||||
|
|
|
@ -104,7 +104,7 @@ class TestDeleteComponent(testscenarios.WithScenarios, _BaseCLITest):
|
|||
(s[0], dict(zip(('mock_url', 'args', 'expected_result'), s[1])))
|
||||
for s in [
|
||||
('', ('/resource_definitions/9', 'def delete 9',
|
||||
'Resource_definition with id 9 was deleted')),
|
||||
'Resource_definition with id 9 was deleted\n')),
|
||||
]
|
||||
]
|
||||
mock_url = None
|
||||
|
|
Loading…
Reference in New Issue