From 70c6685283c32ac67c57c817e063a4bcb9c64f33 Mon Sep 17 00:00:00 2001 From: ZiWei <131428629+ZiWei09@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:27:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B5=84=E6=BA=90=E5=88=86?= =?UTF-8?q?=E9=85=8D=E9=80=BB=E8=BE=91=EF=BC=8C=E9=81=BF=E5=85=8D=E5=9C=A8?= =?UTF-8?q?=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96=E6=97=B6=E5=9B=A0=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=86=B2=E7=AA=81=E5=AF=BC=E8=87=B4=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unilabos/resources/itemized_carrier.py | 5 +++++ unilabos/resources/resource_tracker.py | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/unilabos/resources/itemized_carrier.py b/unilabos/resources/itemized_carrier.py index fe55c39e..6114716a 100644 --- a/unilabos/resources/itemized_carrier.py +++ b/unilabos/resources/itemized_carrier.py @@ -179,6 +179,11 @@ class ItemizedCarrier(ResourcePLR): idx = i break + if idx is None: + # 反序列化时无法匹配 site(名称或坐标均不符),退回父类默认分配,不更新 site 跟踪 + super().assign_child_resource(resource, location=location, reassign=reassign) + return + if not reassign and self.sites[idx] is not None: raise ValueError(f"a site with index {idx} already exists") location = list(self.child_locations.values())[idx] diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index 14b2c221..ecf85303 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -611,9 +611,10 @@ class ResourceTreeSet(object): } if has_model: d["model"] = res.config.get("model", None) - # 防止 Deck 子类在 __init__ 中调用 setup() 预分配子资源, - # 与 PLR deserialize 从 children 列表再次分配同名资源产生命名冲突 - if "setup" in d: + # 仅当 PLR dict 中含有子节点时才禁用 setup(), + # 防止 setup() 预分配子资源后 PLR deserialize 再次分配同名资源产生命名冲突。 + # 若 children 为空,则保留 setup=True,依赖 setup() 来初始化仓库。 + if "setup" in d and d.get("children"): d["setup"] = False return d