# coding: utf-8

"""
    Spotii Billing API

    API for Billing  # noqa: E501

    OpenAPI spec version: v1.0
    Contact: hello@nuclearo.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

from __future__ import absolute_import

import re  # noqa: F401

# python 2 and python 3 compatibility library
import six

from spotii_billing_client.api_client import ApiClient


class TenantApi(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    Ref: https://github.com/swagger-api/swagger-codegen
    """

    def __init__(self, api_client=None):
        if api_client is None:
            api_client = ApiClient()
        self.api_client = api_client

    def tenant_configurations_create(self, body, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_create(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param Configuration body: (required)
        :return: Configuration
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_configurations_create_with_http_info(body, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_configurations_create_with_http_info(body, **kwargs)  # noqa: E501
            return data

    def tenant_configurations_create_with_http_info(self, body, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_create_with_http_info(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param Configuration body: (required)
        :return: Configuration
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_configurations_create" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_configurations_create`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/configurations/', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Configuration',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_configurations_delete(self, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_delete(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_configurations_delete_with_http_info(key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_configurations_delete_with_http_info(key, **kwargs)  # noqa: E501
            return data

    def tenant_configurations_delete_with_http_info(self, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_delete_with_http_info(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_configurations_delete" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_configurations_delete`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/configurations/{key}/', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_configurations_list(self, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_list(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[Configuration]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_configurations_list_with_http_info(**kwargs)  # noqa: E501
        else:
            (data) = self.tenant_configurations_list_with_http_info(**kwargs)  # noqa: E501
            return data

    def tenant_configurations_list_with_http_info(self, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_list_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[Configuration]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = []  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_configurations_list" % key
                )
            params[key] = val
        del params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/configurations/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Configuration]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_configurations_partial_update(self, body, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_partial_update(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param ConfigurationUpdate body: (required)
        :param str key: (required)
        :return: ConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_configurations_partial_update_with_http_info(body, key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_configurations_partial_update_with_http_info(body, key, **kwargs)  # noqa: E501
            return data

    def tenant_configurations_partial_update_with_http_info(self, body, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_partial_update_with_http_info(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param ConfigurationUpdate body: (required)
        :param str key: (required)
        :return: ConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body', 'key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_configurations_partial_update" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_configurations_partial_update`")  # noqa: E501
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_configurations_partial_update`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/configurations/{key}/', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ConfigurationUpdate',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_configurations_read(self, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_read(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: Configuration
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_configurations_read_with_http_info(key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_configurations_read_with_http_info(key, **kwargs)  # noqa: E501
            return data

    def tenant_configurations_read_with_http_info(self, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_read_with_http_info(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: Configuration
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_configurations_read" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_configurations_read`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/configurations/{key}/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Configuration',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_configurations_update(self, body, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_update(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param ConfigurationUpdate body: (required)
        :param str key: (required)
        :return: ConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_configurations_update_with_http_info(body, key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_configurations_update_with_http_info(body, key, **kwargs)  # noqa: E501
            return data

    def tenant_configurations_update_with_http_info(self, body, key, **kwargs):  # noqa: E501
        """Tenant configuration  # noqa: E501

        Some of the tenant configuration can be overriden at the tenant level  to allow different behaviors.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_configurations_update_with_http_info(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param ConfigurationUpdate body: (required)
        :param str key: (required)
        :return: ConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body', 'key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_configurations_update" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_configurations_update`")  # noqa: E501
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_configurations_update`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/configurations/{key}/', 'PUT',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ConfigurationUpdate',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_plugin_configurations_create(self, body, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_create(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PluginConfiguration body: (required)
        :return: PluginConfiguration
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_plugin_configurations_create_with_http_info(body, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_plugin_configurations_create_with_http_info(body, **kwargs)  # noqa: E501
            return data

    def tenant_plugin_configurations_create_with_http_info(self, body, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_create_with_http_info(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PluginConfiguration body: (required)
        :return: PluginConfiguration
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_plugin_configurations_create" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_plugin_configurations_create`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/plugin_configurations/', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PluginConfiguration',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_plugin_configurations_delete(self, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_delete(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_plugin_configurations_delete_with_http_info(key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_plugin_configurations_delete_with_http_info(key, **kwargs)  # noqa: E501
            return data

    def tenant_plugin_configurations_delete_with_http_info(self, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_delete_with_http_info(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_plugin_configurations_delete" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_plugin_configurations_delete`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/plugin_configurations/{key}/', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_plugin_configurations_list(self, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_list(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[PluginConfiguration]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_plugin_configurations_list_with_http_info(**kwargs)  # noqa: E501
        else:
            (data) = self.tenant_plugin_configurations_list_with_http_info(**kwargs)  # noqa: E501
            return data

    def tenant_plugin_configurations_list_with_http_info(self, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_list_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[PluginConfiguration]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = []  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_plugin_configurations_list" % key
                )
            params[key] = val
        del params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/plugin_configurations/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[PluginConfiguration]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_plugin_configurations_partial_update(self, body, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_partial_update(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PluginConfigurationUpdate body: (required)
        :param str key: (required)
        :return: PluginConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_plugin_configurations_partial_update_with_http_info(body, key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_plugin_configurations_partial_update_with_http_info(body, key, **kwargs)  # noqa: E501
            return data

    def tenant_plugin_configurations_partial_update_with_http_info(self, body, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_partial_update_with_http_info(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PluginConfigurationUpdate body: (required)
        :param str key: (required)
        :return: PluginConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body', 'key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_plugin_configurations_partial_update" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_plugin_configurations_partial_update`")  # noqa: E501
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_plugin_configurations_partial_update`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/plugin_configurations/{key}/', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PluginConfigurationUpdate',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_plugin_configurations_read(self, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_read(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: PluginConfiguration
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_plugin_configurations_read_with_http_info(key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_plugin_configurations_read_with_http_info(key, **kwargs)  # noqa: E501
            return data

    def tenant_plugin_configurations_read_with_http_info(self, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_read_with_http_info(key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str key: (required)
        :return: PluginConfiguration
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_plugin_configurations_read" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_plugin_configurations_read`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/plugin_configurations/{key}/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PluginConfiguration',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_plugin_configurations_update(self, body, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_update(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PluginConfigurationUpdate body: (required)
        :param str key: (required)
        :return: PluginConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_plugin_configurations_update_with_http_info(body, key, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_plugin_configurations_update_with_http_info(body, key, **kwargs)  # noqa: E501
            return data

    def tenant_plugin_configurations_update_with_http_info(self, body, key, **kwargs):  # noqa: E501
        """Plugin configuration  # noqa: E501

        Plugins configuration per tenant level. For instance per-tenant plugin configuration for payment gateway CyberSource (access_keys, test/live environment).  System will generate a TENANT_CONFIGURATION_UPDATED/TENANT_CONFIGURATION_DELETED event, and such event can be handled in the plugin to refresh it's configuration.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_plugin_configurations_update_with_http_info(body, key, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PluginConfigurationUpdate body: (required)
        :param str key: (required)
        :return: PluginConfigurationUpdate
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body', 'key']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_plugin_configurations_update" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_plugin_configurations_update`")  # noqa: E501
        # verify the required parameter 'key' is set
        if ('key' not in params or
                params['key'] is None):
            raise ValueError("Missing the required parameter `key` when calling `tenant_plugin_configurations_update`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'key' in params:
            path_params['key'] = params['key']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/plugin_configurations/{key}/', 'PUT',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PluginConfigurationUpdate',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_push_notifications_create(self, body, **kwargs):  # noqa: E501
        """tenant_push_notifications_create  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_create(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PushNotification body: (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_push_notifications_create_with_http_info(body, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_push_notifications_create_with_http_info(body, **kwargs)  # noqa: E501
            return data

    def tenant_push_notifications_create_with_http_info(self, body, **kwargs):  # noqa: E501
        """tenant_push_notifications_create  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_create_with_http_info(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PushNotification body: (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_push_notifications_create" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_push_notifications_create`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/push_notifications/', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PushNotification',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_push_notifications_delete(self, push_notification_id, **kwargs):  # noqa: E501
        """tenant_push_notifications_delete  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_delete(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_push_notifications_delete_with_http_info(push_notification_id, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_push_notifications_delete_with_http_info(push_notification_id, **kwargs)  # noqa: E501
            return data

    def tenant_push_notifications_delete_with_http_info(self, push_notification_id, **kwargs):  # noqa: E501
        """tenant_push_notifications_delete  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_delete_with_http_info(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['push_notification_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_push_notifications_delete" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'push_notification_id' is set
        if ('push_notification_id' not in params or
                params['push_notification_id'] is None):
            raise ValueError("Missing the required parameter `push_notification_id` when calling `tenant_push_notifications_delete`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'push_notification_id' in params:
            path_params['push_notification_id'] = params['push_notification_id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/push_notifications/{push_notification_id}/', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_push_notifications_list(self, **kwargs):  # noqa: E501
        """tenant_push_notifications_list  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_list(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[PushNotification]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_push_notifications_list_with_http_info(**kwargs)  # noqa: E501
        else:
            (data) = self.tenant_push_notifications_list_with_http_info(**kwargs)  # noqa: E501
            return data

    def tenant_push_notifications_list_with_http_info(self, **kwargs):  # noqa: E501
        """tenant_push_notifications_list  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_list_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[PushNotification]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = []  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_push_notifications_list" % key
                )
            params[key] = val
        del params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/push_notifications/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[PushNotification]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_push_notifications_read(self, push_notification_id, **kwargs):  # noqa: E501
        """tenant_push_notifications_read  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_read(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_push_notifications_read_with_http_info(push_notification_id, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_push_notifications_read_with_http_info(push_notification_id, **kwargs)  # noqa: E501
            return data

    def tenant_push_notifications_read_with_http_info(self, push_notification_id, **kwargs):  # noqa: E501
        """tenant_push_notifications_read  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_push_notifications_read_with_http_info(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['push_notification_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_push_notifications_read" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'push_notification_id' is set
        if ('push_notification_id' not in params or
                params['push_notification_id'] is None):
            raise ValueError("Missing the required parameter `push_notification_id` when calling `tenant_push_notifications_read`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'push_notification_id' in params:
            path_params['push_notification_id'] = params['push_notification_id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/push_notifications/{push_notification_id}/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PushNotification',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_tenants_create(self, body, **kwargs):  # noqa: E501
        """tenant_tenants_create  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_create(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param Tenant body: (required)
        :return: Tenant
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_tenants_create_with_http_info(body, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_tenants_create_with_http_info(body, **kwargs)  # noqa: E501
            return data

    def tenant_tenants_create_with_http_info(self, body, **kwargs):  # noqa: E501
        """tenant_tenants_create  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_create_with_http_info(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param Tenant body: (required)
        :return: Tenant
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_tenants_create" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `tenant_tenants_create`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/tenants/', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Tenant',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_tenants_delete(self, tenant_id, **kwargs):  # noqa: E501
        """tenant_tenants_delete  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_delete(tenant_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str tenant_id: A UUID string identifying this tenant. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_tenants_delete_with_http_info(tenant_id, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_tenants_delete_with_http_info(tenant_id, **kwargs)  # noqa: E501
            return data

    def tenant_tenants_delete_with_http_info(self, tenant_id, **kwargs):  # noqa: E501
        """tenant_tenants_delete  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_delete_with_http_info(tenant_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str tenant_id: A UUID string identifying this tenant. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['tenant_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_tenants_delete" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'tenant_id' is set
        if ('tenant_id' not in params or
                params['tenant_id'] is None):
            raise ValueError("Missing the required parameter `tenant_id` when calling `tenant_tenants_delete`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'tenant_id' in params:
            path_params['tenant_id'] = params['tenant_id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/tenants/{tenant_id}/', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_tenants_list(self, **kwargs):  # noqa: E501
        """tenant_tenants_list  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_list(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[Tenant]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_tenants_list_with_http_info(**kwargs)  # noqa: E501
        else:
            (data) = self.tenant_tenants_list_with_http_info(**kwargs)  # noqa: E501
            return data

    def tenant_tenants_list_with_http_info(self, **kwargs):  # noqa: E501
        """tenant_tenants_list  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_list_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[Tenant]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = []  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_tenants_list" % key
                )
            params[key] = val
        del params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/tenants/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Tenant]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def tenant_tenants_read(self, tenant_id, **kwargs):  # noqa: E501
        """tenant_tenants_read  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_read(tenant_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str tenant_id: A UUID string identifying this tenant. (required)
        :return: Tenant
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.tenant_tenants_read_with_http_info(tenant_id, **kwargs)  # noqa: E501
        else:
            (data) = self.tenant_tenants_read_with_http_info(tenant_id, **kwargs)  # noqa: E501
            return data

    def tenant_tenants_read_with_http_info(self, tenant_id, **kwargs):  # noqa: E501
        """tenant_tenants_read  # noqa: E501

        Tenant  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.tenant_tenants_read_with_http_info(tenant_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str tenant_id: A UUID string identifying this tenant. (required)
        :return: Tenant
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['tenant_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method tenant_tenants_read" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'tenant_id' is set
        if ('tenant_id' not in params or
                params['tenant_id'] is None):
            raise ValueError("Missing the required parameter `tenant_id` when calling `tenant_tenants_read`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'tenant_id' in params:
            path_params['tenant_id'] = params['tenant_id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/tenant/tenants/{tenant_id}/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Tenant',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)
