|
|
|
|
@ -32,10 +32,30 @@ def _conductor_uuids(item):
|
|
|
|
|
return [str(value).strip() for value in values if str(value).strip()]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _normalize_wire_entry(item, index):
|
|
|
|
|
def _device_display_map(payload):
|
|
|
|
|
labels = {}
|
|
|
|
|
for item in payload.get("devices", []) or []:
|
|
|
|
|
if not isinstance(item, dict):
|
|
|
|
|
continue
|
|
|
|
|
element_uuid = _string_value(item, "element_uuid")
|
|
|
|
|
display_tag = _string_value(item, "display_tag")
|
|
|
|
|
if element_uuid and display_tag:
|
|
|
|
|
labels[element_uuid] = display_tag
|
|
|
|
|
return labels
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _endpoint_text(device_label, terminal_display, terminal_uuid):
|
|
|
|
|
terminal = terminal_display or terminal_uuid
|
|
|
|
|
if device_label and terminal:
|
|
|
|
|
return "{0}:{1}".format(device_label, terminal)
|
|
|
|
|
return device_label or terminal or "未命名端子"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _normalize_wire_entry(item, index, device_labels=None):
|
|
|
|
|
if not isinstance(item, dict):
|
|
|
|
|
raise WiringImportError("Wire entry #{0} must be an object.".format(index))
|
|
|
|
|
|
|
|
|
|
device_labels = device_labels or {}
|
|
|
|
|
wire_uuid = (
|
|
|
|
|
_string_value(item, "wire_id")
|
|
|
|
|
or _string_value(item, "wire_uuid")
|
|
|
|
|
@ -55,6 +75,16 @@ def _normalize_wire_entry(item, index):
|
|
|
|
|
|
|
|
|
|
wire_mark = _string_value(item, "wire_mark")
|
|
|
|
|
wire_label = _string_value(item, "wire_label") or wire_mark or wire_uuid
|
|
|
|
|
start_element_uuid = _string_value(item, "start_element_uuid")
|
|
|
|
|
end_element_uuid = _string_value(item, "end_element_uuid")
|
|
|
|
|
start_terminal_display = _string_value(item, "start_terminal_display")
|
|
|
|
|
end_terminal_display = _string_value(item, "end_terminal_display")
|
|
|
|
|
start_device_label = device_labels.get(start_element_uuid, "")
|
|
|
|
|
end_device_label = device_labels.get(end_element_uuid, "")
|
|
|
|
|
endpoint_label = "{0} -> {1}".format(
|
|
|
|
|
_endpoint_text(start_device_label, start_terminal_display, start_terminal_uuid),
|
|
|
|
|
_endpoint_text(end_device_label, end_terminal_display, end_terminal_uuid),
|
|
|
|
|
)
|
|
|
|
|
return {
|
|
|
|
|
"wire_uuid": wire_uuid,
|
|
|
|
|
"wire_label": wire_label,
|
|
|
|
|
@ -62,14 +92,17 @@ def _normalize_wire_entry(item, index):
|
|
|
|
|
"group_uuid": _string_value(item, "group_uuid"),
|
|
|
|
|
"wire_mark": wire_mark,
|
|
|
|
|
"wire_mark_is_manual": _bool_value(item, "wire_mark_is_manual"),
|
|
|
|
|
"start_element_uuid": _string_value(item, "start_element_uuid"),
|
|
|
|
|
"start_element_uuid": start_element_uuid,
|
|
|
|
|
"start_terminal_uuid": start_terminal_uuid,
|
|
|
|
|
"start_instance_id": _string_value(item, "start_instance_id"),
|
|
|
|
|
"start_terminal_display": _string_value(item, "start_terminal_display"),
|
|
|
|
|
"end_element_uuid": _string_value(item, "end_element_uuid"),
|
|
|
|
|
"start_terminal_display": start_terminal_display,
|
|
|
|
|
"start_device_label": start_device_label,
|
|
|
|
|
"end_element_uuid": end_element_uuid,
|
|
|
|
|
"end_terminal_uuid": end_terminal_uuid,
|
|
|
|
|
"end_instance_id": _string_value(item, "end_instance_id"),
|
|
|
|
|
"end_terminal_display": _string_value(item, "end_terminal_display"),
|
|
|
|
|
"end_terminal_display": end_terminal_display,
|
|
|
|
|
"end_device_label": end_device_label,
|
|
|
|
|
"endpoint_label": endpoint_label,
|
|
|
|
|
"conductor_uuids": _conductor_uuids(item),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -86,9 +119,7 @@ def _unique_object_name(doc, base_name):
|
|
|
|
|
|
|
|
|
|
def _task_label(entry):
|
|
|
|
|
mark = entry["wire_mark"] or entry["wire_label"] or entry["wire_uuid"]
|
|
|
|
|
start = entry["start_terminal_display"] or entry["start_terminal_uuid"]
|
|
|
|
|
end = entry["end_terminal_display"] or entry["end_terminal_uuid"]
|
|
|
|
|
return "{0} {1} -> {2}".format(mark, start, end)
|
|
|
|
|
return "{0} {1}".format(mark, entry["endpoint_label"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _find_task_by_wire_uuid(task_group, wire_uuid):
|
|
|
|
|
@ -116,6 +147,9 @@ def _set_task_extra_properties(task, entry):
|
|
|
|
|
_ensure_string_property(task, "QetEndElementUuid", entry["end_element_uuid"])
|
|
|
|
|
_ensure_string_property(task, "QetStartTerminalDisplay", entry["start_terminal_display"])
|
|
|
|
|
_ensure_string_property(task, "QetEndTerminalDisplay", entry["end_terminal_display"])
|
|
|
|
|
_ensure_string_property(task, "QetStartDeviceLabel", entry["start_device_label"])
|
|
|
|
|
_ensure_string_property(task, "QetEndDeviceLabel", entry["end_device_label"])
|
|
|
|
|
_ensure_string_property(task, "QetEndpointLabel", entry["endpoint_label"])
|
|
|
|
|
_ensure_string_property(
|
|
|
|
|
task,
|
|
|
|
|
"QetConductorUuidsJson",
|
|
|
|
|
@ -191,9 +225,10 @@ def import_wire_tasks_from_payload(payload, doc=None):
|
|
|
|
|
"warnings": [],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
device_labels = _device_display_map(payload)
|
|
|
|
|
for index, item in enumerate(wires):
|
|
|
|
|
try:
|
|
|
|
|
entry = _normalize_wire_entry(item, index)
|
|
|
|
|
entry = _normalize_wire_entry(item, index, device_labels=device_labels)
|
|
|
|
|
except WiringImportError as exc:
|
|
|
|
|
report["skipped_invalid"] += 1
|
|
|
|
|
report["warnings"].append(str(exc))
|
|
|
|
|
|