File size: 2,159 Bytes
86c402d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Класс для представления чанка документа.
"""

from dataclasses import dataclass

from .linker_entity import LinkerEntity, register_entity


@register_entity
@dataclass
class Chunk(LinkerEntity):
    """
    Класс для представления чанка документа в системе извлечения и сборки.
    
    Attributes:
        chunk_index: Порядковый номер чанка в документе (0-based).
                    Используется для восстановления порядка при сборке.
    """
    
    chunk_index: int | None = None

    @classmethod
    def deserialize(cls, data: LinkerEntity) -> 'Chunk':
        """
        Десериализует Chunk из объекта LinkerEntity.
        
        Базовый класс Chunk не должен использоваться напрямую,
        все конкретные реализации должны переопределить этот метод.
        
        Args:
            data: Объект LinkerEntity для преобразования в Chunk
            
        Raises:
            NotImplementedError: Метод должен быть переопределен в дочерних классах
        """
        if cls == Chunk:
            # Если это прямой вызов на базовом классе Chunk, выбрасываем исключение
            raise NotImplementedError(
                "Базовый класс Chunk не поддерживает десериализацию. "
                "Используйте конкретную реализацию Chunk (например, FixedSizeChunk)."
            )
        
        # Если вызывается из дочернего класса, который не переопределил метод,
        # выбрасываем более конкретную ошибку
        raise NotImplementedError(
            f"Класс {cls.__name__} должен реализовать метод deserialize."
        )