SmbHotFolder: UNC-корень \\host\SMB_PATH (или полный UNC в SMB_PATH), put — `.<name>.part` + smbclient.replace, poll — open_file(rb), ENOENT (в т.ч. нет каталога) -> None, healthy — listdir корня без исключений. create_hotfolder(settings): local -> LocalHotFolder, smb -> SmbHotFolder с ленивым импортом модуля (R-6); отсутствие импорта src.gateway.smb в режиме local проверяется в отдельном интерпретаторе. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
31 lines
1.3 KiB
Python
31 lines
1.3 KiB
Python
"""Горячие папки ИС Сканирование: фабрика по настройкам (R-6).
|
||
|
||
`SCAN_HOTFOLDER_MODE=local` — `LocalHotFolder` (модуль `src.gateway.smb` не импортируется), `smb` — `SmbHotFolder`
|
||
из `OPENBAO.SMB` (импорт модуля — только здесь, лениво).
|
||
"""
|
||
|
||
from src.core.config import Settings
|
||
from src.gateway.hotfolder import HotFolder, LocalHotFolder
|
||
|
||
__all__ = ["create_hotfolder"]
|
||
|
||
|
||
def create_hotfolder(settings: Settings) -> HotFolder:
|
||
"""Горячая папка для режима `SCAN_HOTFOLDER_MODE`. К файловой системе и шаре не обращается."""
|
||
mode = settings.SCAN_HOTFOLDER_MODE
|
||
if mode == "local":
|
||
return LocalHotFolder(settings.SCAN_HOTFOLDER_PATH, settings.SCAN_INPUT_DIR, settings.SCAN_OUTPUT_DIR)
|
||
if mode == "smb":
|
||
from src.gateway.smb import SmbHotFolder # noqa: PLC0415 — ленивый импорт: в режиме local smb не нужен (R-6)
|
||
|
||
smb = settings.OPENBAO.SMB
|
||
return SmbHotFolder(
|
||
smb.SMB_HOST,
|
||
smb.SMB_PATH,
|
||
settings.SCAN_INPUT_DIR,
|
||
settings.SCAN_OUTPUT_DIR,
|
||
login=smb.SMB_LOGIN,
|
||
password=smb.SMB_PASSWORD,
|
||
)
|
||
raise ValueError(f"неизвестный SCAN_HOTFOLDER_MODE: {mode!r}")
|