diff --git a/mxcubecore/BaseHardwareObjects.py b/mxcubecore/BaseHardwareObjects.py index 0b9ec7d2f1..36ee921a9d 100644 --- a/mxcubecore/BaseHardwareObjects.py +++ b/mxcubecore/BaseHardwareObjects.py @@ -464,39 +464,24 @@ def get_objects( yield obj def get_object_by_role(self, role: str) -> Union["HardwareObject", None]: - """Get hardware object by role. + """Get hardware object by role. - Args: - role (str): Role. - - Returns: - Union[HardwareObject, None]: Hardware object. - """ - object = None - obj: Self = self - objects = [] - role = str(role).lower() + Args: + role (str): Role. - while True: - if role in obj._objects_by_role: - return obj._objects_by_role[role] - - for object in obj: - objects.append(object) + Returns: + Union[HardwareObject, None]: Hardware object. + """ + role = str(role).lower() + objects = [self] - try: - obj = objects.pop() - except IndexError: - break - else: - object = obj.get_object_by_role(role) - if object is not None: - return object + for curr in objects: + result = curr._objects_by_role.get(role) + if result is None: + objects.extend(obj for obj in curr if obj) - if len(objects) > 0: - obj = objects.pop() - else: - break + else : + return result def objects_names(self) -> List[Union[str, None]]: """Return hardware object names.