From 7083d5c4574861f7dd96717c2cbdb0d3aa794e83 Mon Sep 17 00:00:00 2001 From: ThearchyHelios Date: Mon, 5 Oct 2026 18:45:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A5=BD=E6=95=B0=E6=8D=AE=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=B5=8B=E8=AF=95=E7=9A=84=E5=81=B6=E5=8F=91=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=EF=BC=9A=E5=87=A0=E6=9D=A1=E6=96=AD=E8=A8=80=E9=9D=A0?= =?UTF-8?q?=E3=80=8C=E7=AC=AC=E4=BA=8C=E7=89=88=E7=9A=84=20100=20=E4=B8=8D?= =?UTF-8?q?=E5=9C=A8=E6=8A=A5=E9=94=99=E5=8E=9F=E6=96=87=E9=87=8C=E3=80=8D?= =?UTF-8?q?=E8=AF=81=E6=98=8E=E6=B2=A1=E6=94=B9=E7=94=A8=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=8C=E5=8E=9F=E6=96=87=E9=87=8C=E5=8D=B4?= =?UTF-8?q?=E5=B8=A6=E7=9D=80=E5=8D=81=E5=85=AD=E8=BF=9B=E5=88=B6=E7=9A=84?= =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E6=BA=90=E5=90=8D=EF=BC=8C=E7=BA=A6=E4=BA=94?= =?UTF-8?q?=E7=99=BE=E4=B8=AA=E5=90=8D=E5=AD=97=E5=B0=B1=E6=9C=89=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=90=AB=E3=80=8C100=E3=80=8D=EF=BC=8C=E6=96=AD?= =?UTF-8?q?=E8=A8=80=E6=97=A0=E7=BC=98=E6=97=A0=E6=95=85=E5=8F=98=E7=BA=A2?= =?UTF-8?q?=EF=BC=88=E5=92=8C=E5=B9=B6=E8=A1=8C=E3=80=81=E6=97=B6=E5=BA=8F?= =?UTF-8?q?=E3=80=81=E6=96=87=E4=BB=B6=E5=8F=A5=E6=9F=84=E6=97=A0=E5=85=B3?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=E6=BA=90=E5=90=8D=E6=94=B9=E6=88=90=E5=8F=AA?= =?UTF-8?q?=E6=9C=89=E5=AD=97=E6=AF=8D=EF=BC=8C=E5=8F=A6=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E6=9D=A1=E5=AE=88=E4=BD=8F=E8=BF=99=E4=B8=AA=E7=BA=A6=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/tests/test_run_data_versions.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/tests/test_run_data_versions.py b/backend/tests/test_run_data_versions.py index 28a06c8c..3b035f2a 100644 --- a/backend/tests/test_run_data_versions.py +++ b/backend/tests/test_run_data_versions.py @@ -91,8 +91,24 @@ V1 = {"明细": [["区域", "数量"], ["分区甲", 1], ["分区乙", 2]]} V2 = {"明细": [["区域", "数量"], ["分区甲", 60], ["分区乙", 40]], "新增": [["时段", "客流"], ["上午", 7]]} +#: 十六进制里的数字换成字母:名字里不带数字 +_NO_DIGITS = str.maketrans("0123456789", "ghijklmnop") + + def uniq(prefix: str = "dv") -> str: - return f"{prefix}_{uuid.uuid4().hex[:10]}" + """一个不会重复的源名,只有字母。 + + 报错原文里有源名(「数据源「dv_…」」),不少断言靠「第二版的 100 不在原文里」证明没有改用当前版本。十六进制名字 + 每 500 个左右就有一个带着「100」(dv_3a100bc2ef),那几条断言就会无缘无故地失败——这正是 + test_snapshot_file_deleted_after_tools_were_built 偶尔失败的原因,和并行、时序无关。名字里不带数字,数字的断言 + 才只看得见数据。""" + return f"{prefix}_{uuid.uuid4().hex[:12].translate(_NO_DIGITS)}" + + +def test_source_names_carry_no_digits(): + """守住 uniq 的约定:名字里一个数字都没有,报错原文里出现的数字只能来自数据(见 uniq 的说明)""" + names = {uniq() for _ in range(2000)} + assert len(names) == 2000 and not any(ch.isdigit() for name in names for ch in name.removeprefix("dv_")) async def publish(name: str, sheets: dict[str, list[list]]) -> tuple[str, str]: