AutoRpa/rpa_rebate/rebate_finder.py

60 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 生产 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
# 搜这个合同号。表里出现该号才是 True,输入框回显不算。
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
# 从 REBATE_URL / 账号环境变量拼页面会话。没配地址时用默认内网地址。
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)