"""生产 finder:登录一次,按合同号搜返利中心。Callable[[str], bool]。""" from __future__ import annotations import os from rebate_flow_steps import ( DEFAULT_URL, RebateFlowContext, enter_purchase_agreement, login_rebate_center, open_rebate_center, search_contract, ) class RebateFinder: def __init__(self, browser, ctx: RebateFlowContext | None = None, **kwargs): self._browser = browser self._ctx = ctx or RebateFlowContext( rebate_url=kwargs["rebate_url"], username=kwargs["username"], password=kwargs["password"], ) self._ready = False def __call__(self, contract_no: str) -> bool: self._ensure_session() return search_contract(self._browser, contract_no) def _ensure_session(self) -> None: if self._ready: return open_rebate_center(self._browser, self._ctx) login_rebate_center(self._browser, self._ctx) enter_purchase_agreement(self._browser) self._ready = True def context_from_env() -> RebateFlowContext: return RebateFlowContext( rebate_url=(os.getenv("REBATE_URL") or DEFAULT_URL).strip(), username=(os.getenv("REBATE_USERNAME") or "").strip(), password=os.getenv("REBATE_PASSWORD") or "", ) def production_finder() -> RebateFinder: from apa_browser_adapter import ApaBrowserAdapter ctx = context_from_env() browser = ApaBrowserAdapter(url=ctx.rebate_url, flow="REBATE_FIND") return RebateFinder(browser, ctx)