"""Seed a slice of WhatsApp friends + one conversation's messages into smoke.db.""" import asyncio import time from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine from app.db import models # noqa: F401 from app.scraper.wechat import scrape_departments from app.scraper.whatsapp import scrape_whatsapp_friends, scrape_whatsapp_messages from app.storage.repos import upsert_customer, upsert_messages from scripts.smoke_wechat import _push_settings_into_environ, build_client_from_env # A known active WhatsApp conversation (Pasha-hesucar <-> Алекс). UID = "15638182659@s.whatsapp.net" FRIEND_UID = "375292581799@s.whatsapp.net" async def _root_department_id(client) -> str | None: async for d in scrape_departments(client): if not d.get("parent_id"): return d.get("dept_id") return None async def main() -> None: _push_settings_into_environ() client = build_client_from_env() engine = create_async_engine("sqlite+aiosqlite:///./smoke.db") sm = async_sessionmaker(engine, expire_on_commit=False) root_dept = await _root_department_id(client) friends = [] async for rec in scrape_whatsapp_friends( client, department_id=root_dept or "", page_size=10 ): friends.append(rec) if len(friends) >= 10: break now = int(time.time() * 1000) msgs = [] async for m in scrape_whatsapp_messages(client, UID, FRIEND_UID, now - 60 * 86_400_000, now): msgs.append(m) if len(msgs) >= 40: break async with sm() as session: for rec in friends: await upsert_customer(session, rec) nmsg = await upsert_messages(session, msgs) await session.commit() print(f"upserted {len(friends)} whatsapp friends, {nmsg} whatsapp messages") await client.aclose() await engine.dispose() if __name__ == "__main__": asyncio.run(main())