""" Класс для представления чанка документа. """ 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." )