Spaces:
Sleeping
Sleeping
| 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) | |
| def send_block(self, **kwargs): | |
| pass | |
| def send_answer(self, **kwargs): | |
| pass | |
| def info(self, **kwargs): | |
| pass | |
| def error(self, **kwargs): | |
| pass | |
| 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)) | |