From fcec29f147558937f0a9f1ea5436f4d23406a9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dean=20Qui=C3=B1anola?= Date: Fri, 27 Jun 2025 13:51:55 -0700 Subject: [PATCH 1/2] feat: Tetra User Agent --- src/tetra_rp/core/api/runpod.py | 3 +++ src/tetra_rp/core/resources/template.py | 4 +++- src/tetra_rp/core/utils/user_agent.py | 31 +++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/tetra_rp/core/utils/user_agent.py diff --git a/src/tetra_rp/core/api/runpod.py b/src/tetra_rp/core/api/runpod.py index a4138099..badb8955 100644 --- a/src/tetra_rp/core/api/runpod.py +++ b/src/tetra_rp/core/api/runpod.py @@ -9,6 +9,8 @@ from typing import Dict, Any, Optional import logging +from ..utils.user_agent import get_tetra_user_agent + log = logging.getLogger(__name__) RUNPOD_API_BASE_URL = os.environ.get("RUNPOD_API_BASE_URL", "https://api.runpod.io") @@ -38,6 +40,7 @@ async def _get_session(self) -> aiohttp.ClientSession: headers={ "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json", + "User-Agent": get_tetra_user_agent(), }, ) return self.session diff --git a/src/tetra_rp/core/resources/template.py b/src/tetra_rp/core/resources/template.py index 6ab33aef..e63f9aa6 100644 --- a/src/tetra_rp/core/resources/template.py +++ b/src/tetra_rp/core/resources/template.py @@ -2,6 +2,7 @@ from typing import Dict, List, Optional, Any from pydantic import BaseModel, model_validator from .base import BaseResource +from ..utils.user_agent import get_tetra_user_agent class KeyValuePair(BaseModel): key: str @@ -82,7 +83,8 @@ def update_system_dependencies(template_id, token, system_dependencies, base_ent headers = { "Authorization": f"Bearer {token}", - "Content-Type": "application/json" + "Content-Type": "application/json", + "User-Agent": get_tetra_user_agent(), } url = f"https://rest.runpod.io/v1/templates/{template_id}/update" diff --git a/src/tetra_rp/core/utils/user_agent.py b/src/tetra_rp/core/utils/user_agent.py new file mode 100644 index 00000000..f00b58ef --- /dev/null +++ b/src/tetra_rp/core/utils/user_agent.py @@ -0,0 +1,31 @@ +"""User-Agent utilities for Tetra HTTP clients.""" + +import platform +from importlib import metadata + + +def get_tetra_user_agent() -> str: + """ + Generate Tetra User-Agent string for HTTP requests. + + Format: Runpod-Tetra/ ( ; ) Language/Python + Example: Runpod-Tetra/0.4.2 (Linux 6.8.0-49-generic; x86_64) Language/Python 3.10.12 + + Returns: + str: Formatted User-Agent string + """ + try: + tetra_version = metadata.version("tetra_rp") + except metadata.PackageNotFoundError: + tetra_version = "unknown" + + # Get system information + system = platform.system() + release = platform.release() + machine = platform.machine() + python_version = platform.python_version() + + # Format User-Agent string + user_agent = f"Runpod-Tetra/{tetra_version} ({system} {release}; {machine}) Language/Python {python_version}" + + return user_agent From a5802e5aebbc21ce1ed9492d4809dda4aff82c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dean=20Qui=C3=B1anola?= Date: Tue, 8 Jul 2025 09:09:16 -0700 Subject: [PATCH 2/2] fix: ruff cleanup --- Makefile | 6 ++++++ src/tetra_rp/core/resources/template.py | 1 + src/tetra_rp/core/utils/user_agent.py | 10 +++++----- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index ee7bb8eb..9d397b30 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,9 @@ clean: build: clean dev uv build + +check: dev + uv run ruff check src/ tests/ || true + uv run ruff format --check src/ tests/ || true + uv run mypy src/ --ignore-missing-imports || true + uv run pytest tests/ -vv || true diff --git a/src/tetra_rp/core/resources/template.py b/src/tetra_rp/core/resources/template.py index f6974628..d0c607cf 100644 --- a/src/tetra_rp/core/resources/template.py +++ b/src/tetra_rp/core/resources/template.py @@ -4,6 +4,7 @@ from .base import BaseResource from ..utils.user_agent import get_tetra_user_agent + class KeyValuePair(BaseModel): key: str value: str diff --git a/src/tetra_rp/core/utils/user_agent.py b/src/tetra_rp/core/utils/user_agent.py index f00b58ef..1081f15c 100644 --- a/src/tetra_rp/core/utils/user_agent.py +++ b/src/tetra_rp/core/utils/user_agent.py @@ -7,10 +7,10 @@ def get_tetra_user_agent() -> str: """ Generate Tetra User-Agent string for HTTP requests. - + Format: Runpod-Tetra/ ( ; ) Language/Python Example: Runpod-Tetra/0.4.2 (Linux 6.8.0-49-generic; x86_64) Language/Python 3.10.12 - + Returns: str: Formatted User-Agent string """ @@ -18,14 +18,14 @@ def get_tetra_user_agent() -> str: tetra_version = metadata.version("tetra_rp") except metadata.PackageNotFoundError: tetra_version = "unknown" - + # Get system information system = platform.system() release = platform.release() machine = platform.machine() python_version = platform.python_version() - + # Format User-Agent string user_agent = f"Runpod-Tetra/{tetra_version} ({system} {release}; {machine}) Language/Python {python_version}" - + return user_agent