CodeXDevloper commited on
Commit
3395ff2
·
verified ·
1 Parent(s): ae81f16

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -103
app.py CHANGED
@@ -1,12 +1,17 @@
1
  from fastapi import FastAPI, Query
2
  from fastapi.middleware.cors import CORSMiddleware
3
  from datasets import load_dataset
4
- from huggingface_hub import HfApi
5
  import os
6
 
7
  os.environ["HF_HOME"] = "/tmp/hf"
8
 
9
- app = FastAPI(title="Telegram UID Multi-Search")
 
 
 
 
 
10
 
11
  app.add_middleware(
12
  CORSMiddleware,
@@ -17,121 +22,61 @@ app.add_middleware(
17
 
18
  DATASET = "CodeXDevloper/MergedTgDataset"
19
 
20
- def get_files(folder=None):
21
- """Kisi folder ki saari parquet files nikalo"""
22
  api = HfApi()
23
  files = api.list_repo_files(DATASET, repo_type="dataset")
24
-
25
- if folder:
26
- return [f for f in files if f.startswith(folder + "/") and f.endswith(".parquet")]
27
- else:
28
- return [f for f in files if "/" not in f and f.endswith(".parquet")]
29
 
30
  @app.get("/")
31
  def root():
32
- return {
33
- "status": "running",
34
- "usage": "/search?uid=385167100",
35
- "search_order": "Telegram_V2 → TG_DATA_PARTS → Root"
36
- }
37
 
38
  @app.get("/search")
39
- def search_uid(uid: str = Query(..., description="Telegram UID")):
40
- """
41
- AUTO MULTI-FOLDER SEARCH:
42
- 1. Telegram_V2 mein dhoondho
43
- 2. Nahi mila toh TG_DATA_PARTS mein
44
- 3. Nahi mila toh Root files mein
45
- """
46
  try:
47
- search_log = []
48
 
49
- # Priority order
50
- folders = [
51
- ("Telegram_V2", "Telegram_V2"),
52
- ("TG_DATA_PARTS", "TG_DATA_PARTS"),
53
- (None, "Root")
54
- ]
55
 
56
- for folder_key, folder_name in folders:
57
- # Folder ki files nikalo
58
- files = get_files(folder_key)
59
-
60
- if not files:
61
- search_log.append({
62
- "folder": folder_name,
63
- "status": "no_files",
64
- "scanned": 0
65
- })
66
- continue
67
-
68
- # Sirf 20 files per folder (RAM safe)
69
- files = files[:20]
70
-
71
  try:
72
- ds = load_dataset(
73
- DATASET,
74
- data_files={"train": files},
75
- split="train",
76
- streaming=True
77
- )
78
- except Exception as e:
79
- search_log.append({
80
- "folder": folder_name,
81
- "status": "load_error",
82
- "error": str(e)[:100]
83
- })
84
- continue
85
-
86
- # Is folder mein scan karo
87
- scanned = 0
88
- max_scan = 100000 # 1 lakh rows per folder
89
-
90
- for row in ds:
91
- scanned += 1
92
-
93
- if uid == str(row.get("user_id", "")).strip():
94
- # ✅ MIL GAYA
95
- return {
96
- "found": True,
97
- "uid": uid,
98
- "found_in": folder_name,
99
- "scanned_in_folder": scanned,
100
- "search_log": search_log + [{
101
- "folder": folder_name,
102
- "status": "FOUND",
103
- "scanned": scanned
104
- }],
105
- "data": {
106
- "user_id": row.get("user_id"),
107
- "username": row.get("username"),
108
- "first_name": row.get("first_name"),
109
- "last_name": row.get("last_name"),
110
- "phone": row.get("phone"),
111
- "email": row.get("email"),
112
- "status": row.get("status"),
113
- "linked_id": row.get("linked_id"),
114
- "linked_name": row.get("linked_name"),
115
- "linked_handle": row.get("linked_handle"),
116
- }
117
- }
118
-
119
- if scanned >= max_scan:
120
- break
121
-
122
- search_log.append({
123
- "folder": folder_name,
124
- "status": "not_found",
125
- "scanned": scanned
126
- })
127
 
128
- # Kahin nahi mila
129
  return {
130
  "found": False,
131
  "uid": uid,
132
- "search_log": search_log,
133
- "message": "Telegram_V2, TG_DATA_PARTS, aur Root - teeno mein nahi mila"
 
134
  }
135
-
136
  except Exception as e:
137
- return {"error": str(e), "uid": uid}
 
1
  from fastapi import FastAPI, Query
2
  from fastapi.middleware.cors import CORSMiddleware
3
  from datasets import load_dataset
4
+ from huggingface_hub import HfApi, login
5
  import os
6
 
7
  os.environ["HF_HOME"] = "/tmp/hf"
8
 
9
+ # HF_TOKEN se login (fast + authenticated)
10
+ HF_TOKEN = os.environ.get("HF_TOKEN")
11
+ if HF_TOKEN:
12
+ login(token=HF_TOKEN)
13
+
14
+ app = FastAPI()
15
 
16
  app.add_middleware(
17
  CORSMiddleware,
 
22
 
23
  DATASET = "CodeXDevloper/MergedTgDataset"
24
 
25
+ def get_files():
 
26
  api = HfApi()
27
  files = api.list_repo_files(DATASET, repo_type="dataset")
28
+ return [f for f in files if f.endswith(".parquet")]
 
 
 
 
29
 
30
  @app.get("/")
31
  def root():
32
+ return {"status": "running", "usage": "/search?uid=XXX&offset=0"}
 
 
 
 
33
 
34
  @app.get("/search")
35
+ def search_uid(
36
+ uid: str = Query(...),
37
+ offset: int = Query(0, ge=0)
38
+ ):
 
 
 
39
  try:
40
+ files = get_files()
41
 
42
+ ds = load_dataset(
43
+ DATASET,
44
+ data_files={"train": files[:50]}, # 50 files per request
45
+ split="train",
46
+ streaming=True
47
+ )
48
 
49
+ # Offset skip
50
+ iterator = iter(ds)
51
+ for _ in range(offset):
 
 
 
 
 
 
 
 
 
 
 
 
52
  try:
53
+ next(iterator)
54
+ except StopIteration:
55
+ return {"found": False, "uid": uid, "message": "End", "next_offset": None}
56
+
57
+ # 2 lakh rows scan
58
+ scanned = 0
59
+ max_scan = 200000
60
+
61
+ for row in iterator:
62
+ scanned += 1
63
+ if uid == str(row.get("user_id", "")).strip():
64
+ return {
65
+ "found": True,
66
+ "uid": uid,
67
+ "offset": offset,
68
+ "scanned": scanned,
69
+ "data": row
70
+ }
71
+ if scanned >= max_scan:
72
+ break
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
 
 
74
  return {
75
  "found": False,
76
  "uid": uid,
77
+ "offset": offset,
78
+ "scanned": scanned,
79
+ "next_offset": offset + scanned
80
  }
 
81
  except Exception as e:
82
+ return {"error": str(e)}