docs: def post(self, path, valuemap=None, query=None):
          """
          Performs a POST request.  "valuemap" is a dict sent as "application/x-www-form-urlencoded".
          "query" is as for get().  Return is same as get().
      """
          self.lastpath = path
          if query is not None:
              self.lastpath += '?' + urlencode(query)
          if valuemap:
              self.http.request('POST', self.lastpath, urlencode(valuemap),
                                  {"Content-type": "application/x-www-form-urlencoded"})
          else:
              self.http.request('POST', self.lastpath, '')
          resp = self.http.getresponse()
          ctype = resp.getheader('Content-Type')
          data = resp.read().decode('utf-8')
          self.log.debug("Request '%s' status %d, %s length %d", self.lastpath, resp.status, ctype, len(data))
          if resp.status < 400:
              return (resp.status, data, ctype)
          else:
              raise HttpError(code=resp.status, content_type=ctype, content=data)