text: # coding: utf-8
  
  """
      NiFi Rest API
  
      The Rest API provides programmatic access to command and control a NiFi instance in real time. Start and                                             stop processors, monitor queues, query provenance data, and more. Each endpoint below includes a description,                                             definitions of the expected input and output, potential response codes, and the authorizations required                                             to invoke each service.
  
      OpenAPI spec version: 1.15.0
      Contact: dev@nifi.apache.org
      Generated by: https://github.com/swagger-api/swagger-codegen.git
  """
  
  
  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 FunnelApi(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 get_funnel(self, id, **kwargs):
          """
          Gets a funnel
  
          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_funnel(id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str id: The funnel id. (required)
          :return: FunnelEntity
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('callback'):
              return self.get_funnel_with_http_info(id, **kwargs)
          else:
              (data) = self.get_funnel_with_http_info(id, **kwargs)
              return data
  
      def get_funnel_with_http_info(self, id, **kwargs):
          """
          Gets a funnel
  
          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_funnel_with_http_info(id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str id: The funnel id. (required)
          :return: FunnelEntity
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['id']
          all_params.append('callback')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          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_funnel" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'id' is set
          if ('id' not in params) or (params['id'] is None):
              raise ValueError("Missing the required parameter `id` when calling `get_funnel`")
  
  
          collection_formats = {}
  
          path_params = {}
          if 'id' in params:
              path_params['id'] = params['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'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['*/*'])
  
          # Authentication setting
          auth_settings = ['tokenAuth']
  
          return self.api_client.call_api('/funnels/{id}', 'GET',
                                          path_params,
                                          query_params,
                                          header_params,
                                          body=body_params,
                                          post_params=form_params,
                                          files=local_var_files,
                                          response_type='FunnelEntity',
                                          auth_settings=auth_settings,
                                          callback=params.get('callback'),
                                          _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 remove_funnel(self, id, **kwargs):
          """
          Deletes a funnel
  
          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.remove_funnel(id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str id: The funnel id. (required)
          :param str version: The revision is used to verify the client is working with the latest version of the flow.
          :param str client_id: If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response.
          :param bool disconnected_node_acknowledged: Acknowledges that this node is disconnected to allow for mutable requests to proceed.
          :return: FunnelEntity
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('callback'):
              return self.remove_funnel_with_http_info(id, **kwargs)
          else:
              (data) = self.remove_funnel_with_http_info(id, **kwargs)
              return data
  
      def remove_funnel_with_http_info(self, id, **kwargs):
          """
          Deletes a funnel
  
          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.remove_funnel_with_http_info(id, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str id: The funnel id. (required)
          :param str version: The revision is used to verify the client is working with the latest version of the flow.
          :param str client_id: If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response.
          :param bool disconnected_node_acknowledged: Acknowledges that this node is disconnected to allow for mutable requests to proceed.
          :return: FunnelEntity
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['id', 'version', 'client_id', 'disconnected_node_acknowledged']
          all_params.append('callback')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          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 remove_funnel" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'id' is set
          if ('id' not in params) or (params['id'] is None):
              raise ValueError("Missing the required parameter `id` when calling `remove_funnel`")
  
  
          collection_formats = {}
  
          path_params = {}
          if 'id' in params:
              path_params['id'] = params['id']
  
          query_params = []
          if 'version' in params:
              query_params.append(('version', params['version']))
          if 'client_id' in params:
              query_params.append(('clientId', params['client_id']))
          if 'disconnected_node_acknowledged' in params:
              query_params.append(('disconnectedNodeAcknowledged', params['disconnected_node_acknowledged']))
  
          header_params = {}
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.\
              select_header_accept(['application/json'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['*/*'])
  
          # Authentication setting
          auth_settings = ['tokenAuth']
  
          return self.api_client.call_api('/funnels/{id}', 'DELETE',
                                          path_params,
                                          query_params,
                                          header_params,
                                          body=body_params,
                                          post_params=form_params,
                                          files=local_var_files,
                                          response_type='FunnelEntity',
                                          auth_settings=auth_settings,
                                          callback=params.get('callback'),
                                          _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 update_funnel(self, id, body, **kwargs):
          """
          Updates a funnel
  
          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.update_funnel(id, body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str id: The funnel id. (required)
          :param FunnelEntity body: The funnel configuration details. (required)
          :return: FunnelEntity
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('callback'):
              return self.update_funnel_with_http_info(id, body, **kwargs)
          else:
              (data) = self.update_funnel_with_http_info(id, body, **kwargs)
              return data
  
      def update_funnel_with_http_info(self, id, body, **kwargs):
          """
          Updates a funnel
  
          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.update_funnel_with_http_info(id, body, callback=callback_function)
  
          :param callback function: The callback function
              for asynchronous request. (optional)
          :param str id: The funnel id. (required)
          :param FunnelEntity body: The funnel configuration details. (required)
          :return: FunnelEntity
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['id', 'body']
          all_params.append('callback')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          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 update_funnel" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'id' is set
          if ('id' not in params) or (params['id'] is None):
              raise ValueError("Missing the required parameter `id` when calling `update_funnel`")
          # 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 `update_funnel`")
  
  
          collection_formats = {}
  
          path_params = {}
          if 'id' in params:
              path_params['id'] = params['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'])
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.\
              select_header_content_type(['application/json'])
  
          # Authentication setting
          auth_settings = ['tokenAuth']
  
          return self.api_client.call_api('/funnels/{id}', 'PUT',
                                          path_params,
                                          query_params,
                                          header_params,
                                          body=body_params,
                                          post_params=form_params,
                                          files=local_var_files,
                                          response_type='FunnelEntity',
                                          auth_settings=auth_settings,
                                          callback=params.get('callback'),
                                          _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)
  