text: # coding: utf-8
  
  """
  PresenceApi.py
  Copyright 2016 SmartBear Software
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  """
  
  from __future__ import absolute_import
  
  import sys
  import os
  import re
  
  # python 2 and python 3 compatibility library
  from six import iteritems
  
  from ..configuration import Configuration
  from ..api_client import ApiClient
  
  
  class PresenceApi(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):
          config = Configuration()
          if api_client:
              self.api_client = api_client
          else:
              if not config.api_client:
                  config.api_client = ApiClient()
              self.api_client = config.api_client
  
      def delete_presencedefinition(self, presence_id, **kwargs):
          """
          Delete a Presence Definition
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.delete_presencedefinition(presence_id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str presence_id: Organization Presence ID (required)
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['presence_id']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method delete_presencedefinition" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'presence_id' is set
          if ('presence_id' not in params) or (params['presence_id'] is None):
              raise ValueError("Missing the required parameter `presence_id` when calling `delete_presencedefinition`")
  
  
          resource_path = '/api/v2/presencedefinitions/{presenceId}'.replace('{format}', 'json')
          path_params = {}
          if 'presence_id' in params:
              path_params['presenceId'] = params['presence_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'DELETE',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type=None,
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_presencedefinition(self, presence_id, **kwargs):
          """
          Get a Presence Definition
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_presencedefinition(presence_id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str presence_id: Organization Presence ID (required)
          :param str locale_code: The locale code to fetch for the presence definition. Use ALL to fetch everything.
          :return: OrganizationPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['presence_id', 'locale_code']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_presencedefinition" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'presence_id' is set
          if ('presence_id' not in params) or (params['presence_id'] is None):
              raise ValueError("Missing the required parameter `presence_id` when calling `get_presencedefinition`")
  
  
          resource_path = '/api/v2/presencedefinitions/{presenceId}'.replace('{format}', 'json')
          path_params = {}
          if 'presence_id' in params:
              path_params['presenceId'] = params['presence_id']
  
          query_params = {}
          if 'locale_code' in params:
              query_params['localeCode'] = params['locale_code']
  
          header_params = {}
  
          form_params = []
          local_var_files = {}
  
          body_params = None
  
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.\
              select_header_accept(['application/json'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='OrganizationPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_presencedefinitions(self, **kwargs):
          """
          Get an Organization's list of Presence Definitions
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_presencedefinitions(callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param int page_number: Page number
          :param int page_size: Page size
          :param str deleted: Deleted query can be TRUE, FALSE or ALL
          :param str locale_code: The locale code to fetch for each presence definition. Use ALL to fetch everything.
          :return: OrganizationPresenceEntityListing
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['page_number', 'page_size', 'deleted', 'locale_code']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_presencedefinitions" % key
                  )
              params[key] = val
          del params['kwargs']
  
  
  
          resource_path = '/api/v2/presencedefinitions'.replace('{format}', 'json')
          path_params = {}
  
          query_params = {}
          if 'page_number' in params:
              query_params['pageNumber'] = params['page_number']
          if 'page_size' in params:
              query_params['pageSize'] = params['page_size']
          if 'deleted' in params:
              query_params['deleted'] = params['deleted']
          if 'locale_code' in params:
              query_params['localeCode'] = params['locale_code']
  
          header_params = {}
  
          form_params = []
          local_var_files = {}
  
          body_params = None
  
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.\
              select_header_accept(['application/json'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='OrganizationPresenceEntityListing',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_systempresences(self, **kwargs):
          """
          Get the list of SystemPresences
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_systempresences(callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :return: list[SystemPresence]
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = []
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_systempresences" % key
                  )
              params[key] = val
          del params['kwargs']
  
  
  
          resource_path = '/api/v2/systempresences'.replace('{format}', 'json')
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='list[SystemPresence]',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_user_presence(self, user_id, source_id, **kwargs):
          """
          Get a user's Presence
          Get a user's presence for the specified source that is not specifically listed.  Used to support custom presence sources.
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_user_presence(user_id, source_id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str user_id: user Id (required)
          :param str source_id: Presence source ID (required)
          :return: UserPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['user_id', 'source_id']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_user_presence" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'user_id' is set
          if ('user_id' not in params) or (params['user_id'] is None):
              raise ValueError("Missing the required parameter `user_id` when calling `get_user_presence`")
          # verify the required parameter 'source_id' is set
          if ('source_id' not in params) or (params['source_id'] is None):
              raise ValueError("Missing the required parameter `source_id` when calling `get_user_presence`")
  
  
          resource_path = '/api/v2/users/{userId}/presences/{sourceId}'.replace('{format}', 'json')
          path_params = {}
          if 'user_id' in params:
              path_params['userId'] = params['user_id']
          if 'source_id' in params:
              path_params['sourceId'] = params['source_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='UserPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_user_presences_microsoftteams(self, user_id, **kwargs):
          """
          Get a user's Microsoft Teams presence.
          Gets the presence for a Microsoft Teams user.  This will return the Microsoft Teams presence mapped to Genesys Cloud presence with additional activity details in the message field. This presence source is read-only.
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_user_presences_microsoftteams(user_id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str user_id: user Id (required)
          :return: PresenceExpand
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['user_id']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_user_presences_microsoftteams" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'user_id' is set
          if ('user_id' not in params) or (params['user_id'] is None):
              raise ValueError("Missing the required parameter `user_id` when calling `get_user_presences_microsoftteams`")
  
  
          resource_path = '/api/v2/users/{userId}/presences/microsoftteams'.replace('{format}', 'json')
          path_params = {}
          if 'user_id' in params:
              path_params['userId'] = params['user_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='PresenceExpand',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_user_presences_purecloud(self, user_id, **kwargs):
          """
          Get a user's Genesys Cloud presence.
          Get the default Genesys Cloud user presence source PURECLOUD
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_user_presences_purecloud(user_id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str user_id: user Id (required)
          :return: UserPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['user_id']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_user_presences_purecloud" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'user_id' is set
          if ('user_id' not in params) or (params['user_id'] is None):
              raise ValueError("Missing the required parameter `user_id` when calling `get_user_presences_purecloud`")
  
  
          resource_path = '/api/v2/users/{userId}/presences/purecloud'.replace('{format}', 'json')
          path_params = {}
          if 'user_id' in params:
              path_params['userId'] = params['user_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='UserPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def get_user_presences_zoomphone(self, user_id, **kwargs):
          """
          Get a user's Zoom Phone presence.
          Gets the presence for a Zoom user.  This will return the Zoom Phone presence mapped to Genesys Cloud presence with additional activity details in the message field. This presence source is read-only.
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.get_user_presences_zoomphone(user_id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str user_id: user Id (required)
          :return: PresenceExpand
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['user_id']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_user_presences_zoomphone" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'user_id' is set
          if ('user_id' not in params) or (params['user_id'] is None):
              raise ValueError("Missing the required parameter `user_id` when calling `get_user_presences_zoomphone`")
  
  
          resource_path = '/api/v2/users/{userId}/presences/zoomphone'.replace('{format}', 'json')
          path_params = {}
          if 'user_id' in params:
              path_params['userId'] = params['user_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'GET',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='PresenceExpand',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def patch_user_presence(self, user_id, source_id, body, **kwargs):
          """
          Patch a user's Presence
          Patch a user's presence for the specified source that is not specifically listed. The presence object can be patched one of three ways. Option 1: Set the 'primary' property to true. This will set the 'source' defined in the path as the user's primary presence source. Option 2: Provide the presenceDefinition value. The 'id' is the only value required within the presenceDefinition. Option 3: Provide the message value. Option 1 can be combined with Option 2 and/or Option 3.
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.patch_user_presence(user_id, source_id, body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str user_id: user Id (required)
          :param str source_id: Presence source ID (required)
          :param UserPresence body: User presence (required)
          :return: UserPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['user_id', 'source_id', 'body']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method patch_user_presence" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'user_id' is set
          if ('user_id' not in params) or (params['user_id'] is None):
              raise ValueError("Missing the required parameter `user_id` when calling `patch_user_presence`")
          # verify the required parameter 'source_id' is set
          if ('source_id' not in params) or (params['source_id'] is None):
              raise ValueError("Missing the required parameter `source_id` when calling `patch_user_presence`")
          # 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 `patch_user_presence`")
  
  
          resource_path = '/api/v2/users/{userId}/presences/{sourceId}'.replace('{format}', 'json')
          path_params = {}
          if 'user_id' in params:
              path_params['userId'] = params['user_id']
          if 'source_id' in params:
              path_params['sourceId'] = params['source_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'PATCH',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='UserPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def patch_user_presences_purecloud(self, user_id, body, **kwargs):
          """
          Patch a Genesys Cloud user's presence
          The presence object can be patched one of three ways. Option 1: Set the 'primary' property to true. This will set the PURECLOUD source as the user's primary presence source. Option 2: Provide the presenceDefinition value. The 'id' is the only value required within the presenceDefinition. Option 3: Provide the message value. Option 1 can be combined with Option 2 and/or Option 3.
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.patch_user_presences_purecloud(user_id, body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str user_id: user Id (required)
          :param UserPresence body: User presence (required)
          :return: UserPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['user_id', 'body']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method patch_user_presences_purecloud" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'user_id' is set
          if ('user_id' not in params) or (params['user_id'] is None):
              raise ValueError("Missing the required parameter `user_id` when calling `patch_user_presences_purecloud`")
          # 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 `patch_user_presences_purecloud`")
  
  
          resource_path = '/api/v2/users/{userId}/presences/purecloud'.replace('{format}', 'json')
          path_params = {}
          if 'user_id' in params:
              path_params['userId'] = params['user_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'PATCH',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='UserPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def post_presencedefinitions(self, body, **kwargs):
          """
          Create a Presence Definition
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.post_presencedefinitions(body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param OrganizationPresence body: The Presence Definition to create (required)
          :return: OrganizationPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['body']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method post_presencedefinitions" % 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 `post_presencedefinitions`")
  
  
          resource_path = '/api/v2/presencedefinitions'.replace('{format}', 'json')
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'POST',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='OrganizationPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def put_presencedefinition(self, presence_id, body, **kwargs):
          """
          Update a Presence Definition
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.put_presencedefinition(presence_id, body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str presence_id: Organization Presence ID (required)
          :param OrganizationPresence body: The OrganizationPresence to update (required)
          :return: OrganizationPresence
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['presence_id', 'body']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method put_presencedefinition" % key
                  )
              params[key] = val
          del params['kwargs']
  
          # verify the required parameter 'presence_id' is set
          if ('presence_id' not in params) or (params['presence_id'] is None):
              raise ValueError("Missing the required parameter `presence_id` when calling `put_presencedefinition`")
          # 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 `put_presencedefinition`")
  
  
          resource_path = '/api/v2/presencedefinitions/{presenceId}'.replace('{format}', 'json')
          path_params = {}
          if 'presence_id' in params:
              path_params['presenceId'] = params['presence_id']
  
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'PUT',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='OrganizationPresence',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  
      def put_users_presences_bulk(self, body, **kwargs):
          """
          Update bulk user Presences
          
  
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please define a `callback` function
          to be invoked when receiving the response.
          >>> def callback_function(response):
          >>>     pprint(response)
          >>>
          >>> thread = api.put_users_presences_bulk(body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param list[UserPresence] body: List of User presences (required)
          :return: list[UserPresence]
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['body']
          all_params.append('callback')
  
          params = locals()
          for key, val in iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method put_users_presences_bulk" % 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 `put_users_presences_bulk`")
  
  
          resource_path = '/api/v2/users/presences/bulk'.replace('{format}', 'json')
          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'])
          if not header_params['Accept']:
              del header_params['Accept']
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['PureCloud OAuth']
  
          response = self.api_client.call_api(resource_path, 'PUT',
                                              path_params,
                                              query_params,
                                              header_params,
                                              body=body_params,
                                              post_params=form_params,
                                              files=local_var_files,
                                              response_type='list[UserPresence]',
                                              auth_settings=auth_settings,
                                              callback=params.get('callback'))
          return response
  