From 87d457367283b71fec21be88d3cb5638e2469c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1nos=20Kukovecz?= Date: Wed, 3 Jun 2026 15:21:33 +0200 Subject: [PATCH 1/2] chore: replace deprecated pydantic.parse_obj_as parse_obj_as is deprecated, the deprecation warning is suggesting to use TypeAdapter.validate_python instead --- onekey_client/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/onekey_client/client.py b/onekey_client/client.py index 7cafcef..f329b69 100644 --- a/onekey_client/client.py +++ b/onekey_client/client.py @@ -9,7 +9,7 @@ from authlib.jose import jwt from authlib.oidc.core import IDToken from httpx import URL -from pydantic import parse_obj_as +from pydantic import TypeAdapter from . import errors, keys from . import models as m @@ -103,7 +103,7 @@ def login(self, email: str, password: str): claims_cls=IDToken, ) tenants = id_token[TOKEN_NAMESPACE + "tenants"] - tenants = parse_obj_as(list[m.Tenant], tenants) + tenants = TypeAdapter(list[m.Tenant]).validate_python(tenants) self._state.tenants = {e.name: e for e in tenants} self._state.email = email self._state.raw_id_token = json_res["id_token"] From 1d89c1cf5e46bfd3e8a61413cbf28cad4100ffa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1nos=20Kukovecz?= Date: Wed, 3 Jun 2026 16:27:29 +0200 Subject: [PATCH 2/2] feat: Add --version CLI option and setting User-Agent HTTP header --- onekey_client/__init__.py | 2 ++ onekey_client/cli/cli.py | 3 ++- onekey_client/client.py | 10 +++++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/onekey_client/__init__.py b/onekey_client/__init__.py index b4afc12..552428b 100644 --- a/onekey_client/__init__.py +++ b/onekey_client/__init__.py @@ -1,3 +1,5 @@ +from .client import APP_NAME as APP_NAME +from .client import APP_VERSION as APP_VERSION from .client import Client as Client from .models import FirmwareMetadata as FirmwareMetadata from .models import Tenant as Tenant diff --git a/onekey_client/cli/cli.py b/onekey_client/cli/cli.py index 61eefc9..e847d00 100644 --- a/onekey_client/cli/cli.py +++ b/onekey_client/cli/cli.py @@ -3,7 +3,7 @@ import click import httpx -from onekey_client import Client +from onekey_client import APP_NAME, APP_VERSION, Client from .ci import ci_result from .firmware_upload import upload_firmware @@ -11,6 +11,7 @@ @click.group() +@click.version_option(version=APP_VERSION, prog_name=APP_NAME) @click.option( "--api-url", default="https://app.eu.onekey.com/api", diff --git a/onekey_client/client.py b/onekey_client/client.py index f329b69..7e0d8a9 100644 --- a/onekey_client/client.py +++ b/onekey_client/client.py @@ -3,6 +3,7 @@ import secrets import time from importlib import resources +from importlib.metadata import version from pathlib import Path import httpx @@ -17,6 +18,8 @@ CLIENT_ID = "ONEKEY Python SDK" TOKEN_NAMESPACE = "https://www.onekey.com/" # noqa: S105 (hardcoded credential) +APP_NAME = "onekey_client" +APP_VERSION = version(APP_NAME) def _login_required(func): @@ -63,17 +66,18 @@ def _setup_httpx_client( ca_bundle: Path | None = None, disable_tls_verify: bool | None = False, ): + headers = {"User-Agent": f"{APP_NAME}/{APP_VERSION}"} if disable_tls_verify: - return httpx.Client(base_url=api_url, verify=False) # noqa: S501 (TLS certificate validation disabled) + return httpx.Client(base_url=api_url, headers=headers, verify=False) # noqa: S501 (TLS certificate validation disabled) if ca_bundle is not None: ca = ca_bundle.expanduser() if not ca.exists(): raise errors.InvalidCABundle - return httpx.Client(base_url=api_url, verify=str(ca)) + return httpx.Client(base_url=api_url, headers=headers, verify=str(ca)) with resources.path(keys, "ca.pem") as ca: - return httpx.Client(base_url=api_url, verify=str(ca)) + return httpx.Client(base_url=api_url, headers=headers, verify=str(ca)) def _load_key(self, key_name: str, path: Path | None = None): if path is not None: