Skip to content

Commit 39d7de4

Browse files
committed
Blender: Streamline XML parsing, free dom object
1 parent 209a4b9 commit 39d7de4

File tree

1 file changed

+24
-46
lines changed

1 file changed

+24
-46
lines changed

src/windows/views/blender_listview.py

+24-46
Original file line numberDiff line numberDiff line change
@@ -363,62 +363,40 @@ def get_animation_details(self):
363363

364364
# Get list of params
365365
animation = {"title": animation_title, "path": xml_path, "service": service, "params": []}
366-
xml_params = xmldoc.getElementsByTagName("param")
367366

368367
# Loop through params
369-
for param in xml_params:
370-
param_item = {}
368+
for param in xmldoc.getElementsByTagName("param"):
369+
# Set up item dict, "default" key is required
370+
param_item = {"default": ""}
371371

372372
# Get details of param
373-
if param.attributes["title"]:
374-
param_item["title"] = param.attributes["title"].value
373+
for att in ["title", "description", "name", "type"]:
374+
if param.attributes[att]:
375+
param_item[att] = param.attributes[att].value
375376

376-
if param.attributes["description"]:
377-
param_item["description"] = param.attributes["description"].value
377+
for tag in ["min", "max", "step", "digits", "default"]:
378+
for p in param.getElementsByTagName(tag):
379+
if p.childNodes:
380+
param_item[tag] = p.firstChild.data
378381

379-
if param.attributes["name"]:
380-
param_item["name"] = param.attributes["name"].value
381-
382-
if param.attributes["type"]:
383-
param_item["type"] = param.attributes["type"].value
384-
385-
if param.getElementsByTagName("min"):
386-
param_item["min"] = param.getElementsByTagName("min")[0].childNodes[0].data
387-
388-
if param.getElementsByTagName("max"):
389-
param_item["max"] = param.getElementsByTagName("max")[0].childNodes[0].data
390-
391-
if param.getElementsByTagName("step"):
392-
param_item["step"] = param.getElementsByTagName("step")[0].childNodes[0].data
393-
394-
if param.getElementsByTagName("digits"):
395-
param_item["digits"] = param.getElementsByTagName("digits")[0].childNodes[0].data
396-
397-
if param.getElementsByTagName("default"):
398-
if param.getElementsByTagName("default")[0].childNodes:
399-
param_item["default"] = param.getElementsByTagName("default")[0].childNodes[0].data
400-
else:
401-
param_item["default"] = ""
402-
403-
param_item["values"] = {}
404-
values = param.getElementsByTagName("value")
405-
for value in values:
406-
# Get list of values
407-
name = ""
408-
num = ""
409-
410-
if value.attributes["name"]:
411-
name = value.attributes["name"].value
412-
413-
if value.attributes["num"]:
414-
num = value.attributes["num"].value
415-
416-
# add to parameter
417-
param_item["values"][name] = num
382+
try:
383+
# Build values dict from list of (name, num) tuples
384+
param_item["values"] = dict([
385+
(p.attributes["name"].value, p.attributes["num"].value)
386+
for p in param.getElementsByTagName("value") if (
387+
"name" in p.attributes and "num" in p.attributes
388+
)
389+
])
390+
except (TypeError, AttributeError) as ex:
391+
log.warn("XML parser: {}".format(ex))
392+
pass
418393

419394
# Append param object to list
420395
animation["params"].append(param_item)
421396

397+
# Free up XML document memory
398+
xmldoc.unlink()
399+
422400
# Return animation dictionary
423401
return animation
424402

0 commit comments

Comments
 (0)