docs: def add_file(self, user, file_obj, **metadata):
          """Add a new file.
  
          :returns: file handle
          """
          user_dir = self.user_dir(user)
          if not user_dir.exists():
              user_dir.mkdir(mode=0o775)
  
          handle = str(uuid1())
          file_path = user_dir / handle
  
          with file_path.open("wb") as out:
              for chunk in iter(lambda: file_obj.read(CHUNK_SIZE), b""):
                  out.write(chunk)
  
          if metadata:
              meta_file = user_dir / f"{handle}.metadata"
              with meta_file.open("wb") as out:
                  metadata_json = json.dumps(metadata, skipkeys=True).encode("ascii")
                  out.write(metadata_json)
  
          return handle