87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
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():
|
|
files_html = ""
|
|
for root, _, files in os.walk(DIRECTORY):
|
|
for file in files:
|
|
file_path = os.path.join(root, file)
|
|
relative_path = os.path.relpath(file_path, DIRECTORY)
|
|
try:
|
|
file_size = os.path.getsize(file_path)
|
|
# convert to GB
|
|
file_size = file_size / (1024 * 1024 * 1024)
|
|
files_html += f"""
|
|
<li>
|
|
{relative_path} ({file_size:.3f} GB)
|
|
<a href="/data/{relative_path}" download="{relative_path}">Download</a>
|
|
<button onclick="deleteFile('{relative_path}')">Delete</button>
|
|
</li>
|
|
"""
|
|
except Exception as e:
|
|
files_html += f"<li>Error accessing {relative_path}: {e}</li>"
|
|
|
|
return f"""
|
|
<html>
|
|
<head>
|
|
<title>Files in Directory</title>
|
|
<script src="/static/script.js"></script>
|
|
</head>
|
|
<body>
|
|
<h1>Files in {DIRECTORY}</h1>
|
|
<ul>
|
|
{files_html}
|
|
</ul>
|
|
<p><a href="/">Back to Home</a></p>
|
|
</body>
|
|
</html>
|
|
"""
|
|
|
|
@app.delete("/delete_file/{filename}")
|
|
async def delete_single_file(filename: str):
|
|
file_path = os.path.join(DIRECTORY, filename)
|
|
if os.path.exists(file_path):
|
|
try:
|
|
os.remove(file_path)
|
|
return {"message": f"File {filename} deleted successfully.", "status": "deleted"}
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=f"Error deleting file {filename}: {e}")
|
|
else:
|
|
raise HTTPException(status_code=404, detail=f"File {filename} not found.")
|
|
|
|
@app.get("/")
|
|
async def root():
|
|
return HTMLResponse("""
|
|
<html>
|
|
<head>
|
|
<title>Market Data Server</title>
|
|
<script src="/static/script.js"></script>
|
|
</head>
|
|
<body>
|
|
<h1>Market Data Server</h1>
|
|
<p>Welcome to the Market Data Server.</p>
|
|
<h2>Database Files</h2>
|
|
<p>Access database files directly via /data/your_file.db</p>
|
|
<p><a href="/files">List Files</a></p>
|
|
</body>
|
|
</html>
|
|
""")
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run(app, host="0.0.0.0", port=PORT) |