code: def info_post(node_id):
      
      # get the parameters and validate them
      contents = request_parameter(parameter="contents")
      info_type = request_parameter(
          parameter="info_type", parameter_type="known_class", default=models.Info
      )
      for x in [contents, info_type]:
          if type(x) == Response:
              return x
      # check the node exists
      node = models.Node.query.get(node_id)
      if node is None:
          return error_response(error_type="/info POST, node does not exist")
  
      exp = Experiment(session)
      try:
          # execute the request
          info = info_type(origin=node, contents=contents)
          assign_properties(info)
  
          # ping the experiment
          exp.info_post_request(node=node, info=info)
  
          session.commit()
      except Exception:
          return error_response(
              error_type="/info POST server error",
              status=403,
              participant=node.participant,
          )
  
      # return the data
      return success_response(info=info.__json__())
docs: Create an info.
  
      The node id must be specified in the url.
  
      You must pass contents as an argument.
      info_type is an additional optional argument.
      If info_type is a custom subclass of Info it must be
      added to the known_classes of the experiment class.