docs: def put_object(self,
                     mpath,
                     content=None,
                     path=None,
                     file=None,
                     content_length=None,
                     content_type="application/octet-stream",
                     durability_level=None):
          """PutObject
          https://apidocs.joyent.com/manta/api.html#PutObject
  
          Examples:
              client.put_object('/trent/stor/foo', 'foo\nbar\nbaz')
              client.put_object('/trent/stor/foo', path='path/to/foo.txt')
              client.put_object('/trent/stor/foo', file=open('path/to/foo.txt'),
                                size=11)
  
          One of `content`, `path` or `file` is required.
  
          @param mpath {str} Required. A manta path, e.g. '/trent/stor/myobj'.
          @param content {bytes}
          @param path {str}
          @param file {file-like object}
          @param content_length {int} Not currently used. Expect this to be used
              when streaming support is added.
          @param content_type {string} Optional, but suggested. Default is
              'application/octet-stream'.
          @param durability_level {int} Optional. Default is 2. This tells
              Manta the number of copies to keep.
          """
          log.debug('PutObject %r', mpath)
          headers = {"Content-Type": content_type, }
          if durability_level:
              headers["x-durability-level"] = durability_level
  
          methods = [m for m in [content, path, file] if m is not None]
          if len(methods) != 1:
              raise errors.MantaError("exactly one of 'content', 'path' or "
                                      "'file' must be provided")
          if content is not None:
              pass
          elif path:
              f = io.open(path, 'rb')
              try:
                  content = f.read()
              finally:
                  f.close()
          else:
              content = file.read()
  
          try:
              # python 3
              content_bytes = bytes(content, encoding='utf-8')
          except:
              # python 2
              content_bytes = content
  
          headers["Content-Length"] = str(len(content))
          md5 = hashlib.md5(content_bytes)
          headers["Content-MD5"] = base64.b64encode(md5.digest())
          res, content = self._request(mpath,
                                       "PUT",
                                       body=content,
                                       headers=headers)
          if res["status"] != "204":
              raise errors.MantaAPIError(res, content)