统一实时标定身份解析并规范行尾
控制器与两个对话框共用 CalibrationService.read_identity,解析失败与缺 SN 分开上报; 本轮改动文件统一 LF,SN 必填回归已锁定。 定向 73 项、校准 UI 8 项与 lint 通过;未跑全量门禁。
This commit is contained in:
@@ -742,6 +742,31 @@ def test_analysis_setup_reopens_the_prompt_after_the_first_pass(
|
||||
assert window.replay_ctl.available_result() is not None
|
||||
|
||||
|
||||
def _coefficient_document(directory: Path, *, sensor_type: str, sn: str) -> Path:
|
||||
"""A v2 coefficient document the SDK's own parser accepts (a real export shape).
|
||||
|
||||
The analysis prompt now reads a Finger file's identity through
|
||||
``CalibrationService`` — the strict parser — so a ``meta`` block in arbitrary
|
||||
JSON is not an identity.
|
||||
"""
|
||||
from orisys_app_shared.force.calibration_io import (
|
||||
CalSample,
|
||||
CalSessionStore,
|
||||
build_export_model,
|
||||
)
|
||||
|
||||
store = CalSessionStore()
|
||||
store.aggregate("fn", CalSample(weight_n=0.0, raw_mean=0.0, n=10))
|
||||
store.aggregate("fn", CalSample(weight_n=5.0, raw_mean=500.0, n=10))
|
||||
model = build_export_model({key: store.channel(key) for key in ("fn", "fx", "fy")})
|
||||
document = model.to_dict()
|
||||
document["identity"] = {"sensor_type": sensor_type, "sn": sn}
|
||||
document["pipeline"] = {"config_ref": "D:/lab/sensor.json"}
|
||||
path = directory / f"{sensor_type}-{sn}.json"
|
||||
path.write_text(json.dumps(document), encoding="utf-8")
|
||||
return path
|
||||
|
||||
|
||||
def test_a_finger_calibration_file_must_name_the_same_device(qt_app, tmp_path):
|
||||
"""A browsed Finger file is accepted only when the device id matches its SN."""
|
||||
import cv2
|
||||
@@ -763,11 +788,7 @@ def test_a_finger_calibration_file_must_name_the_same_device(qt_app, tmp_path):
|
||||
None,
|
||||
)
|
||||
assert finger is not None, "the catalog has no startable Finger profile"
|
||||
path = tmp_path / "DD02-14.json"
|
||||
path.write_text(
|
||||
json.dumps({"meta": {"sensor_type": "finger", "sn": "DD02-14"}}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
path = _coefficient_document(tmp_path, sensor_type="finger", sn="DD02-14")
|
||||
dialog = VideoAnalysisDialog(video=clip, facts=facts, catalog=catalog)
|
||||
try:
|
||||
assert dialog.select_profile(finger.ref)
|
||||
|
||||
Reference in New Issue
Block a user