from dataclasses import dataclass
from enum import Enum
from uuid import UUID
[docs]
class FuturePastProbe(Enum):
FUTURE = 0
PAST = 1
PROBE = 2
[docs]
@dataclass(eq=True, frozen=True) # for hashing
class LossChannel:
mode: FuturePastProbe
lossref: UUID | None
name: str
[docs]
@classmethod
def from_string(cls, loss_channel: str) -> "LossChannel":
parts = loss_channel.split(":")
if len(parts) != 3: # noqa: PLR2004
raise ValueError("loss_channel must be in the format 'FuturePastProbe:lossref:name'")
parts[0] = parts[0].lower()
match parts:
case ["future", lossref, name]:
future_past_probe = FuturePastProbe.FUTURE
case ["past", lossref, name]:
future_past_probe = FuturePastProbe.PAST
case ["probe", lossref, name]:
future_past_probe = FuturePastProbe.PROBE
case _:
raise ValueError("Invalid FuturePastProbe value")
return LossChannel(future_past_probe, UUID(lossref) if lossref != "" else None, name)
[docs]
def to_string(self) -> str:
return f"{self.mode.name}:{self.lossref}:{self.name}"