code: def add(self, f, name=None, types=None, required=None):
          
          if name is None:
              fname = f.__name__  # Register the function using its own name.
          else:
              fname = name
  
          self.method_data[fname] = {'method': f}
  
          if types is not None:
              self.method_data[fname]['types'] = types
  
              if required is not None:
                  self.method_data[fname]['required'] = required
docs: Adds a new method to the jsonrpc service.
  
          Arguments:
          f -- the remote function
          name -- name of the method in the jsonrpc service
          types -- list or dictionary of the types of accepted arguments
          required -- list of required keyword arguments
  
          If name argument is not given, function's own name will be used.
  
          Argument types must be a list if positional arguments are used or a
          dictionary if keyword arguments are used in the method in question.
  
          Argument required MUST be used only for methods requiring keyword
          arguments, not for methods accepting positional arguments.