示例#1
0
文件: pack.py 项目: neufeldtech/st2
    def run(self, args, **kwargs):
        schema = self.app.client.managers['ConfigSchema'].get_by_ref_or_id(args.name, **kwargs)

        if not schema:
            raise resource.ResourceNotFoundError("%s doesn't have config schema defined" %
                                                 self.resource.get_display_name())

        config = interactive.InteractiveForm(schema.attributes).initiate_dialog()

        message = '---\nDo you want to preview the config in an editor before saving?'
        description = 'Secrets would be shown in plain text.'
        preview_dialog = interactive.Question(message, {'default': 'y', 'description': description})
        if preview_dialog.read() == 'y':
            contents = yaml.safe_dump(config, indent=4, default_flow_style=False)
            modified = editor.edit(contents=contents)
            config = yaml.safe_load(modified)

        message = '---\nDo you want me to save it?'
        save_dialog = interactive.Question(message, {'default': 'y'})
        if save_dialog.read() == 'n':
            raise OperationFailureException('Interrupted')

        result = self.app.client.managers['Config'].update(Config(pack=args.name, values=config))

        return result
示例#2
0
    def run(self, args, **kwargs):
        schema = self.app.client.managers["ConfigSchema"].get_by_ref_or_id(
            args.name, **kwargs
        )

        if not schema:
            msg = "%s \"%s\" doesn't exist or doesn't have a config schema defined."
            raise resource.ResourceNotFoundError(
                msg % (self.resource.get_display_name(), args.name)
            )

        config = interactive.InteractiveForm(schema.attributes).initiate_dialog()

        message = "---\nDo you want to preview the config in an editor before saving?"
        description = "Secrets will be shown in plain text."
        preview_dialog = interactive.Question(
            message, {"default": "y", "description": description}
        )
        if preview_dialog.read() == "y":
            try:
                contents = yaml.safe_dump(config, indent=4, default_flow_style=False)
                modified = editor.edit(contents=contents)
                config = yaml.safe_load(modified)
            except editor.EditorError as e:
                print(six.text_type(e))

        message = "---\nDo you want me to save it?"
        save_dialog = interactive.Question(message, {"default": "y"})
        if save_dialog.read() == "n":
            raise OperationFailureException("Interrupted")

        config_item = Config(pack=args.name, values=config)
        result = self.app.client.managers["Config"].update(config_item, **kwargs)

        return result
示例#3
0
    def test_interactive_form_interrupted(self, stdout_mock):
        reader = mock.MagicMock()
        Reader = mock.MagicMock(return_value=reader)
        Reader.condition = mock.MagicMock(return_value=True)
        reader.read = mock.MagicMock(side_effect=KeyboardInterrupt)

        schema = {"string": {"type": "string"}}

        with mock.patch.object(interactive.InteractiveForm, "readers", [Reader]):
            interactive.InteractiveForm(schema).initiate_dialog()

        self.assertEqual(stdout_mock.getvalue(), "Dialog interrupted.\n")
示例#4
0
    def test_interactive_form_no_match(self):
        reader = mock.MagicMock()
        Reader = mock.MagicMock(return_value=reader)
        Reader.condition = mock.MagicMock(return_value=False)

        schema = {"string": {"type": "string"}}

        with mock.patch.object(interactive.InteractiveForm, "readers", [Reader]):
            interactive.InteractiveForm(schema).initiate_dialog()

        Reader.condition.assert_called_once_with(schema["string"])
        reader.read.assert_not_called()
示例#5
0
    def test_interactive_form_interrupted_reraised(self):
        reader = mock.MagicMock()
        Reader = mock.MagicMock(return_value=reader)
        Reader.condition = mock.MagicMock(return_value=True)
        reader.read = mock.MagicMock(side_effect=KeyboardInterrupt)

        schema = {"string": {"type": "string"}}

        with mock.patch.object(interactive.InteractiveForm, "readers", [Reader]):
            self.assertRaises(
                interactive.DialogInterrupted,
                interactive.InteractiveForm(schema, reraise=True).initiate_dialog,
            )
示例#6
0
    def test_interactive_form(self):
        reader = mock.MagicMock()
        Reader = mock.MagicMock(return_value=reader)
        Reader.condition = mock.MagicMock(return_value=True)

        schema = {'string': {'type': 'string'}}

        with mock.patch.object(interactive.InteractiveForm, 'readers',
                               [Reader]):
            interactive.InteractiveForm(schema).initiate_dialog()

        Reader.condition.assert_called_once_with(schema['string'])
        reader.read.assert_called_once_with()