韩宇
init
1b7e88c
import datetime
import inspect
import re
from abc import ABC, abstractmethod
from pathlib import Path
from time import time
from omagent_core.base import BotBase
from pydantic import model_validator
from ..utils.error import VQLError
from ..utils.logger import logging
class CallbackBase(BotBase, ABC):
bot_id: str
start_time: str = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
# folder_name: str = f"./running_logs/{start_time}"
class Config:
"""Configuration for this pydantic object."""
arbitrary_types_allowed = True
extra = "allow"
# @model_validator(mode="after")
# def init_folder(self):
# Path(self.folder_name).mkdir(parents=True, exist_ok=True)
@abstractmethod
def send_block(self, **kwargs):
pass
@abstractmethod
def send_answer(self, **kwargs):
pass
@abstractmethod
def info(self, **kwargs):
pass
@abstractmethod
def error(self, **kwargs):
pass
@abstractmethod
def finish(self, **kwargs):
pass
def filter_special_symbols_in_msg(self, msg):
msg = re.sub(r"[-*#]", "", msg)
return msg
def remove_duplicates(self, sorted_list):
if not sorted_list:
return []
result = [sorted_list[0]]
for item in sorted_list[1:]:
if item != result[-1]:
result.append(item)
return result[::-1]
def get_calling_class(self):
stack = inspect.stack()
# Skipping the first two frames: current frame and the frame of get_calling_class_name
calling_chain = self.remove_duplicates(
[
each.frame.f_locals.get("self").__class__.__name__
for each in stack[2:]
if isinstance(each.frame.f_locals.get("self"), BotBase)
]
)
for frame_info in stack[2:]:
frame = frame_info.frame
# Check for 'self' in local variables to identify the caller object
self_obj = frame.f_locals.get("self")
if self_obj:
return self_obj, calling_chain
return None, None
class TestCallback(CallbackBase):
bot_id: str = ""
start_time: int = time()
def info(self, *args, **kwargs):
logging.debug("Callback message [{}] | [{}]".format(args, kwargs))
def error(self, error: VQLError):
logging.error("Error message [{}]".format(error))