Voxxium commited on
Commit
6849b8f
Β·
verified Β·
1 Parent(s): 3ee0ed1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -48
app.py CHANGED
@@ -1,5 +1,5 @@
1
  """
2
- HF Space β€” API principale v2
3
  """
4
 
5
  import os
@@ -35,7 +35,7 @@ def do_tick():
35
  try:
36
  orch.tick()
37
  except Exception as e:
38
- logger.error(f"Tick error: {e}")
39
 
40
 
41
  def ping_worker():
@@ -55,36 +55,29 @@ def self_ping():
55
 
56
  @asynccontextmanager
57
  async def lifespan(app: FastAPI):
58
- logger.info("πŸš€ Proxy API v2")
59
  logger.info(f" Worker: {WORKER_URL}")
60
-
61
  scheduler.add_job(
62
- do_tick, "interval",
63
- seconds=30, id="tick",
64
- max_instances=1, coalesce=True,
65
  )
66
  scheduler.add_job(
67
- ping_worker, "interval",
68
- minutes=10, id="wpng",
69
- max_instances=1,
70
  )
71
  scheduler.add_job(
72
- self_ping, "interval",
73
- minutes=4, id="spng",
74
- max_instances=1,
75
  )
76
  scheduler.start()
77
- logger.info("⏰ Tick/30s | WorkerPing/10m | SelfPing/4m")
78
-
79
  threading.Thread(target=do_tick, daemon=True).start()
80
-
81
  yield
82
  scheduler.shutdown(wait=False)
83
 
84
 
85
  app = FastAPI(
86
  title="πŸ”Œ Free Proxy API",
87
- description="SOCKS5 + HTTP verified proxies",
88
  version="3.0.0",
89
  lifespan=lifespan,
90
  )
@@ -92,7 +85,7 @@ app = FastAPI(
92
 
93
  def _resp(entry, strategy):
94
  if entry is None:
95
- raise HTTPException(503, "No proxy available")
96
  d = entry.to_dict()
97
  d["strategy"] = strategy
98
  return d
@@ -102,9 +95,8 @@ def _resp(entry, strategy):
102
  async def root():
103
  return {
104
  "name": "Free Proxy API",
105
- "version": "3.0.0",
106
  "pool": pool.size,
107
- "worker_ok": orch._worker_ok,
108
  "phase": orch._phase.value,
109
  "docs": "/docs",
110
  }
@@ -115,7 +107,6 @@ async def health():
115
  return {
116
  "status": "ok" if pool.size > 0 else "warming",
117
  "pool": pool.size,
118
- "worker": orch._worker_ok,
119
  }
120
 
121
 
@@ -145,39 +136,23 @@ async def get_proxy(
145
 
146
 
147
  @app.get("/proxy/random")
148
- async def rand(
149
- protocol: str = Query(None),
150
- verified: bool = Query(False),
151
- ):
152
- return _resp(
153
- pool.get_random(protocol, verified), "random"
154
- )
155
 
156
 
157
  @app.get("/proxy/best")
158
- async def best(
159
- protocol: str = Query(None),
160
- verified: bool = Query(False),
161
- ):
162
- return _resp(
163
- pool.get_fastest(protocol, verified), "fastest"
164
- )
165
 
166
 
167
  @app.get("/proxy/least")
168
- async def least(
169
- protocol: str = Query(None),
170
- verified: bool = Query(False),
171
- ):
172
- return _resp(
173
- pool.get_least_used(protocol, verified),
174
- "least-used",
175
- )
176
 
177
 
178
  @app.get("/rotate")
179
  async def rotate(
180
- count: int = Query(5, ge=1, le=50),
181
  protocol: str = Query(None),
182
  verified: bool = Query(False),
183
  ):
@@ -219,10 +194,7 @@ async def plain(
219
 
220
 
221
  @app.post("/feedback")
222
- async def feedback(
223
- proxy_url: str = Query(...),
224
- success: bool = Query(...),
225
- ):
226
  if success:
227
  pool.report_success(proxy_url)
228
  else:
 
1
  """
2
+ HF Space API v3
3
  """
4
 
5
  import os
 
35
  try:
36
  orch.tick()
37
  except Exception as e:
38
+ logger.error(f"Tick: {e}")
39
 
40
 
41
  def ping_worker():
 
55
 
56
  @asynccontextmanager
57
  async def lifespan(app: FastAPI):
58
+ logger.info("πŸš€ Proxy API v3")
59
  logger.info(f" Worker: {WORKER_URL}")
 
60
  scheduler.add_job(
61
+ do_tick, "interval", seconds=30,
62
+ id="tick", max_instances=1, coalesce=True,
 
63
  )
64
  scheduler.add_job(
65
+ ping_worker, "interval", minutes=10,
66
+ id="wpng", max_instances=1,
 
67
  )
68
  scheduler.add_job(
69
+ self_ping, "interval", minutes=4,
70
+ id="spng", max_instances=1,
 
71
  )
72
  scheduler.start()
 
 
73
  threading.Thread(target=do_tick, daemon=True).start()
 
74
  yield
75
  scheduler.shutdown(wait=False)
76
 
77
 
78
  app = FastAPI(
79
  title="πŸ”Œ Free Proxy API",
80
+ description="SOCKS5 + HTTP verified",
81
  version="3.0.0",
82
  lifespan=lifespan,
83
  )
 
85
 
86
  def _resp(entry, strategy):
87
  if entry is None:
88
+ raise HTTPException(503, "No proxy")
89
  d = entry.to_dict()
90
  d["strategy"] = strategy
91
  return d
 
95
  async def root():
96
  return {
97
  "name": "Free Proxy API",
 
98
  "pool": pool.size,
99
+ "worker": orch._worker_ok,
100
  "phase": orch._phase.value,
101
  "docs": "/docs",
102
  }
 
107
  return {
108
  "status": "ok" if pool.size > 0 else "warming",
109
  "pool": pool.size,
 
110
  }
111
 
112
 
 
136
 
137
 
138
  @app.get("/proxy/random")
139
+ async def rand(protocol: str = Query(None), verified: bool = Query(False)):
140
+ return _resp(pool.get_random(protocol, verified), "random")
 
 
 
 
 
141
 
142
 
143
  @app.get("/proxy/best")
144
+ async def best(protocol: str = Query(None), verified: bool = Query(False)):
145
+ return _resp(pool.get_fastest(protocol, verified), "fastest")
 
 
 
 
 
146
 
147
 
148
  @app.get("/proxy/least")
149
+ async def least(protocol: str = Query(None), verified: bool = Query(False)):
150
+ return _resp(pool.get_least_used(protocol, verified), "least-used")
 
 
 
 
 
 
151
 
152
 
153
  @app.get("/rotate")
154
  async def rotate(
155
+ count: int = Query(5, ge=1, le=100),
156
  protocol: str = Query(None),
157
  verified: bool = Query(False),
158
  ):
 
194
 
195
 
196
  @app.post("/feedback")
197
+ async def feedback(proxy_url: str = Query(...), success: bool = Query(...)):
 
 
 
198
  if success:
199
  pool.report_success(proxy_url)
200
  else: