docs: def post(self, url, content='', files=None, params=None, extra_headers={}, upload_callback=None):
          'HTTP Post files[] or content (unicode string) to url'
          if not url.startswith('http'):
              # relative url
              url = self.rootpath + url
  
          log.debug('posting content (len %s) to url %s', len(content) if content is not None else '?', url)
          headers = self.session.headers.copy()
          headers.update(**extra_headers)
  
          if not files is None:
              m = requests_toolbelt.MultipartEncoder(fields=files)
              if upload_callback is not None:
                  m_len = m.len # compute value for callback closure
                  def callback(monitor):
                      upload_callback(monitor, m_len)
  
                  m = requests_toolbelt.MultipartEncoderMonitor(m, callback)
              headers['content-type'] = m.content_type
          else:
              m = content
          url = self.escapeUrl(url)
          r = self.session.post(url, data=m, params=params, headers=headers)
          if not r.ok:
              log.warning('HTTP POST failed: %s', r.text)
              raise JFSError(r.reason)
          return self.getObject(r)