muryshev's picture
update
86c402d
raw
history blame
2.16 kB
"""
Класс для представления чанка документа.
"""
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."
)