def _layerGroups(to_publish): def _addGroup(layer_tree): layers = [] children = layer_tree.children() children.reverse() # GS and QGIS have opposite ordering for child in children: if isinstance(child, QgsLayerTreeLayer): in_name, out_name = layerUtils.getLayerTitleAndName(child.layer()) if in_name in to_publish: layers.append(out_name) elif isinstance(child, QgsLayerTreeGroup): subgroup = _addGroup(child) if subgroup is not None: layers.append(subgroup) if layers: title, name = layerUtils.getLayerTitleAndName(layer_tree) return {"name": name, "title": layerTreeGroup.customProperty("wmsTitle", title), "abstract": layerTreeGroup.customProperty("wmsAbstract", title), "layers": layers} else: return None groups = [] root = QgsProject().instance().layerTreeRoot() for element in root.children(): if isinstance(element, QgsLayerTreeGroup): group = _addGroup(element) if group is not None: groups.append(group) return groups