feat(cerbero): HTTP client with bearer + bot-tag + retry

Client minimale verso Cerbero MCP unified server con header
Authorization Bearer e X-Bot-Tag su ogni richiesta. Retry esponenziale
solo su ConnectionError (non su 4xx). 4xx/5xx -> RuntimeError.

Switch da httpx a requests per allineamento con libreria mock
`responses` (httpx richiederebbe respx). httpx resta in deps per usi
futuri. Aggiunto types-requests ai dev deps per mypy strict.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 19:25:00 +02:00
parent b61bbaf13c
commit 14b1b84a47
5 changed files with 115 additions and 0 deletions
Generated
+16
View File
@@ -898,6 +898,7 @@ dependencies = [
{ name = "pydantic" },
{ name = "pydantic-settings" },
{ name = "pyyaml" },
{ name = "requests" },
{ name = "scipy" },
{ name = "sexpdata" },
{ name = "sqlmodel" },
@@ -913,6 +914,7 @@ dev = [
{ name = "pytest-mock" },
{ name = "responses" },
{ name = "ruff" },
{ name = "types-requests" },
]
[package.metadata]
@@ -928,6 +930,7 @@ requires-dist = [
{ name = "pydantic", specifier = ">=2.9" },
{ name = "pydantic-settings", specifier = ">=2.6" },
{ name = "pyyaml", specifier = ">=6.0" },
{ name = "requests", specifier = ">=2.32" },
{ name = "scipy", specifier = ">=1.14" },
{ name = "sexpdata", specifier = ">=1.0.2" },
{ name = "sqlmodel", specifier = ">=0.0.22" },
@@ -943,6 +946,7 @@ dev = [
{ name = "pytest-mock", specifier = ">=3.14" },
{ name = "responses", specifier = ">=0.25" },
{ name = "ruff", specifier = ">=0.7" },
{ name = "types-requests", specifier = ">=2.32" },
]
[[package]]
@@ -2048,6 +2052,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" },
]
[[package]]
name = "types-requests"
version = "2.33.0.20260508"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c7/6b/eb226bdd61a982c9a03e02c657fb4ab001733506e6423906ac142331f2e3/types_requests-2.33.0.20260508.tar.gz", hash = "sha256:81b2ae5f0d20967714a6aa5ef9284c05570d7cb06b7de8f2a77b918b63ddd411", size = 23991, upload-time = "2026-05-08T04:50:56.818Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/96/080db0afdf2c5cc5fe512b41354e8d114fe8f65e9510c56ff8dfd40216ce/types_requests-2.33.0.20260508-py3-none-any.whl", hash = "sha256:fa01459cca184229713df03709db46a905325906d27e042cd4fd7ea3d15d3400", size = 20722, upload-time = "2026-05-08T04:50:55.548Z" },
]
[[package]]
name = "typing-extensions"
version = "4.15.0"