@@ -363,62 +363,40 @@ def get_animation_details(self):
363
363
364
364
# Get list of params
365
365
animation = {"title" : animation_title , "path" : xml_path , "service" : service , "params" : []}
366
- xml_params = xmldoc .getElementsByTagName ("param" )
367
366
368
367
# 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" : "" }
371
371
372
372
# 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
375
376
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
378
381
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
418
393
419
394
# Append param object to list
420
395
animation ["params" ].append (param_item )
421
396
397
+ # Free up XML document memory
398
+ xmldoc .unlink ()
399
+
422
400
# Return animation dictionary
423
401
return animation
424
402
0 commit comments