You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Создать третий репозиторий-пакет и определить его контракт с хранилищем —
фундамент для переезда общей части (#1416).
Область пакета — только общая часть
tg_messenger — независимый TUI-мессенджер (ставится сам по себе, один
аккаунт). Поэтому в пакет идёт только то, что нужно обоим проектам:
В пакет
Остаётся в фабрике
соединение, сессии
пул многих аккаунтов
модели сообщений, чтение истории, отправка
ротация, лизинг
защита от флуда
сбор постов (collector_*)
подписка на входящие события
Ключевое требование: пакет обязан работать БЕЗ фабрики вообще — один
аккаунт, своё хранилище по умолчанию, никакого AppContainer. Иначе
мессенджер перестанет быть самостоятельным продуктом.
Контракт хранилища
Связь с базой узкая и уже наполовину развязана: src/database/live_accounts.py
— 35 строк, две функции, обе уже принимают db: Any первым аргументом:
Интерфейс получается почти сам собой — надо зафиксировать его явно (Protocol),
а не выводить из Any. Контракт должен допускать две конфигурации:
мессенджер со своим простым хранилищем и фабрика со своей базой.
Состав работ
Каркас репозитория: pyproject.toml, лицензия, CI (по образцу существующих), py.typed, версионирование.
Protocol хранилища: что именно пакету нужно от БД — данные аккаунта,
запись/чтение flood_wait_until, персистентность resolve-backoff.
Минимальный контракт, без протечки схемы фабрики.
Плюс реализация по умолчанию для одиночного мессенджера.
Protocol/тип аккаунта — сейчас src.models.Account; в пакете нужен свой,
чтобы не тянуть модели фабрики.
Решение о версионировании и пиннинге. ⚠️ Прецедент: tg-messenger объявлен
как >=0.1.0, но нет тегов и changelog — фабрика фактически стоит
на editable-чекауте соседнего проекта. Не повторять: точный пин + теги
changelog с первого дня.
Стратегия миграции: как фабрика и мессенджер будут переходить волнами,
не ломаясь на промежуточных состояниях.
Acceptance Criteria
Репозиторий создан, CI зелёный на пустом каркасе.
Protocol хранилища зафиксирован и задокументирован; Any заменён
на явный тип.
Пакет не импортируетsrc.* фабрики — проверяется автоматически.
Версионирование: теги + changelog + точный пин у потребителей.
Задокументирован точный раздел: что в пакете (общая часть), что остаётся
в фабрике (пул, ротация, лизинг, collector_*), что в мессенджере
(TUI, веб-чат, автоответчик).
Определён раздел backends.py: транспортная часть в пакет, пул-специфика
в фабрику.
Пакет работает без фабрики — проверено на конфигурации «один аккаунт,
своё хранилище».
Кода из фабрики в этой задаче не переносится — только каркас
и контракт.
Задача
Создать третий репозиторий-пакет и определить его контракт с хранилищем —
фундамент для переезда общей части (#1416).
Область пакета — только общая часть
tg_messenger— независимый TUI-мессенджер (ставится сам по себе, одинаккаунт). Поэтому в пакет идёт только то, что нужно обоим проектам:
collector_*)Ключевое требование: пакет обязан работать БЕЗ фабрики вообще — один
аккаунт, своё хранилище по умолчанию, никакого
AppContainer. Иначемессенджер перестанет быть самостоятельным продуктом.
Контракт хранилища
Связь с базой узкая и уже наполовину развязана:
src/database/live_accounts.py— 35 строк, две функции, обе уже принимают
db: Anyпервым аргументом:Интерфейс получается почти сам собой — надо зафиксировать его явно (Protocol),
а не выводить из
Any. Контракт должен допускать две конфигурации:мессенджер со своим простым хранилищем и фабрика со своей базой.
Состав работ
pyproject.toml, лицензия, CI (по образцу существующих),py.typed, версионирование.запись/чтение
flood_wait_until, персистентность resolve-backoff.Минимальный контракт, без протечки схемы фабрики.
Плюс реализация по умолчанию для одиночного мессенджера.
src.models.Account; в пакете нужен свой,чтобы не тянуть модели фабрики.
tg-messengerобъявленкак
>=0.1.0, но нет тегов и changelog — фабрика фактически стоитна editable-чекауте соседнего проекта. Не повторять: точный пин + теги
не ломаясь на промежуточных состояниях.
Acceptance Criteria
Anyзаменённа явный тип.
src.*фабрики — проверяется автоматически.в фабрике (пул, ротация, лизинг,
collector_*), что в мессенджере(TUI, веб-чат, автоответчик).
backends.py: транспортная часть в пакет, пул-спецификав фабрику.
своё хранилище».
и контракт.
Файлы (для чтения, не правки)
src/database/live_accounts.py— 35 строк, будущий Protocolsrc/telegram/client_pool.py,src/telegram/account_lease_pool.py—остаются в фабрике, но становятся потребителями пакета
src/telegram/backends.py— требует разделенияsrc/models.py—Accountpyproject.toml,.importlinter— образцы конфигурацииКонтекст
Этап 1.1 эпика #1416.