feat: fpw plugins, validation/crawl perf, WS stats, test DB isolation
- Add Free_Proxy_Website-style fpw_* plugins and register them - Per-plugin crawl timeout (crawl_timeout_seconds=120); remove global crawl_timeout setting - Validator: fix connect vs total timeout on save; SOCKS session LRU cache; drop redundant semaphore - Validation handler uses single DB connection; batch upsert after crawl; WorkerPool put_nowait - Remove unused max_retries from settings API/UI; settings maintenance SQL + init_db cleanup of deprecated keys - WebSocket dashboard stats; ProxyList pool_filter and API alignment - POST /api/proxies/delete-one for IPv6-safe deletes; task poll stops on 404 - pytest uses PROXYPOOL_DB_PATH=db/proxies.test.sqlite so tests do not wipe production DB - .gitignore: explicit proxies.test.sqlite patterns; fix plugin_service ValidationException import Made-with: Cursor
This commit is contained in:
@@ -30,10 +30,19 @@ class ProxyService:
|
||||
max_score: Optional[int] = None,
|
||||
sort_by: str = "last_check",
|
||||
sort_order: str = "DESC",
|
||||
pool_filter: Optional[str] = None,
|
||||
) -> Tuple[List[Proxy], int]:
|
||||
async with get_db() as db:
|
||||
return await self.proxy_repo.list_paginated(
|
||||
db, page, page_size, protocol, min_score, max_score, sort_by, sort_order
|
||||
db,
|
||||
page,
|
||||
page_size,
|
||||
protocol,
|
||||
min_score,
|
||||
max_score,
|
||||
sort_by,
|
||||
sort_order,
|
||||
pool_filter=pool_filter,
|
||||
)
|
||||
|
||||
async def get_random_proxy(self) -> Optional[Proxy]:
|
||||
@@ -72,7 +81,9 @@ class ProxyService:
|
||||
|
||||
exported = 0
|
||||
async with get_db() as db:
|
||||
async for batch in self.proxy_repo.iter_batches(db, protocol=protocol, batch_size=1000):
|
||||
async for batch in self.proxy_repo.iter_batches(
|
||||
db, protocol=protocol, batch_size=1000, only_usable=True
|
||||
):
|
||||
for p in batch:
|
||||
if exported >= limit:
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user