File size: 1,489 Bytes
494c89b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
Базовый класс коллектора
"""

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