ForcePilot/backend/package/yuxi/channels/contract/dtos/cache.py

43 lines
1.3 KiB
Python
Raw Normal View History

"""缓存 DTO。
定义缓存端口的值对象包括锁令牌所有 DTO 均为
``dataclass(frozen=True)``仅依赖标准库用于分布式锁管理
"""
from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
from yuxi.channels.contract.errors import ValidationError
@dataclass(frozen=True)
class LockToken:
"""锁令牌。
标识一次分布式锁获取的令牌携带锁键令牌值与过期时间用于锁续期与
释放校验``key`` 字段使释放操作能从令牌还原锁键避免适配器维护跨
请求的 ``token -> key`` 映射ADP-023 / INV-5
字段
key: 锁键获取时传入释放时还原
value: 令牌值
expires_at: 过期时间
"""
key: str
value: str
expires_at: datetime
def __post_init__(self) -> None:
"""校验 key 与 value 非空。
``key`` ``value`` 必须非空在构造时即抛出 ``ValidationError``
避免空锁键或空令牌值导致锁释放校验失效INV-8
"""
if not self.key:
raise ValidationError("key", "must not be empty")
if not self.value:
raise ValidationError("value", "must not be empty")