Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, HTTPException, Query | |
| import duckdb | |
| from contextlib import asynccontextmanager | |
| con = None | |
| async def lifespan(app: FastAPI): | |
| global con | |
| con = duckdb.connect() | |
| con.execute("PRAGMA memory_limit='14GB'") | |
| con.execute("PRAGMA threads=4") | |
| con.execute("SET enable_object_cache=true") | |
| con.execute("SET preserve_insertion_order=false") | |
| con.execute("INSTALL httpfs; LOAD httpfs;") | |
| URLS = [ | |
| "https://huggingface.co/datasets/Kzr0xx/Icmr-and-hitek/resolve/main/part1.parquet", | |
| "https://huggingface.co/datasets/Kzr0xx/Icmr-and-hitek/resolve/main/part2a.parquet", | |
| "https://huggingface.co/datasets/Kzr0xx/Icmr-and-hitek/resolve/main/part2b_new.parquet" | |
| ] | |
| # Warm-up cache (load metadata) | |
| for url in URLS: | |
| con.execute(f"SELECT 1 FROM read_parquet('{url}') LIMIT 1") | |
| print("🟢 All parts cached! Ready.") | |
| yield | |
| con.close() | |
| app = FastAPI(lifespan=lifespan) | |
| VALID_KEY = "@kzr0x" | |
| def home(key: str = Query(...)): | |
| if key != VALID_KEY: | |
| return {"status": "error", "message": "Invalid key"} | |
| return {"status": "success", "message": "API Live! Use /search"} | |
| async def search_data( | |
| key: str = Query(...), | |
| number: str = Query(None), | |
| aadhar: str = Query(None), | |
| q: str = Query(None) | |
| ): | |
| if key != VALID_KEY: | |
| return {"status": "error", "message": "Invalid key"} | |
| if not number and not aadhar and not q: | |
| raise HTTPException(status_code=400, detail="Provide number, aadhar, or q") | |
| search_term = q or number or aadhar | |
| URLS = [ | |
| "https://huggingface.co/datasets/Kzr0xx/Icmr-and-hitek/resolve/main/part1.parquet", | |
| "https://huggingface.co/datasets/Kzr0xx/Icmr-and-hitek/resolve/main/part2a.parquet", | |
| "https://huggingface.co/datasets/Kzr0xx/Icmr-and-hitek/resolve/main/part2b_new.parquet" | |
| ] | |
| # Build query with per-part WHERE clauses | |
| queries = [] | |
| for url in URLS: | |
| queries.append(f""" | |
| SELECT * FROM read_parquet('{url}') | |
| WHERE phoneNumber = ? OR aadharNumber = ? | |
| """) | |
| full_query = " UNION ALL ".join(queries) + " LIMIT 10" | |
| params = [search_term, search_term] * len(URLS) | |
| result = con.execute(full_query, params).fetchall() | |
| if not result: | |
| return { | |
| "status": "error", | |
| "message": f"'{search_term}' not found in any dataset." | |
| } | |
| # Format response | |
| data_list = [] | |
| for row in result: | |
| data_list.append({ | |
| "name": row[0], | |
| "fathersName": row[1], | |
| "phoneNumber": row[2], | |
| "aadharNumber": row[3], | |
| "otherNumber": row[4], | |
| "address": row[5], | |
| "district": row[6], | |
| "pincode": row[7], | |
| "state": row[8], | |
| "town": row[9], | |
| "source": row[10] # icmr or inddata | |
| }) | |
| icmr_data = [d for d in data_list if d["source"] == "icmr"] | |
| hitek_data = [d for d in data_list if d["source"] == "inddata"] | |
| return { | |
| "credits": { | |
| "developer": "@kzr0x", | |
| "team": "TEAM DARK KNIGHT APIs", | |
| "channel": "@API_WALLAH" | |
| }, | |
| "icmr_data": icmr_data, | |
| "hitek_data": hitek_data, | |
| "results": data_list # all matches | |
| } |