Hitech-Data-API / app.py
Watchhrr's picture
Update app.py
fb79491 verified
import duckdb
from fastapi import FastAPI, HTTPException, Query
import os
app = FastAPI()
# --- ๐Ÿ” CONFIG ---
VALID_KEYS = {"Satuu5": "Master_Admin"}
HF_TOKEN = os.getenv("HF_TOKEN")
DATA_URL = "https://huggingface.co/datasets/Watchhrr/HITECH_DB/resolve/main/Hi-Tek-DB.zip.001"
@app.get("/")
def home():
status = "READY" if HF_TOKEN else "TOKEN_MISSING_IN_SETTINGS"
return {"status": "Online", "auth": status, "Owner": "Swapnil"}
@app.get("/search")
def search(query: str, key: str = None):
if key not in VALID_KEYS:
raise HTTPException(status_code=403, detail="Invalid Key!")
if not HF_TOKEN:
return {"error": "Bhai, Settings mein HF_TOKEN secret dalo pehle!"}
con = duckdb.connect()
try:
con.execute("INSTALL httpfs; LOAD httpfs;")
# --- FIX: Sabse stable method for HTTP Authentication ---
con.execute(f"SET http_headers = 'Authorization: Bearer {HF_TOKEN}';")
# Data scanning (Automatic Indexing)
# Pehli bar scan karne mein 30-40 sec lag sakte hain
sql_check = f"SELECT * FROM read_csv_auto('{DATA_URL}', all_varchar=True) LIMIT 1"
df_sample = con.execute(sql_check).df()
cols = df_sample.columns
# Phone/Mobile column detect karna
search_col = next((c for c in cols if any(x in c.lower() for x in ['phone', 'mobile', 'number', 'contact'])), cols[0])
# Final Search Query
final_sql = f"SELECT * FROM read_csv_auto('{DATA_URL}', all_varchar=True) WHERE \"{search_col}\" LIKE '%{query}%' LIMIT 5"
result = con.execute(final_sql).df().to_dict(orient="records")
return {
"status": "success",
"column_searched": search_col,
"results": result
}
except Exception as e:
# Agar connection timeout ho jaye
return {"status": "error", "message": "Database is heavy, retrying...", "details": str(e)}