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:
# Copyright (c) 2013 TrilioData, Inc.
"""
Settings Interface (1.1 extension).
"""
import six

try:
    from urllib import urlencode
except ImportError:
    from urllib.parse import urlencode

from workloadmgrclient import base


class Setting(base.Resource):
    """A setting describes the type of a workload"""

    def __repr__(self):
        return "<Setting: %s>" % self.name

    def delete(self):
        """Delete this setting."""
        return self.manager.delete(self)

    def create_bulk(self, dict_of_settings):
        """Create settings"""
        return self.manager.create_bulk(self, dict_of_settings)

    def get(self, setting_name):
        """Get setting"""
        return self.manager.get(self, setting_name)

    def list(self, get_hidden=False):
        """List settings"""
        return self.manager.list(self, get_hidden)

    def test_email(self, **kwargs):
        """Test email settings"""
        return self.manager.test_email(self)


class SettingsManager(base.ManagerWithFind):
    """Manage :class:`Setting` resources."""

    resource_class = Setting

    def create_bulk(self, dict_of_settings):
        """Create settings bulk

        :param dict_of_settings: all settings
        """
        body = {"settings": dict_of_settings}
        return self._create("/workloads/settings", body, "settings", return_raw=True)

    def create(
        self,
        name,
        value,
        description=None,
        category=None,
        type=None,
        is_public=False,
        is_hidden=False,
        metadata=None,
    ):
        """
        Create a setting.
        :param name: The name of the setting.
        :param value: value to store
        :param description: The description of the setting.
        :param category: The category of the setting.
        :param type: The type of the setting.
        :param is_public: The is_public value of the setting.
        :param is_hidden: The is_hidden value of the setting.
        :param metadata: metadata of setting.
        :rtype: :class:`Setting`
        """
        body = {
            "settings": [
                {
                    "name": name,
                    "value": value,
                    "description": description,
                    "category": category,
                    "type": type,
                    "is_public": is_public,
                    "is_hidden": is_hidden,
                    "metadata": metadata,
                }
            ]
        }
        return self._create("/settings", body, "settings", return_raw=True)

    def update(
        self,
        name,
        value,
        description=None,
        category=None,
        type=None,
        is_public=False,
        is_hidden=False,
        metadata=None,
    ):
        """
        Update a setting.
        :param name: The name of the setting.
        :param value: value to store
        :param description: The description of the setting.
        :param category: The category of the setting.
        :param type: The type of the setting.
        :param is_public: The is_public value of the setting.
        :param is_hidden: The is_hidden value of the setting.
        :param metadata: metadata of setting.
        """
        body = {
            "settings": [
                {
                    "name": name,
                    "value": value,
                    "description": description,
                    "category": category,
                    "type": type,
                    "is_public": is_public,
                    "is_hidden": is_hidden,
                    "metadata": metadata,
                }
            ]
        }
        return self._update("/settings", body)

    def get(self, setting_name, get_hidden=False):
        """
        Show details of a setting.
        :param setting_name: The key name of the setting to display.
        :rtype: :class:`Setting`
        :param get_hidden: A decision flag to fetch hidden settings
        :rtype: :class:`Setting`

        """
        if get_hidden:
            resp, body = self.api.client.get(
                "/settings/%s?get_hidden=true" % setting_name
            )
            return body["setting"]
        else:
            resp, body = self.api.client.get("/settings/%s" % setting_name)
            return body["setting"]

    def list(self, search_opts=None):
        """
        Get a list of all settings.
        :rtype: list of :class:`Setting`
        """
        if not search_opts:
            search_opts = {}

        params = {opt: val for opt, val in six.iteritems(search_opts) if val}
        query_string = "?%s" % urlencode(params) if params else ""
        return self.api.client.post("/workloads/settings%s" % query_string, body=None)

    def test_email(self, **kwargs):
        """
        Tests whether email settings working
        """
        test_email_data = {
            "smtp_server_name": kwargs.get("smtp_server_name", ""),
            "smtp_server_username": kwargs.get("smtp_server_username", ""),
            "smtp_server_password": kwargs.get("smtp_server_password", ""),
            "smtp_port": kwargs.get("smtp_port", ""),
            "smtp_timeout": kwargs.get("smtp_timeout", 10),
            "smtp_default_sender": kwargs.get("smtp_default_sender", ""),
        }

        params = {opt: val for opt, val in six.iteritems(test_email_data) if val}
        query_string = "?%s" % urlencode(params) if params else ""
        return self.api.client.get("/workloads/email/test_email%s" % query_string)

    def delete(self, setting_name):
        """
        Delete a setting.
        :param setting_name: he key name of the setting to display.
        """
        self._delete("/settings/%s" % base.getid(setting_name))