Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions bittensor_cli/src/bittensor/chain_data.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from abc import abstractmethod
from dataclasses import dataclass
from collections.abc import Sequence
from enum import Enum
from typing import Optional, Any, Union
from typing import Optional, Any, Union, Callable, Hashable

import netaddr
from scalecodec.utils.ss58 import ss58_encode
Expand Down Expand Up @@ -69,19 +70,25 @@ def _chr_str(codes: tuple[int]) -> str:
return "".join(map(chr, codes))


def process_nested(data: Union[tuple, dict], chr_transform):
def process_nested(
data: Sequence[dict[Hashable, tuple[int]]] | dict,
chr_transform: Callable[[tuple[int]], str],
) -> list[dict[Hashable, str]] | dict[Hashable, str]:
"""Processes nested data structures by applying a transformation function to their elements."""
if isinstance(data, (list, tuple)):
if isinstance(data, Sequence):
if len(data) > 0 and isinstance(data[0], dict):
return [
{k: chr_transform(v) for k, v in item.items()}
if item is not None
else None
for item in data
]
# TODO @abe why do we kind of silently fail here?
return {}
elif isinstance(data, dict):
return {k: chr_transform(v) for k, v in data.items()}
else:
raise TypeError(f"Unsupported data type {type(data)}")


@dataclass
Expand Down
Loading