From 2d26c3fac66e6c7d3a752b34ec15311173c2ef8a Mon Sep 17 00:00:00 2001 From: ZiWei <131428629+ZiWei09@users.noreply.github.com> Date: Fri, 17 Oct 2025 02:23:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=B6=E7=9A=84=E7=88=B6=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在BaseROS2DeviceNode中,移除资源前添加对父资源是否为None的检查,避免空指针异常 同时更新Bottle和BottleCarrier类以支持**kwargs参数 修正测试文件中Liquid_feeding_beaker的大小写拼写错误 --- test/experiments/reaction_station_bioyond.json | 4 ++-- unilabos/resources/itemized_carrier.py | 2 ++ unilabos/ros/nodes/base_device_node.py | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/experiments/reaction_station_bioyond.json b/test/experiments/reaction_station_bioyond.json index 72d8eb68..013855ed 100644 --- a/test/experiments/reaction_station_bioyond.json +++ b/test/experiments/reaction_station_bioyond.json @@ -19,8 +19,8 @@ "Solid_feeding_vials": "3a160877-87e7-7699-7bc6-ec72b05eb5e6", "Liquid_feeding_vials(non-titration)": "3a167d99-6158-c6f0-15b5-eb030f7d8e47", "Liquid_feeding_solvents": "3a160824-0665-01ed-285a-51ef817a9046", - "Liquid_feeding(titration)": "3a160824-0665-01ed-285a-51ef817a9046", - "Liquid_feeding_beaker": "3a16087e-124f-8ddb-8ec1-c2dff09ca784", + "Liquid_feeding(titration)": "3a16082a-96ac-0449-446a-4ed39f3365b6", + "liquid_feeding_beaker": "3a16087e-124f-8ddb-8ec1-c2dff09ca784", "Drip_back": "3a162cf9-6aac-565a-ddd7-682ba1796a4a" }, "material_type_mappings": { diff --git a/unilabos/resources/itemized_carrier.py b/unilabos/resources/itemized_carrier.py index 17f63cf4..44074b53 100644 --- a/unilabos/resources/itemized_carrier.py +++ b/unilabos/resources/itemized_carrier.py @@ -32,6 +32,7 @@ class Bottle(Well): barcode: Optional[str] = "", category: str = "container", model: Optional[str] = None, + **kwargs, ): super().__init__( name=name, @@ -427,6 +428,7 @@ class BottleCarrier(ItemizedCarrier): sites: Optional[Dict[Union[int, str], ResourceHolder]] = None, category: str = "bottle_carrier", model: Optional[str] = None, + **kwargs, ): super().__init__( name=name, diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 5900acac..7a311881 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -582,6 +582,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): - update: 更新现有资源 - remove: 从资源树中移除资源 """ + from pylabrobot.resources import Resource as ResourcePLR try: data = json.loads(req.command) results = [] @@ -672,7 +673,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): if callable(func): func(found_plr_resources) for plr_resource in found_plr_resources: - plr_resource.parent.unassign_child_resource(plr_resource) + if plr_resource.parent is not None: + plr_resource.parent.unassign_child_resource(plr_resource) self.resource_tracker.remove_resource(plr_resource) self.lab_logger().info(f"移除物料 {plr_resource} 及其子节点") for res in other_plr_resources: