text: # -*- coding: utf-8 -*-
  
  from square.api_helper import APIHelper
  from square.http.api_response import ApiResponse
  from square.api.base_api import BaseApi
  from square.http.auth.o_auth_2 import OAuth2
  
  
  class CustomerGroupsApi(BaseApi):
  
      """A Controller to access Endpoints in the square API."""
  
      def __init__(self, config, call_back=None):
          super(CustomerGroupsApi, self).__init__(config, call_back)
  
      def list_customer_groups(self,
                               cursor=None):
          """Does a GET request to /v2/customers/groups.
  
          Retrieves the list of customer groups of a business.
  
          Args:
              cursor (string, optional): A pagination cursor returned by a
                  previous call to this endpoint. Provide this to retrieve the
                  next set of results for your original query.  See the
                  [Pagination
                  guide](https://developer.squareup.com/docs/working-with-apis/pa
                  gination) for more information.
  
          Returns:
              ApiResponse: An object with the response value as well as other
                  useful information such as status codes and headers. Success
  
          Raises:
              APIException: When an error occurs while fetching the data from
                  the remote API. This exception includes the HTTP Response
                  code, an error message, and the HTTP body that was received in
                  the request.
  
          """
  
          # Prepare query URL
          _url_path = '/v2/customers/groups'
          _query_builder = self.config.get_base_uri()
          _query_builder += _url_path
          _query_parameters = {
              'cursor': cursor
          }
          _query_builder = APIHelper.append_url_with_query_parameters(
              _query_builder,
              _query_parameters
          )
          _query_url = APIHelper.clean_url(_query_builder)
  
          # Prepare headers
          _headers = {
              'accept': 'application/json'
          }
  
          # Prepare and execute request
          _request = self.config.http_client.get(_query_url, headers=_headers)
          OAuth2.apply(self.config, _request)
          _response = self.execute_request(_request)
  
          decoded = APIHelper.json_deserialize(_response.text)
          if type(decoded) is dict:
              _errors = decoded.get('errors')
          else:
              _errors = None
          _result = ApiResponse(_response, body=decoded, errors=_errors)
          return _result
  
      def create_customer_group(self,
                                body):
          """Does a POST request to /v2/customers/groups.
  
          Creates a new customer group for a business. 
          The request must include the `name` value of the group.
  
          Args:
              body (CreateCustomerGroupRequest): An object containing the fields
                  to POST for the request.  See the corresponding object
                  definition for field details.
  
          Returns:
              ApiResponse: An object with the response value as well as other
                  useful information such as status codes and headers. Success
  
          Raises:
              APIException: When an error occurs while fetching the data from
                  the remote API. This exception includes the HTTP Response
                  code, an error message, and the HTTP body that was received in
                  the request.
  
          """
  
          # Prepare query URL
          _url_path = '/v2/customers/groups'
          _query_builder = self.config.get_base_uri()
          _query_builder += _url_path
          _query_url = APIHelper.clean_url(_query_builder)
  
          # Prepare headers
          _headers = {
              'accept': 'application/json',
              'content-type': 'application/json; charset=utf-8'
          }
  
          # Prepare and execute request
          _request = self.config.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(body))
          OAuth2.apply(self.config, _request)
          _response = self.execute_request(_request)
  
          decoded = APIHelper.json_deserialize(_response.text)
          if type(decoded) is dict:
              _errors = decoded.get('errors')
          else:
              _errors = None
          _result = ApiResponse(_response, body=decoded, errors=_errors)
          return _result
  
      def delete_customer_group(self,
                                group_id):
          """Does a DELETE request to /v2/customers/groups/{group_id}.
  
          Deletes a customer group as identified by the `group_id` value.
  
          Args:
              group_id (string): The ID of the customer group to delete.
  
          Returns:
              ApiResponse: An object with the response value as well as other
                  useful information such as status codes and headers. Success
  
          Raises:
              APIException: When an error occurs while fetching the data from
                  the remote API. This exception includes the HTTP Response
                  code, an error message, and the HTTP body that was received in
                  the request.
  
          """
  
          # Prepare query URL
          _url_path = '/v2/customers/groups/{group_id}'
          _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
              'group_id': {'value': group_id, 'encode': True}
          })
          _query_builder = self.config.get_base_uri()
          _query_builder += _url_path
          _query_url = APIHelper.clean_url(_query_builder)
  
          # Prepare headers
          _headers = {
              'accept': 'application/json'
          }
  
          # Prepare and execute request
          _request = self.config.http_client.delete(_query_url, headers=_headers)
          OAuth2.apply(self.config, _request)
          _response = self.execute_request(_request)
  
          decoded = APIHelper.json_deserialize(_response.text)
          if type(decoded) is dict:
              _errors = decoded.get('errors')
          else:
              _errors = None
          _result = ApiResponse(_response, body=decoded, errors=_errors)
          return _result
  
      def retrieve_customer_group(self,
                                  group_id):
          """Does a GET request to /v2/customers/groups/{group_id}.
  
          Retrieves a specific customer group as identified by the `group_id`
          value.
  
          Args:
              group_id (string): The ID of the customer group to retrieve.
  
          Returns:
              ApiResponse: An object with the response value as well as other
                  useful information such as status codes and headers. Success
  
          Raises:
              APIException: When an error occurs while fetching the data from
                  the remote API. This exception includes the HTTP Response
                  code, an error message, and the HTTP body that was received in
                  the request.
  
          """
  
          # Prepare query URL
          _url_path = '/v2/customers/groups/{group_id}'
          _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
              'group_id': {'value': group_id, 'encode': True}
          })
          _query_builder = self.config.get_base_uri()
          _query_builder += _url_path
          _query_url = APIHelper.clean_url(_query_builder)
  
          # Prepare headers
          _headers = {
              'accept': 'application/json'
          }
  
          # Prepare and execute request
          _request = self.config.http_client.get(_query_url, headers=_headers)
          OAuth2.apply(self.config, _request)
          _response = self.execute_request(_request)
  
          decoded = APIHelper.json_deserialize(_response.text)
          if type(decoded) is dict:
              _errors = decoded.get('errors')
          else:
              _errors = None
          _result = ApiResponse(_response, body=decoded, errors=_errors)
          return _result
  
      def update_customer_group(self,
                                group_id,
                                body):
          """Does a PUT request to /v2/customers/groups/{group_id}.
  
          Updates a customer group as identified by the `group_id` value.
  
          Args:
              group_id (string): The ID of the customer group to update.
              body (UpdateCustomerGroupRequest): An object containing the fields
                  to POST for the request.  See the corresponding object
                  definition for field details.
  
          Returns:
              ApiResponse: An object with the response value as well as other
                  useful information such as status codes and headers. Success
  
          Raises:
              APIException: When an error occurs while fetching the data from
                  the remote API. This exception includes the HTTP Response
                  code, an error message, and the HTTP body that was received in
                  the request.
  
          """
  
          # Prepare query URL
          _url_path = '/v2/customers/groups/{group_id}'
          _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
              'group_id': {'value': group_id, 'encode': True}
          })
          _query_builder = self.config.get_base_uri()
          _query_builder += _url_path
          _query_url = APIHelper.clean_url(_query_builder)
  
          # Prepare headers
          _headers = {
              'accept': 'application/json',
              'content-type': 'application/json; charset=utf-8'
          }
  
          # Prepare and execute request
          _request = self.config.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(body))
          OAuth2.apply(self.config, _request)
          _response = self.execute_request(_request)
  
          decoded = APIHelper.json_deserialize(_response.text)
          if type(decoded) is dict:
              _errors = decoded.get('errors')
          else:
              _errors = None
          _result = ApiResponse(_response, body=decoded, errors=_errors)
          return _result
  