Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
import six
from cliff import show, lister
from collections import defaultdict
from osc_lib import utils as osc_utils

from workloadmgrclient import utils
from workloadmgrclient.openstack.common import strutils
from workloadmgrclient.v1 import WorkloadmgrCommand


class SettingsCommand(WorkloadmgrCommand):
    resource = "settings"


class CreateSettings(SettingsCommand):
    """Creates a setting."""

    @staticmethod
    def _add_arguments(parser):
        parser.add_argument("name", metavar="<name>", help="name of the setting")
        parser.add_argument("value", metavar="<vaule>", help="Value of the setting")
        parser.add_argument(
            "--description",
            metavar="<description>",
            help="Optional description. (Default=None)",
            default=None,
        )
        parser.add_argument(
            "--category",
            metavar="<category>",
            help="Optional category. (Default=None)",
            default=None,
        )
        parser.add_argument(
            "--type",
            metavar="<type>",
            help="Optional type of setting. (Default=None)",
            default=None,
        )
        parser.add_argument(
            "--is-public",
            type=strutils.bool_from_string,
            metavar="{True,False}",
            help="Make setting accessible to the public.",
            default=False,
        )
        parser.add_argument(
            "--is-hidden",
            type=strutils.bool_from_string,
            metavar="{True,False}",
            help="Make setting hidden.",
            default=False,
        )
        parser.add_argument(
            "--metadata",
            metavar="<key=value>",
            action="append",
            dest="metadata",
            default=[],
            help="Specify a key value pairs to include in the settings metadata"
            " Specify option multiple times to include multiple keys. "
            "key=value",
        )

    def take_action(self, parsed_args):
        client = self.get_client()
        metadata = defaultdict()
        for metadata_str in parsed_args.metadata:
            err_msg = (
                "Invalid metadata argument '%s'. metadata arguments must be of the "
                "form --metadata <key=value>" % metadata_str
            )

            try:
                k, v = metadata_str.split("=", 1)
            except ValueError:
                raise exceptions.CommandError(err_msg)
            metadata[k.strip()] = v.strip()

        client.create(
            parsed_args.name,
            parsed_args.value,
            parsed_args.description,
            parsed_args.category,
            parsed_args.type,
            parsed_args.is_public,
            parsed_args.is_hidden,
            metadata,
        )


class ListSettings(SettingsCommand, lister.Lister):
    """List all the settings."""

    @staticmethod
    def _add_arguments(parser):
        parser.add_argument(
            "--get_hidden",
            type=strutils.bool_from_string,
            metavar="{True,False}",
            help="show hidden settings",
            default=False,
        )

    def take_action(self, parsed_args):
        client = self.get_client()
        search_opts = {"get_hidden": parsed_args.get_hidden}
        setting_objs = client.list(search_opts=search_opts) or {}
        if len(setting_objs):
            setting_objs = setting_objs[1].get("settings", {})
        if not setting_objs:
            print("Setting not found")
        data = []
        for key, value in setting_objs.items():
            data.append({"name": key, "value": value})
        return (
            ["Name", "Value"],
            (osc_utils.get_dict_properties(obj, ["name", "value"]) for obj in data),
        )


class ShowSettings(SettingsCommand, show.ShowOne):
    """Show details of a setting."""

    @staticmethod
    def _add_arguments(parser):
        parser.add_argument(
            "setting_name", metavar="<setting_name>", help="name of the setting."
        )
        parser.add_argument(
            "--get_hidden",
            type=strutils.bool_from_string,
            metavar="{True,False}",
            help="show hidden settings",
            default=False,
        )

    def take_action(self, parsed_args):
        client = self.get_client()
        setting_obj = client.get(parsed_args.setting_name, parsed_args.get_hidden) or {}
        if not setting_obj:
            print("Setting not found")
        columns = list(setting_obj.keys())
        data = osc_utils.get_dict_properties(setting_obj, columns)
        return columns, data


class UpdateSettings(SettingsCommand):
    """Update a setting."""

    @staticmethod
    def _add_arguments(parser):
        parser.add_argument("name", metavar="<name>", help="name of the setting")
        parser.add_argument("value", metavar="<vaule>", help="Value of the setting")
        parser.add_argument(
            "--description",
            metavar="<description>",
            help="Optional description. (Default=None)",
            default=None,
        )
        parser.add_argument(
            "--category",
            metavar="<category>",
            help="Optional category. (Default=None)",
            default=None,
        )
        parser.add_argument(
            "--type",
            metavar="<type>",
            help="Optional type of setting. (Default=None)",
            default=None,
        )
        parser.add_argument(
            "--is-public",
            type=strutils.bool_from_string,
            metavar="{True,False}",
            help="Make setting accessible to the public.",
            default=False,
        )
        parser.add_argument(
            "--is-hidden",
            type=strutils.bool_from_string,
            metavar="{True,False}",
            help="Make setting hidden.",
            default=False,
        )
        parser.add_argument(
            "--metadata",
            metavar="<key=value>",
            action="append",
            dest="metadata",
            default=[],
            help="Specify a key value pairs to include in the settings metadata "
            "Specify option multiple times to include multiple keys. "
            "key=value",
        )

    def take_action(self, parsed_args):
        client = self.get_client()
        metadata = defaultdict()
        for metadata_str in parsed_args.metadata:
            err_msg = (
                "Invalid metadata argument '%s'. metadata arguments must be of the "
                "form --metadata <key=value>" % metadata_str
            )

            try:
                k, v = metadata_str.split("=", 1)
            except ValueError:
                raise exceptions.CommandError(err_msg)
            metadata[k.strip()] = v.strip()

        client.update(
            parsed_args.name,
            parsed_args.value,
            parsed_args.description,
            parsed_args.category,
            parsed_args.type,
            parsed_args.is_public,
            parsed_args.is_hidden,
            metadata,
        )


class DeleteSettings(SettingsCommand):
    """Remove a setting."""

    @staticmethod
    def _add_arguments(parser):
        parser.add_argument(
            "setting_name", metavar="<setting_name>", help="name of setting to delete."
        )

    def take_action(self, parsed_args):
        client = self.get_client()
        client.delete(parsed_args.setting_name)