also adds parse_cli and parse_cli_textfsm to changelog
Peter Sprygada authored on 2017/08/19 03:05:26... | ... |
@@ -345,17 +345,22 @@ class Template: |
345 | 345 |
self.env = Environment() |
346 | 346 |
self.env.filters.update({'ternary': ternary}) |
347 | 347 |
|
348 |
- def __call__(self, value, variables=None): |
|
348 |
+ def __call__(self, value, variables=None, fail_on_undefined=True): |
|
349 | 349 |
variables = variables or {} |
350 | 350 |
if not self.contains_vars(value): |
351 | 351 |
return value |
352 | 352 |
|
353 |
- value = self.env.from_string(value).render(variables) |
|
353 |
+ try: |
|
354 |
+ value = self.env.from_string(value).render(variables) |
|
355 |
+ except UndefinedError: |
|
356 |
+ if not fail_on_undefined: |
|
357 |
+ return None |
|
358 |
+ raise |
|
354 | 359 |
|
355 | 360 |
if value: |
356 | 361 |
try: |
357 | 362 |
return ast.literal_eval(value) |
358 |
- except ValueError: |
|
363 |
+ except: |
|
359 | 364 |
return str(value) |
360 | 365 |
else: |
361 | 366 |
return None |
... | ... |
@@ -131,7 +131,13 @@ def parse_cli(output, tmpl): |
131 | 131 |
else: |
132 | 132 |
items.append(None) |
133 | 133 |
|
134 |
- objects.append(dict([(k, template(v, {'item': items})) for k, v in iteritems(value)])) |
|
134 |
+ obj = {} |
|
135 |
+ for k, v in iteritems(value): |
|
136 |
+ try: |
|
137 |
+ obj[k] = template(v, {'item': items}, fail_on_undefined=False) |
|
138 |
+ except: |
|
139 |
+ obj[k] = None |
|
140 |
+ objects.append(obj) |
|
135 | 141 |
|
136 | 142 |
elif isinstance(value, Mapping): |
137 | 143 |
items = list() |