code: def decorate_method(cls, func):
          
          func_args = [arg for arg in function_arguments(func) if arg != 'self']
          method_return_types = \
              Endpoint._parse_function_return_types_from_doc(func.__doc__)
          name = '%s.%s' % (cls.path, func.__name__)
  
          @wraps(func)
          def method_decorator(self, *args, **kwargs):
              for i in range(len(args)):
                  kwargs[func_args[i]] = args[i]
  
              api_call = self.connection._pre_process_call(
                  name, endpoint_params=kwargs)
              try:
                  data = func(**kwargs)
              except RestException as e:
                  api_call.error = e
                  raise e
  
              except Exception as e:
                  call_queue = self.connection._call_queue.get(
                      self.connection._get_thread_id(), [])
                  if api_call in call_queue:
                      call_queue.remove(api_call)
                  e = RestException(original_error=e,
                                    stack=traceback.format_exc())
                  log.error('ApiCall Exception: %s' % e, exc_info=True)
                  raise e
              return self.connection._post_process_call(
                  api_call, data, method_return_types)
  
          method_decorator.rest_method = True
          return method_decorator
docs: :param func:       func to be decorated
          :return:           func that is now decorated