Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, Request | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.responses import HTMLResponse | |
from itables import to_html_datatable | |
from pathlib import Path | |
import pandas as pd | |
ROOT = Path("/home/user") | |
app = FastAPI() | |
app.mount(path="/", app=StaticFiles(directory=ROOT), name="HOME") | |
async def file_system(request: Request, call_next): | |
url = request.url | |
if url.path.endswith("/"): | |
return HTMLResponse( | |
content=files_in_folder(url.path) #.lstrip("/")) | |
) | |
response = await call_next(request) | |
return response | |
def files_in_folder(path: str): | |
"""List files to render as file index.""" | |
folder = ROOT / path | |
# print(folder) | |
path_glob = folder.glob("*") | |
res = pd.DataFrame( | |
[("..", "", "", True)] | |
+ | |
[ | |
( | |
f.name, | |
f.stat().st_size, | |
pd.Timestamp(int(f.stat().st_mtime), unit="s"), | |
f.stat().st_nlink > 1, | |
) | |
for f in path_glob | |
], | |
columns=["path", "size", "mtime", "folder"], | |
).sort_values(["folder"], ascending=False) | |
res["path"] = res.apply( | |
lambda x: f"<a href=/{path}{x.path}{'/' if x.folder else ''}>{x.path}</a>", | |
axis=1, | |
) | |
table = to_html_datatable( | |
df=res.drop(columns="folder"), | |
classes="display compact", | |
showIndex=False, | |
) | |
return f""" | |
<div style="width:50%; margin: 0 auto;"> | |
<h1>{folder}</h1><br> | |
{table} | |
</div> | |
""" | |