From 3462cc0bd923f83506242b9ce251aef8225824d8 Mon Sep 17 00:00:00 2001 From: BD Himes Date: Thu, 19 Mar 2026 13:47:42 +0200 Subject: [PATCH 1/2] Add better typing --- bittensor_cli/src/bittensor/chain_data.py | 7 ++++--- pyproject.toml | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bittensor_cli/src/bittensor/chain_data.py b/bittensor_cli/src/bittensor/chain_data.py index 8d9723e05..b0f078f7e 100644 --- a/bittensor_cli/src/bittensor/chain_data.py +++ b/bittensor_cli/src/bittensor/chain_data.py @@ -3,6 +3,7 @@ from collections.abc import Sequence from enum import Enum from typing import Optional, Any, Union, Callable, Hashable +from typing_extensions import Self import netaddr from scalecodec.utils.ss58 import ss58_encode @@ -134,17 +135,17 @@ class InfoBase: """Base dataclass for info objects.""" @abstractmethod - def _fix_decoded(self, decoded: Any) -> "InfoBase": + def _fix_decoded(self, decoded: Any) -> Self: raise NotImplementedError( "This is an abstract method and must be implemented in a subclass." ) @classmethod - def from_any(cls, data: Any) -> "InfoBase": + def from_any(cls, data: Any) -> Self: return cls._fix_decoded(data) @classmethod - def list_from_any(cls, data_list: list[Any]) -> list["InfoBase"]: + def list_from_any(cls, data_list: list[Any]) -> list[Self]: return [cls.from_any(data) for data in data_list] def __getitem__(self, item): diff --git a/pyproject.toml b/pyproject.toml index 743c035de..39bd99d8f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ dependencies = [ "rich>=13.7,<15.0", "scalecodec==1.2.12", "typer>=0.16", + "typing_extensions>4.0.0", "bittensor-wallet>=4.0.0", "packaging", "plotille>=5.0.0", From aa059ea1b3dc7fe7b793dac2ee1a69f26ec6f85c Mon Sep 17 00:00:00 2001 From: BD Himes Date: Thu, 19 Mar 2026 15:08:34 +0200 Subject: [PATCH 2/2] Only use typing extensions as a req if python <3.11 --- bittensor_cli/src/bittensor/chain_data.py | 6 +++++- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bittensor_cli/src/bittensor/chain_data.py b/bittensor_cli/src/bittensor/chain_data.py index b0f078f7e..b5df2bd37 100644 --- a/bittensor_cli/src/bittensor/chain_data.py +++ b/bittensor_cli/src/bittensor/chain_data.py @@ -3,7 +3,6 @@ from collections.abc import Sequence from enum import Enum from typing import Optional, Any, Union, Callable, Hashable -from typing_extensions import Self import netaddr from scalecodec.utils.ss58 import ss58_encode @@ -18,6 +17,11 @@ get_netuid_and_subuid_by_storage_index, ) +try: + from typing import Self +except ImportError: + from typing_extensions import Self + class ChainDataType(Enum): NeuronInfo = 1 diff --git a/pyproject.toml b/pyproject.toml index 39bd99d8f..719d7d035 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ dependencies = [ "rich>=13.7,<15.0", "scalecodec==1.2.12", "typer>=0.16", - "typing_extensions>4.0.0", + "typing_extensions>4.0.0; python_version<'3.11'", "bittensor-wallet>=4.0.0", "packaging", "plotille>=5.0.0",