7834d751d0
client.telemetry_status exists so downstream can reconcile telemetry programmatically, but annotating its return type meant reaching into polygateway.types while the convention here is that the top-level exports are the public API surface. The port itself stays unexported: nobody outside the library implements it.
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
"""包基线冒烟测试:可导入、版本号存在。"""
|
|
|
|
from pathlib import Path
|
|
|
|
import polygateway
|
|
|
|
|
|
def test_package_importable_with_version() -> None:
|
|
import tomllib
|
|
|
|
declared = tomllib.loads(Path("pyproject.toml").read_text())["project"]["version"]
|
|
assert polygateway.__version__ == declared # 单一版本源: 与 pyproject 同步
|
|
|
|
|
|
def test_ocr_public_surface_exported():
|
|
"""M3 OCR 公共 API 面(设计 §3;transport 结果与 Protocol 不出顶层)。"""
|
|
import polygateway
|
|
|
|
for name in (
|
|
"OcrClient",
|
|
"OcrSettings",
|
|
"OcrTextResult",
|
|
"OcrLayoutResult",
|
|
"OcrLayoutElement",
|
|
):
|
|
assert hasattr(polygateway, name), name
|
|
assert name in polygateway.__all__, name
|
|
|
|
|
|
def test_telemetry_schema_sql_exported():
|
|
"""issue #13: manual 档下游需要主动索取"库要求的最小 schema"的顶层入口。
|
|
|
|
同时钉住公共面**只增这一个名字**: `missing_columns_warning` 是 recorder 内部
|
|
共用的文案构造函数,导出它等于多一份永久承诺(库承诺公共面只增不删)。
|
|
"""
|
|
assert "telemetry_schema_sql" in polygateway.__all__
|
|
assert callable(polygateway.telemetry_schema_sql)
|
|
assert "missing_columns_warning" not in polygateway.__all__
|
|
assert not hasattr(polygateway, "missing_columns_warning")
|
|
|
|
|
|
def test_telemetry_status_exported():
|
|
"""issue #15: `client.telemetry_status` 的返回类型必须能从顶层 import。
|
|
|
|
下游对账/告警要给这个快照做类型标注,若只在 `polygateway.types` 里,标注就得
|
|
深入子模块,而本库的约定是「顶层导出即公共 API 面」。`TelemetryStatusProvider`
|
|
则**不**导出: 它是端口,库外无实现者,导出即多一份永久承诺。
|
|
"""
|
|
assert "TelemetryStatus" in polygateway.__all__
|
|
assert polygateway.TelemetryStatus is not None
|
|
assert "TelemetryStatusProvider" not in polygateway.__all__
|