code: def getcallparams(
              self, target, conf=None, args=None, kwargs=None, exec_ctx=None
      ):
          
  
          if args is None:
              args = []
  
          if kwargs is None:
              kwargs = {}
  
          if conf is None:
              conf = self.conf
  
          params = conf.params
  
          try:
              argspec = getargspec(target)
  
          except TypeError as tex:
              argspec = None
              callargs = {}
  
          else:
              try:
                  callargs = getcallargs(target, *args, **kwargs)
  
              except TypeError as tex:
                  if tex.args[0].endswith('\'{0}\''.format(argspec.args[0])):
                      args = [None]
  
                  else:
                      raise
  
                  try:
                      callargs = getcallargs(target, *args, **kwargs)
  
                  except TypeError as tex:
                      if tex.args[0].endswith('\'{0}\''.format(argspec.args[0])):
                          args = []
  
                      else:
                          raise
  
                      callargs = getcallargs(target, *args, **kwargs)
  
                  args = []
  
          pnames = set(params)
  
          for pname in pnames:
  
              if argspec and pname in argspec.args and (
                      (exec_ctx is not None and pname in exec_ctx)
                      or
                      callargs.get(pname) is None
              ):
  
                  kwargs[pname] = params[pname].value
  
          if exec_ctx is not None:
              exec_ctx |= pnames
  
          return args, kwargs
docs: Get target call parameters.
  
          :param list args: target call arguments.
          :param dict kwargs: target call keywords.
          :return: args, kwargs
          :rtype: tuple