code: def execute_procedure(self, name, args=None, kwargs=None):
          
  
          _method = registry.get_method(name, self.entry_point, self.protocol)
  
          if not _method:
              raise RPCUnknownMethod(name)
  
          logger.debug('Check authentication / permissions for method {} and user {}'
                       .format(name, self.request.user))
  
          if not _method.check_permissions(self.request):
              raise AuthenticationFailed(name)
  
          logger.debug('RPC method {} will be executed'.format(name))
  
          # Replace default None value with empty instance of corresponding type
          args = args or []
          kwargs = kwargs or {}
  
          # If the RPC method needs to access some internals, update kwargs dict
          if _method.accept_kwargs:
              kwargs.update({
                  REQUEST_KEY: self.request,
                  ENTRY_POINT_KEY: self.entry_point,
                  PROTOCOL_KEY: self.protocol,
                  HANDLER_KEY: self,
              })
  
          if six.PY2:
              method_std, encoding = _method.str_standardization, _method.str_std_encoding
              args = modernrpc.compat.standardize_strings(args, strtype=method_std, encoding=encoding)
              kwargs = modernrpc.compat.standardize_strings(kwargs, strtype=method_std, encoding=encoding)
  
          logger.debug('Params: args = {} - kwargs = {}'.format(args, kwargs))
  
          try:
              # Call the rpc method, as standard python function
              return _method.function(*args, **kwargs)
  
          except TypeError as e:
              # If given arguments cannot be transmitted properly to python function,
              # raise an Invalid Params exceptions
              raise RPCInvalidParams(str(e))
docs: Call the concrete python function corresponding to given RPC Method `name` and return the result.
  
          Raise RPCUnknownMethod, AuthenticationFailed, RPCInvalidParams or any Exception sub-class.