Задача 8: классификация и обработчики — живой прогон, cron, archive change
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
## Purpose
|
||||
|
||||
Скачивание вложений письма в каталог этого письма. Сейчас `mail_archive.py`
|
||||
вызывает `himalaya attachment download --dir`, но правильный флаг в Himalaya —
|
||||
`--downloads-dir`, из-за чего команда падает (exit 2), ошибка молча глотается
|
||||
`except: pass`, и папка `attachments/` всегда пустая. Вложения теряются.
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Вложения сохраняются в каталог письма
|
||||
|
||||
Для каждого письма с вложениями (флаг `has_attachment: true` в frontmatter)
|
||||
вложения MUST быть сохранены в подкаталог `attachments/` каталога письма
|
||||
(`/opt/hermes/email/<folder>/YYYY/MM/<uid>/attachments/`).
|
||||
|
||||
#### Scenario: Письмо с вложением архивировано
|
||||
- **WHEN** `mail_archive.py` заархивировал письмо с `has_attachment: true`
|
||||
- **THEN** файлы вложений лежат в `<msg_dir>/attachments/` и совпадают с вложениями на IMAP-сервере
|
||||
|
||||
### Requirement: Правильный флаг Himalaya
|
||||
|
||||
Скачивание вложений MUST использовать флаг `--downloads-dir` (а не несуществующий
|
||||
`--dir`) команды `himalaya attachment download`, и передавать ему каталог письма.
|
||||
|
||||
#### Scenario: Вызов himalaya с корректным флагом
|
||||
- **WHEN** `get_attachments()` выполняется для письма
|
||||
- **THEN** используется `himalaya attachment download --folder <folder> --downloads-dir <msg_dir>/attachments <uid>`, exit code 0 при успехе
|
||||
|
||||
### Requirement: Учёт отсутствия вложений
|
||||
|
||||
Если письмо не имеет вложений (`has_attachment: false` или команда вернула
|
||||
«нет вложений»), скрипт MUST NOT создавать пустую папку `attachments/` и MUST NOT
|
||||
считать это ошибкой.
|
||||
|
||||
#### Scenario: Письмо без вложений
|
||||
- **WHEN** `mail_archive.py` обрабатывает письмо без вложений
|
||||
- **THEN** каталог `attachments/` не создаётся, ошибка не логируется
|
||||
|
||||
### Requirement: Повторная обработка существующих писем
|
||||
|
||||
Повторный запуск `mail_archive.py` MUST NOT повторно качать уже сохранённые
|
||||
вложения (проверка по наличию каталога/файлов).
|
||||
|
||||
#### Scenario: Повторный запуск
|
||||
- **WHEN** `mail_archive.py` запущен повторно на письме с уже скачанными вложениями
|
||||
- **THEN** вложения не скачиваются повторно (идемпотентность)
|
||||
Reference in New Issue
Block a user