Coverage for src / beautyspot / types.py: 98%
42 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-03-11 19:10 +0900
« prev ^ index » next coverage.py v7.13.2, created at 2026-03-11 19:10 +0900
1# src/beautyspot/types.py
3from collections.abc import Mapping
4from dataclasses import dataclass
5from datetime import datetime
6from types import MappingProxyType
7from typing import Any, Optional, TypedDict
10class TaskRecord(TypedDict):
11 """
12 Task metadata record retrieved from the database.
13 """
15 result_type: str
16 result_value: Optional[str]
17 result_data: Optional[bytes]
18 expires_at: Optional[str]
21@dataclass(frozen=True)
22class SaveErrorContext:
23 """
24 キャッシュ保存処理 (wait=False/True) が失敗した際に、
25 エラーハンドラーへ渡されるコンテキスト情報です。
27 Attributes:
28 func_name: キャッシュ保存対象となった関数の名前
29 cache_key: 生成されたキャッシュキー (SHA-256)
30 input_id: 入力引数から生成された識別子
31 version: キャッシュのバージョン指定文字列
32 content_type: 保存データのMIMEタイプなどのコンテンツタイプ文字列
33 save_blob: Blobストレージへの保存が指定/判定されていたか
34 expires_at: 計算されたキャッシュの有効期限
35 result_type: キャッシュしようとした戻り値の型名
36 result_size: キャッシュしようとした戻り値のメモリサイズ概算(取得可能な場合のみ)
37 """
39 func_name: str
40 cache_key: str
41 input_id: str
42 version: Optional[str]
43 content_type: Optional[str]
44 save_blob: Optional[bool]
45 expires_at: Optional[datetime]
46 result_type: str
47 result_size: Optional[int]
50@dataclass(frozen=True)
51class HookContextBase:
52 """すべてのフックに共通する基本コンテキスト情報。
54 Attributes:
55 kwargs: 関数に渡されたキーワード引数。読み取り専用の ``MappingProxyType``
56 として提供されるため、フック内での変更はできません。
57 """
59 func_name: str
60 input_id: str
61 cache_key: str
62 args: tuple
63 kwargs: Mapping[str, Any]
65 def __post_init__(self) -> None:
66 # Bug Fix (D4): frozen=True でも dict の内容は変更可能なため、
67 # MappingProxyType でラップしてフックによる意図しない変更を防ぐ。
68 if not isinstance(self.kwargs, MappingProxyType): 68 ↛ exitline 68 didn't return from function '__post_init__' because the condition on line 68 was always true
69 object.__setattr__(self, "kwargs", MappingProxyType(self.kwargs))
72@dataclass(frozen=True)
73class PreExecuteContext(HookContextBase):
74 """関数実行前、またはキャッシュ確認前に渡されるコンテキスト。"""
76 pass
79@dataclass(frozen=True)
80class CacheHitContext(HookContextBase):
81 """キャッシュから正常に結果が取得された際に渡されるコンテキスト。"""
83 result: Any
84 version: Optional[str]
87@dataclass(frozen=True)
88class CacheMissContext(HookContextBase):
89 """キャッシュミスとなり、元の関数が実行された後に渡されるコンテキスト。"""
91 result: Any
92 version: Optional[str]