|
2 | 2 | """ |
3 | 3 | Enhance behaviors.xml with usage information from Objectives. |
4 | 4 |
|
5 | | -This script reads behaviors.xml (from REST API) and adds <UsedIn> elements |
6 | | -showing which Objectives use each behavior. |
| 5 | +This script reads behaviors.xml (from REST API) and adds Metadata fields |
| 6 | +with used_in information showing which Objectives use each behavior. |
7 | 7 |
|
8 | 8 | Run this script in moveit_pro_example_ws workspace. |
9 | 9 | """ |
10 | 10 |
|
11 | 11 | import argparse |
| 12 | +import json |
12 | 13 | import os |
13 | 14 | import sys |
14 | 15 | from pathlib import Path |
@@ -328,26 +329,29 @@ def enhance_behaviors_xml( |
328 | 329 | traceback.print_exc() |
329 | 330 | continue |
330 | 331 |
|
331 | | - # Add UsedIn elements to each behavior element |
| 332 | + # Add used_in Metadata to each behavior element |
332 | 333 | print("Adding usage information to XML...", file=sys.stderr) |
333 | 334 | behaviors_with_usage = 0 |
334 | 335 |
|
335 | 336 | for behavior_id, elem in behavior_elements.items(): |
336 | | - # Remove existing UsedIn elements if any |
337 | | - for used_in in elem.findall(".//UsedIn"): |
338 | | - elem.remove(used_in) |
339 | | - |
340 | | - # Add new UsedIn elements |
| 337 | + # Remove existing used_in Metadata if any |
| 338 | + metadata_fields = elem.find(".//MetadataFields") |
| 339 | + if metadata_fields is not None: |
| 340 | + for metadata in metadata_fields.findall(".//Metadata[@used_in]"): |
| 341 | + metadata_fields.remove(metadata) |
| 342 | + else: |
| 343 | + # Create MetadataFields if it doesn't exist |
| 344 | + metadata_fields = ET.SubElement(elem, "MetadataFields") |
| 345 | + |
| 346 | + # Add new used_in Metadata |
341 | 347 | if behavior_id in all_objective_usages: |
342 | 348 | usages = all_objective_usages[behavior_id] |
343 | | - used_in_container = ET.SubElement(elem, "UsedIn") |
344 | | - |
345 | | - for usage in usages: |
346 | | - usage_elem = ET.SubElement(used_in_container, "Usage") |
347 | | - usage_elem.set("config", usage["config"]) |
348 | | - usage_elem.set("objective_id", usage["objective_id"]) |
349 | | - usage_elem.set("objective_file", usage["objective_file"]) |
350 | | - usage_elem.set("usage_type", usage["usage_type"]) |
| 349 | + # Serialize usages to JSON string |
| 350 | + used_in_json = json.dumps(usages, ensure_ascii=False) |
| 351 | + |
| 352 | + # Add Metadata element with used_in attribute |
| 353 | + used_in_metadata = ET.SubElement(metadata_fields, "Metadata") |
| 354 | + used_in_metadata.set("used_in", used_in_json) |
351 | 355 |
|
352 | 356 | behaviors_with_usage += 1 |
353 | 357 |
|
|
0 commit comments