StarrySkyWorld's picture
Initial commit
494c89b
"""
Базовый класс коллектора
"""
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from ..core import DebugSession, DebugStep
class BaseCollector(ABC):
"""
Базовый класс для всех коллекторов данных.
Коллектор отвечает за:
1. Инжект перехватчиков в страницу (inject)
2. Периодический сбор данных (collect)
3. Обработку начала/конца шага (on_step_start/on_step_end)
"""
name: str = "base"
def __init__(self, session: 'DebugSession'):
self.session = session
self._data = []
@property
def page(self):
return self.session.page
def log(self, msg: str):
"""Логирование через сессию"""
self.session._log(f" [{self.name}] {msg}")
@abstractmethod
def inject(self):
"""Инжектит перехватчики в страницу"""
pass
@abstractmethod
def collect(self) -> list:
"""Собирает накопленные данные"""
pass
def on_step_start(self, step_name: str):
"""Вызывается при начале шага"""
pass
def on_step_end(self, step: 'DebugStep'):
"""Вызывается при завершении шага"""
pass