Skip to content

Commit

Permalink
Add mimetype and redirect url to HTTP info dict (#1483)
Browse files Browse the repository at this point in the history
  • Loading branch information
joouha committed Jan 2, 2024
1 parent 3d67df4 commit 9897404
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
5 changes: 5 additions & 0 deletions fsspec/implementations/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,11 @@ async def _file_info(url, session, size_policy="head", **kwargs):
elif "Content-Range" in r.headers:
info["size"] = int(r.headers["Content-Range"].split("/")[1])

if "Content-Type" in r.headers:
info["mimetype"] = r.headers["Content-Type"].partition(";")[0]

info["url"] = str(r.url)

for checksum_field in ["ETag", "Content-MD5", "Digest"]:
if r.headers.get(checksum_field):
info[checksum_field] = r.headers[checksum_field]
Expand Down
8 changes: 8 additions & 0 deletions fsspec/implementations/tests/test_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,14 @@ def test_info(server):
info = fs.info(server + "/index/realfile")
assert info["ETag"] == "xxx"

fs = fsspec.filesystem("http", headers={"give_mimetype": "true"})
info = fs.info(server + "/index/realfile")
assert info["mimetype"] == "text/html"

fs = fsspec.filesystem("http", headers={"redirect": "true"})
info = fs.info(server + "/redirectme")
assert info["url"] == server + "/index/realfile"


@pytest.mark.parametrize("method", ["POST", "PUT"])
def test_put_file(server, tmp_path, method, reset_files):
Expand Down
7 changes: 7 additions & 0 deletions fsspec/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ def do_GET(self):
file_data = self.files.get(file_path)
if "give_path" in self.headers:
return self._respond(200, data=json.dumps({"path": self.path}).encode())
if "redirect" in self.headers and file_path != "/index/realfile":
new_url = f"http://127.0.0.1:{port}/index/realfile"
return self._respond(301, {"Location": new_url})
if file_data is None:
return self._respond(404)

Expand Down Expand Up @@ -88,6 +91,10 @@ def do_GET(self):
self._respond(status, response_headers, file_data)
elif "give_range" in self.headers:
self._respond(status, {"Content-Range": content_range}, file_data)
elif "give_mimetype" in self.headers:
self._respond(
status, {"Content-Type": "text/html; charset=utf-8"}, file_data
)
else:
self._respond(status, data=file_data)

Expand Down

0 comments on commit 9897404

Please sign in to comment.