feat: 服务层配置接线——email/push/rate_limit/AI凭据/行为开关/映射表/种子键
Task 9: 服务层对全局 settings 的业务引用清零,每个 DEFAULT_CONFIG 组 都有真实消费方。resolve_*_settings(email/push/ai)以空槽回退 env (平台默认层);contact 行为开关/种子白名单/国名扩表/限流上限经 manager 的 runtime.config 接线。收口: lead_push session_factory 必填、 config.py 死代码清理、PromptProvider frozen、no_contact 视图直取、 AIService wall 参数定型 CompiledWall。403 测试全绿(389+14)。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -33,15 +33,16 @@ def _setup(async_db, monkeypatch, ai, lead_succeeds=True):
|
||||
sent = []
|
||||
|
||||
async def fake_lead(customer_profile, contact_info, reasoning,
|
||||
conversation_messages, intent_level="", cc_info=None):
|
||||
conversation_messages, intent_level="", cc_info=None,
|
||||
config_data=None):
|
||||
sent.append(("lead", dict(contact_info)))
|
||||
return lead_succeeds
|
||||
|
||||
async def fake_nudge(contact_info, cc_info=None):
|
||||
async def fake_nudge(contact_info, cc_info=None, config_data=None):
|
||||
sent.append(("returning", dict(contact_info)))
|
||||
return lead_succeeds
|
||||
|
||||
async def fake_fix(contact_info, count=1, cc_info=None):
|
||||
async def fake_fix(contact_info, count=1, cc_info=None, config_data=None):
|
||||
sent.append(("correction", dict(contact_info)))
|
||||
return lead_succeeds
|
||||
|
||||
@@ -51,7 +52,8 @@ def _setup(async_db, monkeypatch, ai, lead_succeeds=True):
|
||||
|
||||
fired = []
|
||||
monkeypatch.setattr(lead_push_service, "fire_pending_pushes",
|
||||
lambda logs, session_factory=None: fired.extend(logs))
|
||||
lambda logs, session_factory=None, config_data=None:
|
||||
fired.extend(logs))
|
||||
monkeypatch.setattr(lead_push_service.settings, "PUSH_ENABLED", True)
|
||||
|
||||
async def run():
|
||||
@@ -160,14 +162,16 @@ def test_push_disabled_writes_nothing(async_db, monkeypatch):
|
||||
sent = []
|
||||
|
||||
async def fake_lead(customer_profile, contact_info, reasoning,
|
||||
conversation_messages, intent_level="", cc_info=None):
|
||||
conversation_messages, intent_level="", cc_info=None,
|
||||
config_data=None):
|
||||
sent.append("lead")
|
||||
return True
|
||||
|
||||
monkeypatch.setattr(email_service, "send_lead_email", fake_lead)
|
||||
fired = []
|
||||
monkeypatch.setattr(lead_push_service, "fire_pending_pushes",
|
||||
lambda logs, session_factory=None: fired.extend(logs))
|
||||
lambda logs, session_factory=None, config_data=None:
|
||||
fired.extend(logs))
|
||||
|
||||
async def run():
|
||||
async with async_db() as db:
|
||||
@@ -186,7 +190,7 @@ def test_fire_end_to_end_single_loop(async_db, monkeypatch):
|
||||
"""真 fire + 假 _run_push: 同一事件循环内 stream 完成后任务确实被派发执行。"""
|
||||
pushed = []
|
||||
|
||||
async def fake_run(log_id, payload, session_factory=None):
|
||||
async def fake_run(log_id, payload, session_factory=None, config_data=None):
|
||||
pushed.append(log_id)
|
||||
|
||||
monkeypatch.setattr(lead_push_service, "_run_push", fake_run)
|
||||
@@ -195,7 +199,8 @@ def test_fire_end_to_end_single_loop(async_db, monkeypatch):
|
||||
sent = []
|
||||
|
||||
async def fake_lead(customer_profile, contact_info, reasoning,
|
||||
conversation_messages, intent_level="", cc_info=None):
|
||||
conversation_messages, intent_level="", cc_info=None,
|
||||
config_data=None):
|
||||
sent.append("lead")
|
||||
return True
|
||||
|
||||
@@ -234,11 +239,12 @@ def test_fire_happens_only_after_commit(async_db, monkeypatch):
|
||||
fired = []
|
||||
|
||||
async def fake_lead(customer_profile, contact_info, reasoning,
|
||||
conversation_messages, intent_level="", cc_info=None):
|
||||
conversation_messages, intent_level="", cc_info=None,
|
||||
config_data=None):
|
||||
sent.append("lead")
|
||||
return True
|
||||
|
||||
async def fake_run(log_id, payload, session_factory=None):
|
||||
async def fake_run(log_id, payload, session_factory=None, config_data=None):
|
||||
async with async_db() as db:
|
||||
try:
|
||||
row = (await db.execute(
|
||||
@@ -253,9 +259,9 @@ def test_fire_happens_only_after_commit(async_db, monkeypatch):
|
||||
|
||||
real_fire = lead_push_service.fire_pending_pushes
|
||||
|
||||
def recording_fire(logs, session_factory=None):
|
||||
def recording_fire(logs, session_factory=None, config_data=None):
|
||||
fired.append(True)
|
||||
real_fire(logs, session_factory)
|
||||
real_fire(logs, session_factory, config_data)
|
||||
|
||||
monkeypatch.setattr(email_service, "send_lead_email", fake_lead)
|
||||
monkeypatch.setattr(lead_push_service, "_run_push", fake_run)
|
||||
|
||||
Reference in New Issue
Block a user