Правки финального ревью: умолчания subject'ов не названы фактическими
M-3: докстринги worker.py не называют умолчание фактическим subject'ом. T7.1: выровнены переносы докстринга core/nats.py. M-5: CLAUDE.md помечает files.tabular_parsed как умолчание. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
0ef4a8a6bc
commit
c10f927730
@ -9,7 +9,7 @@
|
||||
распознанный документ), склеить и сохранить сырой ответ в S3 `raw/{job_id}.json` (в БД не регистрируется), очистить
|
||||
горячую папку (только при `SCAN_CLEANUP=true`), нормализовать в `../docs/contracts/recognition-result.schema.json`
|
||||
(`statementDocument` v1.2: по одному документу на таблицу `table_structure[i]`), опубликовать `files.tabular_parsed`
|
||||
(`done` / `needs_check` / `error`). Таймаут → ошибка `TIMEOUT` по `min(reply_deadline, старт + SCAN_TIMEOUT_SECONDS=1200)`,
|
||||
(по умолчанию; задаётся `OPENBAO__NATS__NATS_*_SUBJECT`) (`done` / `needs_check` / `error`). Таймаут → ошибка `TIMEOUT` по `min(reply_deadline, старт + SCAN_TIMEOUT_SECONDS=1200)`,
|
||||
старт — запись файла во «Входящие». **Нет доступа к БД.**
|
||||
|
||||
## Правила
|
||||
|
||||
@ -9,10 +9,9 @@
|
||||
После переподключения nats-py сам отправляет SUB для всех подписок с прежней queue group — подписку повторно
|
||||
оформлять не нужно.
|
||||
- `subscribe_requests(cb)` — подписка на subject запроса `image` из настроек
|
||||
(`OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT`,
|
||||
по умолчанию `files.img_uploaded`) в queue group `scan-gateway`: из нескольких
|
||||
инстансов сообщение получает ровно один. `cb` получает исходное сообщение nats-py (`msg.data`, `msg.headers`);
|
||||
исключения `cb` логируются, подписка живёт.
|
||||
(`OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT`, по умолчанию `files.img_uploaded`) в queue group `scan-gateway`:
|
||||
из нескольких инстансов сообщение получает ровно один. `cb` получает исходное сообщение nats-py
|
||||
(`msg.data`, `msg.headers`); исключения `cb` логируются, подписка живёт.
|
||||
- `publish(subject, payload, msg_id)` — публикация с заголовком `Nats-Msg-Id` и `flush` (подтверждение сервером) с
|
||||
повторами на временных ошибках (первая попытка + до `PUBLISH_RETRIES` повторов); исчерпаны — `PublishFailed`.
|
||||
Воркер логирует error и идёт дальше: ядро закроет задание по `reply_deadline` (D-7).
|
||||
|
||||
@ -107,7 +107,7 @@ class ObjectStorage(Protocol):
|
||||
|
||||
|
||||
class ResultPublisher(Protocol):
|
||||
"""Часть `NatsGateway`: публикация конверта в `files.tabular_parsed` с `Nats-Msg-Id` и повторами."""
|
||||
"""Часть `NatsGateway`: публикация конверта в subject ответа с `Nats-Msg-Id` и повторами."""
|
||||
|
||||
async def publish_result(self, message: RecognitionResultMessage, attempt: int) -> None: ...
|
||||
|
||||
@ -181,7 +181,7 @@ class _WaitResult:
|
||||
|
||||
|
||||
class Worker:
|
||||
"""Обработка запросов `files.img_uploaded` (см. докстринг модуля).
|
||||
"""Обработка запросов на subject запроса `image` (см. докстринг модуля).
|
||||
|
||||
Зависимости внедряются: `storage` (S3), `publisher` (NATS), `hotfolder`, `normalizer`; `clock` — часы UTC для
|
||||
дедлайна (R-20), `sleep` — пауза между опросами (подмены для тестов).
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user