from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponse, HTMLResponse from fastapi.staticfiles import StaticFiles import uvicorn import os PORT = 8051 DIRECTORY = "./data/db" # Ensure the data directory exists (if not already handled elsewhere) os.makedirs(DIRECTORY, exist_ok=True) app = FastAPI() # Mount static files to serve content from the database directory app.mount("/data", StaticFiles(directory=DIRECTORY), name="data") app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/files", response_class=HTMLResponse) async def list_files(): db_files_info = [] for root, _, files in os.walk(DIRECTORY): for file in files: if file.endswith(".db"): file_path = os.path.join(root, file) relative_path = os.path.relpath(file_path, DIRECTORY) try: file_size = os.path.getsize(file_path) creation_time = os.path.getctime(file_path) db_files_info.append({ "relative_path": relative_path, "file_size": file_size, "creation_time": creation_time }) except Exception as e: # Log or handle error for specific file without breaking the list print(f"Error accessing {file_path}: {e}") # Sort files by creation time db_files_info.sort(key=lambda x: x["creation_time"]) files_html = "" for file_info in db_files_info: # convert to GB file_size_gb = file_info["file_size"] / (1024 * 1024 * 1024) files_html += f"""
Welcome to the Market Data Server.
Access database files directly via /data/your_file.db
""") if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=PORT)