Ai
2 Star 0 Fork 0

mirrors_ibm/ITBench-Utilities

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
observer.py 1.55 KB
一键复制 编辑 原始数据 按行查看 历史
Takumi Yanagawa 提交于 2025-03-23 13:34 +08:00 . chore: rename to itbench-utilities (#4)
import json
import logging
from datetime import date, datetime
from pathlib import Path
from typing import Any, Callable, Dict, Optional
from pydantic import BaseModel
from itbench_utilities.app.utils import get_timestamp
logger = logging.getLogger(__name__)
class EventData(BaseModel):
event: str
timestamp: Optional[datetime] = None
data: Dict[str, Any]
class Observer:
def __init__(self):
self.callbacks = []
def register(self, callback: Callable[[EventData], None]):
self.callbacks.append(callback)
def notify(self, event: str, data: Dict[str, Any]):
for callback in self.callbacks:
try:
event_data = EventData(event=event, data=data, timestamp=get_timestamp())
callback(event_data)
except Exception as e:
logger.warning(f"Callback {callback.__name__} failed with exception for evant {event}: {e}")
def custom_serializer(obj):
if isinstance(obj, BaseModel):
return obj.model_dump(mode="json")
if isinstance(obj, (datetime, date)):
return obj.isoformat()
if isinstance(obj, Path):
return obj.as_posix()
raise TypeError(f"Type {type(obj)} not serializable")
def gen_json_logging_callback(logger: logging.Logger) -> Callable[[EventData], None]:
def json_logging(event_data: EventData):
json_str = json.dumps(event_data.data, default=custom_serializer)
logger.info(json_str)
return json_logging
DEFAULT_OBSERVER = Observer()
DEFAULT_OBSERVER.register(gen_json_logging_callback(logger))
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_ibm/ITBench-Utilities.git
git@gitee.com:mirrors_ibm/ITBench-Utilities.git
mirrors_ibm
ITBench-Utilities
ITBench-Utilities
main

搜索帮助