docs: def put_message(self, queue_name, content, visibility_timeout=None,
                      time_to_live=None, timeout=None):
          '''
          Adds a new message to the back of the message queue. 
  
          The visibility timeout specifies the time that the message will be 
          invisible. After the timeout expires, the message will become visible. 
          If a visibility timeout is not specified, the default value of 0 is used.
  
          The message time-to-live specifies how long a message will remain in the 
          queue. The message will be deleted from the queue when the time-to-live 
          period expires.
  
          :param str queue_name:
              The name of the queue to put the message into.
          :param obj content:
              Message content. Allowed type is determined by the encode_function 
              set on the service. Default is str. The encoded message can be up to 
              64KB in size.
          :param int visibility_timeout:
              If not specified, the default value is 0. Specifies the
              new visibility timeout value, in seconds, relative to server time.
              The value must be larger than or equal to 0, and cannot be
              larger than 7 days. The visibility timeout of a message cannot be
              set to a value later than the expiry time. visibility_timeout
              should be set to a value smaller than the time-to-live value.
          :param int time_to_live:
              Specifies the time-to-live interval for the message, in
              seconds. The maximum time-to-live allowed is 7 days. If this
              parameter is omitted, the default time-to-live is 7 days.
          :param int timeout:
              The server timeout, expressed in seconds.
          '''
          _validate_not_none('queue_name', queue_name)
          _validate_not_none('content', content)
          request = HTTPRequest()
          request.method = 'POST'
          request.host = self._get_host()
          request.path = _get_path(queue_name, True)
          request.query = [
              ('visibilitytimeout', _to_str(visibility_timeout)),
              ('messagettl', _to_str(time_to_live)),
              ('timeout', _int_to_str(timeout))
          ]
          request.body = _get_request_body(_convert_queue_message_xml(content, self.encode_function))
          self._perform_request(request)