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)) | |