← back to Exo
refactor: Fix UUID implementation
8596d5c5b1c1d9ec8bcf4af627efa7cb611b5fd5 · 2025-07-02 11:04:52 +0100 · Arbion Halili
Files touched
M master/idempotency.pyM shared/types/common.pyM shared/types/events/common.pyM shared/types/events/events.pyM shared/types/models/common.pyM shared/types/networking/edges.pyM shared/types/tasks/common.pyM shared/types/worker/common.py
Diff
commit 8596d5c5b1c1d9ec8bcf4af627efa7cb611b5fd5
Author: Arbion Halili <99731180+ToxicPine@users.noreply.github.com>
Date: Wed Jul 2 11:04:52 2025 +0100
refactor: Fix UUID implementation
---
master/idempotency.py | 6 +++++-
shared/types/common.py | 21 ++++++++++++++-------
shared/types/events/common.py | 16 ++++++++--------
shared/types/events/events.py | 19 +++++++++----------
shared/types/models/common.py | 16 ++++++----------
shared/types/networking/edges.py | 12 +++++-------
shared/types/tasks/common.py | 13 ++++++-------
shared/types/worker/common.py | 17 +++++++----------
8 files changed, 60 insertions(+), 60 deletions(-)
diff --git a/master/idempotency.py b/master/idempotency.py
index d96be620..a761d2ab 100644
--- a/master/idempotency.py
+++ b/master/idempotency.py
@@ -1,5 +1,6 @@
from hashlib import sha3_224 as hasher
from typing import Sequence, TypeVar
+from uuid import UUID
from shared.types.events.common import EventId, EventTypes, IdemKeyGenerator, State
@@ -18,7 +19,10 @@ def get_idem_tag_generator(base: str) -> IdemKeyGenerator[EventTypeT]:
if n == 0:
return []
next_hash = hasher(last).digest()
- return (EventId(next_hash.hex()), *recurse(n - 1, next_hash))
+ return (
+ EventId(UUID(bytes=next_hash, version=4)),
+ *recurse(n - 1, next_hash),
+ )
initial_bytes = state.sequence_number.to_bytes(8, byteorder="big", signed=False)
return recurse(num_keys, initial_bytes)
diff --git a/shared/types/common.py b/shared/types/common.py
index c0fc38ff..2c1b77ab 100644
--- a/shared/types/common.py
+++ b/shared/types/common.py
@@ -1,9 +1,16 @@
-from typing import Annotated
-from uuid import UUID
+from uuid import uuid4
-from pydantic import TypeAdapter
-from pydantic.types import UuidVersion
+from pydantic import UUID4, Field
+from pydantic.dataclasses import dataclass
-_NodeId = Annotated[UUID, UuidVersion(4)]
-NodeId = type("NodeId", (UUID,), {})
-NodeIdParser: TypeAdapter[NodeId] = TypeAdapter(_NodeId)
+
+@dataclass(frozen=True)
+class NewUUID:
+ uuid: UUID4 = Field(default_factory=lambda: uuid4())
+
+ def __hash__(self) -> int:
+ return hash(self.uuid)
+
+
+class NodeId(NewUUID):
+ pass
diff --git a/shared/types/events/common.py b/shared/types/events/common.py
index 13ba7fe6..f3d995a9 100644
--- a/shared/types/events/common.py
+++ b/shared/types/events/common.py
@@ -10,14 +10,14 @@ from typing import (
Union,
get_args,
)
-from uuid import UUID
from pydantic import BaseModel, Field, TypeAdapter
-from pydantic.types import UuidVersion
-_EventId = Annotated[UUID, UuidVersion(4)]
-EventId = type("EventId", (UUID,), {})
-EventIdParser: TypeAdapter[EventId] = TypeAdapter(_EventId)
+from shared.types.common import NewUUID
+
+
+class EventId(NewUUID):
+ pass
class MLXEventTypes(str, Enum):
@@ -134,9 +134,9 @@ def get_effects_from_sagas(
IdemKeyGenerator = Callable[[State[EventTypeT], int], Sequence[EventId]]
-_CommandId = Annotated[UUID, UuidVersion(4)]
-CommandId = type("CommandId", (UUID,), {})
-CommandIdParser: TypeAdapter[CommandId] = TypeAdapter(_CommandId)
+
+class CommandId(NewUUID):
+ pass
class CommandTypes(str, Enum):
diff --git a/shared/types/events/events.py b/shared/types/events/events.py
index 8ebbf3ef..db5a3e32 100644
--- a/shared/types/events/events.py
+++ b/shared/types/events/events.py
@@ -1,11 +1,10 @@
from __future__ import annotations
-from typing import Annotated, Any, Literal, Tuple
-from uuid import UUID
+from typing import Any, Literal, Tuple
-from pydantic import BaseModel, TypeAdapter, UuidVersion
+from pydantic import BaseModel
-from shared.types.common import NodeId
+from shared.types.common import NewUUID, NodeId
from shared.types.events.common import (
Event,
InstanceEventTypes,
@@ -27,13 +26,13 @@ from shared.types.worker.common import InstanceId, NodeState
from shared.types.worker.instances import InstanceData
from shared.types.worker.runners import RunnerId, RunnerState, RunnerStateType
-_RequestId = Annotated[UUID, UuidVersion(4)]
-RequestId = type("RequestId", (UUID,), {})
-RequestIdParser: TypeAdapter[RequestId] = TypeAdapter(_RequestId)
-_TimerId = Annotated[UUID, UuidVersion(4)]
-TimerId = type("TimerId", (UUID,), {})
-TimerIdParser: TypeAdapter[TimerId] = TypeAdapter(_TimerId)
+class RequestId(NewUUID):
+ pass
+
+
+class TimerId(NewUUID):
+ pass
class TimerData(BaseModel):
diff --git a/shared/types/models/common.py b/shared/types/models/common.py
index 5e2c1127..d4471eb3 100644
--- a/shared/types/models/common.py
+++ b/shared/types/models/common.py
@@ -1,15 +1,14 @@
-from typing import Annotated, Sequence, final
-from uuid import UUID
+from typing import Sequence, final
-from pydantic import BaseModel, TypeAdapter
-from pydantic.types import UuidVersion
+from pydantic import BaseModel
+from shared.types.common import NewUUID
from shared.types.models.metadata import ModelMetadata
from shared.types.models.sources import ModelSource
-_ModelId = Annotated[UUID, UuidVersion(4)]
-ModelId = type("ModelId", (UUID,), {})
-ModelIdParser: TypeAdapter[ModelId] = TypeAdapter(_ModelId)
+
+class ModelId(NewUUID):
+ pass
@final
@@ -17,6 +16,3 @@ class Model(BaseModel):
model_id: ModelId
model_sources: Sequence[ModelSource]
model_metadata: ModelMetadata
-
-
-ModelIdAdapter: TypeAdapter[ModelId] = TypeAdapter(_ModelId)
diff --git a/shared/types/networking/edges.py b/shared/types/networking/edges.py
index 87a05179..0977caf1 100644
--- a/shared/types/networking/edges.py
+++ b/shared/types/networking/edges.py
@@ -1,16 +1,14 @@
from collections.abc import Mapping
from enum import Enum
from typing import Annotated, Generic, NamedTuple, TypeVar, final
-from uuid import UUID
-from pydantic import AfterValidator, BaseModel, IPvAnyAddress, TypeAdapter
-from pydantic.types import UuidVersion
+from pydantic import AfterValidator, BaseModel, IPvAnyAddress
-from shared.types.common import NodeId
+from shared.types.common import NewUUID, NodeId
-_EdgeId = Annotated[UUID, UuidVersion(4)]
-EdgeId = type("EdgeId", (UUID,), {})
-EdgeIdParser: TypeAdapter[EdgeId] = TypeAdapter(_EdgeId)
+
+class EdgeId(NewUUID):
+ pass
class AddressingProtocol(str, Enum):
diff --git a/shared/types/tasks/common.py b/shared/types/tasks/common.py
index db4d9a3f..4baf87fb 100644
--- a/shared/types/tasks/common.py
+++ b/shared/types/tasks/common.py
@@ -1,17 +1,16 @@
from collections.abc import Mapping
from enum import Enum
-from typing import Annotated, Any, Generic, Literal, TypeVar, Union
-from uuid import UUID
+from typing import Any, Generic, Literal, TypeVar, Union
import openai.types.chat as openai
-from pydantic import BaseModel, TypeAdapter
-from pydantic.types import UuidVersion
+from pydantic import BaseModel
+from shared.types.common import NewUUID
from shared.types.worker.common import InstanceId, RunnerId
-_TaskId = Annotated[UUID, UuidVersion(4)]
-TaskId = type("TaskId", (UUID,), {})
-TaskIdParser: TypeAdapter[TaskId] = TypeAdapter(_TaskId)
+
+class TaskId(NewUUID):
+ pass
class TaskType(str, Enum):
diff --git a/shared/types/worker/common.py b/shared/types/worker/common.py
index 79ac3ae7..0d53ddc5 100644
--- a/shared/types/worker/common.py
+++ b/shared/types/worker/common.py
@@ -1,17 +1,14 @@
from enum import Enum
-from typing import Annotated
-from uuid import UUID
-from pydantic import TypeAdapter
-from pydantic.types import UuidVersion
+from shared.types.common import NewUUID
-_InstanceId = Annotated[UUID, UuidVersion(4)]
-InstanceId = type("InstanceId", (UUID,), {})
-InstanceIdParser: TypeAdapter[InstanceId] = TypeAdapter(_InstanceId)
-_RunnerId = Annotated[UUID, UuidVersion(4)]
-RunnerId = type("RunnerId", (UUID,), {})
-RunnerIdParser: TypeAdapter[RunnerId] = TypeAdapter(_RunnerId)
+class InstanceId(NewUUID):
+ pass
+
+
+class RunnerId(NewUUID):
+ pass
class NodeState(str, Enum):
← 6de1f288 feat: Update Interfaces
·
back to Exo
·
refactor: Refactor most things 40793f1d →