Local_Files / app.py
Dragneel's picture
Upload 6 files
192f79a verified
import os
import json
from fastapi import FastAPI, HTTPException, Depends, Request
from fastapi.responses import JSONResponse
from fastapi.security.api_key import APIKeyHeader
from dotenv import load_dotenv
from typing import List
# Load environment variables
load_dotenv()
API_KEY = os.getenv("API_KEY")
API_KEY_NAME = "access_token"
# Debug print
print(f"[DEBUG] Loaded API_KEY: {API_KEY}")
# Ensure data directory exists
DATA_DIR = "data"
os.makedirs(DATA_DIR, exist_ok=True)
print(f"[DEBUG] Ensured data directory exists at: {DATA_DIR}")
# API key dependency
api_key_header = APIKeyHeader(name=API_KEY_NAME, auto_error=False)
def get_api_key(api_key_header: str = Depends(api_key_header)):
print(f"[DEBUG] Checking API key: {api_key_header}")
if api_key_header == API_KEY:
return api_key_header
else:
print("[DEBUG] Invalid API key!")
raise HTTPException(status_code=403, detail="Could not validate credentials")
app = FastAPI()
@app.post("/files/", dependencies=[Depends(get_api_key)])
def create_json_file(filename: str, content: dict):
print(f"[DEBUG] Creating file: {filename}.json with content: {content}")
file_path = os.path.join(DATA_DIR, f"{filename}.json")
if os.path.exists(file_path):
print("[DEBUG] File already exists!")
raise HTTPException(status_code=400, detail="File already exists")
with open(file_path, "w", encoding="utf-8") as f:
json.dump(content, f, indent=2)
return {"message": "File created", "filename": filename}
@app.get("/files/", dependencies=[Depends(get_api_key)])
def list_json_files() -> List[str]:
print("[DEBUG] Listing all JSON files")
files = [f for f in os.listdir(DATA_DIR) if f.endswith('.json')]
return files
@app.get("/files/{filename}", dependencies=[Depends(get_api_key)])
def read_json_file(filename: str):
print(f"[DEBUG] Reading file: {filename}.json")
file_path = os.path.join(DATA_DIR, f"{filename}.json")
if not os.path.exists(file_path):
print("[DEBUG] File not found!")
raise HTTPException(status_code=404, detail="File not found")
with open(file_path, "r", encoding="utf-8") as f:
data = json.load(f)
return data
@app.put("/files/{filename}", dependencies=[Depends(get_api_key)])
def edit_json_file(filename: str, content: dict):
print(f"[DEBUG] Editing file: {filename}.json with content: {content}")
file_path = os.path.join(DATA_DIR, f"{filename}.json")
if not os.path.exists(file_path):
print("[DEBUG] File not found!")
raise HTTPException(status_code=404, detail="File not found")
with open(file_path, "w", encoding="utf-8") as f:
json.dump(content, f, indent=2)
return {"message": "File updated", "filename": filename}
@app.delete("/files/{filename}", dependencies=[Depends(get_api_key)])
def delete_json_file(filename: str):
print(f"[DEBUG] Deleting file: {filename}.json")
file_path = os.path.join(DATA_DIR, f"{filename}.json")
if not os.path.exists(file_path):
print("[DEBUG] File not found!")
raise HTTPException(status_code=404, detail="File not found")
os.remove(file_path)
return {"message": "File deleted", "filename": filename}