53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""生产 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)
|