1 Commits
Author SHA1 Message Date
dsql 385425b180 release: 1.0.0
first stable release. pre-1.0.0 verification complete: all surviving MED regressions and
gaps resolved and independently re-fired, tree audited clean across the suite.

Signed-off-by: disqualifier <dev@disqualifier.me>
2026-07-06 21:21:00 -04:00
3 changed files with 5 additions and 18 deletions
+3 -3
View File
@@ -9,15 +9,15 @@ edits. **Credentials are always injected — never hardcoded.**
## Install ## Install
``` ```
aioproxies @ git+ssh://git@git.rethinkstudios.io/rethink-public/aioproxies.git@v1.0.0 aioproxies @ git+ssh://git@git.rethinkstudios.io/rethink-public/aioproxies.git@v0.3.2
# network helpers (current_ip / reset) need the extra: # network helpers (current_ip / reset) need the extra:
aioproxies[net] @ git+ssh://git@git.rethinkstudios.io/rethink-public/aioproxies.git@v1.0.0 aioproxies[net] @ git+ssh://git@git.rethinkstudios.io/rethink-public/aioproxies.git@v0.3.2
``` ```
The core has no dependencies. The `net` extra adds `aiohttp` for `current_ip` / The core has no dependencies. The `net` extra adds `aiohttp` for `current_ip` /
`reset`. `reset`.
Drop the `@v1.0.0` suffix from the line above to install the latest unpinned. Drop the `@v0.3.2` suffix from the line above to install the latest unpinned.
## Formatting ## Formatting
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "aioproxies" name = "aioproxies"
version = "1.1.0" version = "1.0.0"
description = "proxy parsing, formatting, health, and pool management for aiohttp/aioweb, camoufox, and socks5" description = "proxy parsing, formatting, health, and pool management for aiohttp/aioweb, camoufox, and socks5"
requires-python = ">=3.10" requires-python = ">=3.10"
dependencies = [] dependencies = []
+1 -14
View File
@@ -6,24 +6,11 @@ calling a function without it raises a clear error.
""" """
import logging import logging
from typing import Optional, Union from typing import Optional, Union
from urllib.parse import urlsplit, urlunsplit
from .proxy import Proxy, to_proxy from .proxy import Proxy, to_proxy
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def _safe_url(url: str) -> str:
"""strip query + fragment from a url for logging - a provider reset url can carry a
rotation token in its query/path; this drops the query/fragment (the usual token spot)
so the log line can't leak it. falls back to the raw url only if it won't parse"""
try:
parts = urlsplit(url)
except ValueError:
return url
return urlunsplit((parts.scheme, parts.netloc, parts.path, "", ""))
try: try:
import aiohttp import aiohttp
@@ -68,7 +55,7 @@ async def reset(reset_url: str, *, timeout: float = 15.0) -> bool:
async with aiohttp.ClientSession(timeout=t) as session: async with aiohttp.ClientSession(timeout=t) as session:
async with session.get(reset_url) as resp: async with session.get(reset_url) as resp:
ok = resp.status == 200 ok = resp.status == 200
log.info("proxy reset %s -> %s", _safe_url(reset_url), resp.status) log.info("proxy reset %s -> %s", reset_url, resp.status)
return ok return ok
except Exception as exc: except Exception as exc:
log.warning("proxy reset failed: %s", exc) log.warning("proxy reset failed: %s", exc)