Watchhrr commited on
Commit
0d48dbc
·
verified ·
1 Parent(s): ec7aeeb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -53
app.py CHANGED
@@ -1,62 +1,49 @@
1
-
2
- from fastapi import FastAPI, Query
3
  import duckdb
4
- import pandas as pd
5
- from fastapi.middleware.cors import CORSMiddleware
 
 
6
 
7
- app = FastAPI(title="Alien X Search API")
 
 
 
8
 
9
- # Enable CORS for external access
10
- app.add_middleware(
11
- CORSMiddleware,
12
- allow_origins=["*"],
13
- allow_methods=["*"],
14
- allow_headers=["*"],
15
- )
16
 
17
- # Database Connection
18
- db = duckdb.connect('AlienX_Vault.db', read_only=True)
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  @app.get("/")
21
  def home():
22
- return {
23
- "brand": "Alien X",
24
- "status": "Engine Online",
25
- "endpoints": {
26
- "search_number": "/search?pnum=3333769789",
27
- "search_cnic": "/search?cnic=42401XXXXXXXX",
28
- "search_name": "/search?n=ahmed"
29
- }
30
- }
31
 
32
- @app.get("/search")
33
- def search(
34
- pnum: str = Query(None, description="Search by Phone Number (Last 10 digits)"),
35
- cnic: str = Query(None, description="Search by CNIC (13 digits)"),
36
- n: str = Query(None, description="Search by Name or Address")
37
- ):
38
- try:
39
- if pnum:
40
- # Suffix match taaki 0 ya 92 ka masla na ho
41
- query = f"SELECT * FROM vault WHERE pnum LIKE '%{pnum}'"
42
- elif cnic:
43
- # Exact CNIC match
44
- query = f"SELECT * FROM vault WHERE cnic = '{cnic}'"
45
- elif n:
46
- # Name ya Address mein search (ILIKE is case-insensitive)
47
- query = f"SELECT * FROM vault WHERE name ILIKE '%{n}%' OR address ILIKE '%{n}%' LIMIT 100"
48
- else:
49
- return {"error": "Kam se kam ek parameter (pnum, cnic, ya n) zaruri hai"}
50
 
51
- results = db.execute(query).df()
52
-
53
- # Data cleaning for JSON response
54
- results = results.fillna("N/A")
55
-
56
- return {
57
- "brand": "Alien X",
58
- "count": len(results),
59
- "data": results.to_dict(orient='records')
60
- }
61
- except Exception as e:
62
- return {"error": str(e)}
 
1
+ from fastapi import FastAPI
 
2
  import duckdb
3
+ from huggingface_hub import hf_hub_download
4
+ import os
5
+
6
+ app = FastAPI()
7
 
8
+ # --- SECURE CONFIG ---
9
+ # Ye 'HF_TOKEN' settings se auto-fetch hoga
10
+ TOKEN = os.getenv("HF_TOKEN")
11
+ DATASET_REPO = "Watchhrr/Pakistan-Master-Vault"
12
 
13
+ # Check agar token sahi se mila
14
+ if not TOKEN:
15
+ print("❌ ERROR: HF_TOKEN settings mein nahi mila!")
 
 
 
 
16
 
17
+ print("📡 Fetching Master DB from Dataset...")
18
+ try:
19
+ # Dataset se file download ho rahi hai
20
+ db_path = hf_hub_download(
21
+ repo_id=DATASET_REPO,
22
+ filename="Pakistan.db",
23
+ repo_type="dataset",
24
+ token=TOKEN
25
+ )
26
+ print("✅ Database Loaded Successfully.")
27
+ except Exception as e:
28
+ print(f"❌ Error downloading DB: {e}")
29
+ db_path = None
30
 
31
  @app.get("/")
32
  def home():
33
+ return {"status": "Alien X Engine: Pakistan Master Vault is ONLINE"}
 
 
 
 
 
 
 
 
34
 
35
+ @app.get("/search/pnum")
36
+ def search_pnum(number: str):
37
+ if not db_path: return {"error": "DB not loaded"}
38
+ con = duckdb.connect(db_path)
39
+ res = con.execute(f"SELECT * FROM vault WHERE pnum = '{number}'").df().to_dict(orient='records')
40
+ con.close()
41
+ return {"count": len(res), "data": res}
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ @app.get("/search/cnic")
44
+ def search_cnic(id_card: str):
45
+ if not db_path: return {"error": "DB not loaded"}
46
+ con = duckdb.connect(db_path)
47
+ res = con.execute(f"SELECT * FROM vault WHERE cnic = '{id_card}'").df().to_dict(orient='records')
48
+ con.close()
49
+ return {"count": len(res), "data": res}