Skip to content

Commit 7e1eac6

Browse files
authored
don't rely on init order for functionality (#52)
1 parent 1943459 commit 7e1eac6

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

hikari_clusters/info_classes.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,17 @@
3030

3131
class BaseInfo:
3232
uid: int
33-
_next_info_class_id: int = 0
3433
_info_classes: dict[int, type[BaseInfo]] = {}
3534
_info_class_id: int
3635

3736
def __init_subclass__(cls) -> None:
38-
cls._info_class_id = BaseInfo._next_info_class_id
39-
BaseInfo._next_info_class_id += 1
37+
if not hasattr(cls, "_info_class_id"):
38+
raise AttributeError(f"{cls} is missing _info_class_id.")
39+
if used_by := BaseInfo._info_classes.get(cls._info_class_id):
40+
raise ValueError(
41+
f"_info_class_id {cls._info_class_id} is already used by "
42+
f"{used_by}"
43+
)
4044
BaseInfo._info_classes[cls._info_class_id] = cls
4145

4246
def asdict(self) -> dict[str, Any]:
@@ -57,6 +61,7 @@ def __int__(self) -> int:
5761
class ServerInfo(BaseInfo):
5862
"""A representation of a :class:`~server.Server`."""
5963

64+
_info_class_id = 0
6065
uid: int
6166
"""The ipc uid of the server."""
6267
cluster_uids: list[int]
@@ -67,6 +72,7 @@ class ServerInfo(BaseInfo):
6772
class ClusterInfo(BaseInfo):
6873
"""A representation of a :class:`~cluster.Cluster`."""
6974

75+
_info_class_id = 1
7076
uid: int
7177
"""The ipc uid of the cluster."""
7278
server_uid: int
@@ -99,5 +105,6 @@ def get_cluster_id(shard_id: int, shards_per_cluster: int) -> int:
99105

100106
@dataclass
101107
class BrainInfo(BaseInfo):
108+
_info_class_id = 2
102109
uid: int
103110
"""The ipc uid of the brain."""

0 commit comments

Comments
 (0)