Browse Source

fix(生产装配): 支持可控解析器并路由上传输入

ProductionRuntimeDependencies 可注入 outbound resolver,便于本地代理和离线测试控制 DNS。execution_id=0 的上传输入读取改用 runtime 数据源,与 SqlUploadedTopicGateway 的写入位置保持一致。
SamLee 20 hours ago
parent
commit
dac62dae9b
1 changed files with 13 additions and 6 deletions
  1. 13 6
      script_build_host/src/script_build_host/production.py

+ 13 - 6
script_build_host/src/script_build_host/production.py

@@ -71,6 +71,7 @@ class ProductionRuntimeDependencies:
     orchestration_config: Any = None
     event_sink: Any = None
     http_transport: httpx.AsyncBaseTransport | None = None
+    outbound_resolver: Any = None
     trace_store_verifier: DurableTraceStoreVerifier | None = None
 
 
@@ -166,11 +167,14 @@ def compose_production_host(
             listen_port=settings.read_database_tunnel_port,
         )
     database = create_database_sessions(settings)
-    outbound_policy = OutboundPolicy(
-        allowed_hosts=frozenset(settings.outbound_allowed_hosts),
-        allowed_ports=frozenset(settings.outbound_allowed_ports),
-        allowed_http_hosts=frozenset(settings.outbound_allowed_http_hosts),
-    )
+    outbound_options: dict[str, Any] = {
+        "allowed_hosts": frozenset(settings.outbound_allowed_hosts),
+        "allowed_ports": frozenset(settings.outbound_allowed_ports),
+        "allowed_http_hosts": frozenset(settings.outbound_allowed_http_hosts),
+    }
+    if runtime.outbound_resolver is not None:
+        outbound_options["resolver"] = runtime.outbound_resolver
+    outbound_policy = OutboundPolicy(**outbound_options)
     http_client = httpx.AsyncClient(
         transport=runtime.http_transport,
         trust_env=False,
@@ -257,7 +261,10 @@ def compose_production_host(
     publications = SqlAlchemyPublicationRepository(database.write)
     final_publications = SqlAlchemyPublicationRepository(database.final)
     legacy_state = SqlAlchemyLegacyBuildStateRepository(database.write)
-    legacy_input = LegacySqlAlchemyInputReader(database.read)
+    legacy_input = LegacySqlAlchemyInputReader(
+        database.read,
+        uploaded_sessions=database.write,
+    )
     input_service = ScriptInputSnapshotService(
         legacy_input=legacy_input,
         persona_source=FilePersonaSource(