|
10 | 10 | import copy
|
11 | 11 | import sys
|
12 | 12 | import types
|
| 13 | +import re |
13 | 14 | from collections import namedtuple
|
14 | 15 | from reclass.utils.dictpath import DictPath
|
15 | 16 | from reclass.values.value import Value
|
16 | 17 | from reclass.values.valuelist import ValueList
|
17 | 18 | from reclass.errors import InfiniteRecursionError, ResolveError, InterpolationError, ParseError, BadReferencesError
|
| 19 | +from reclass.defaults import REFERENCE_SENTINELS, EXPORT_SENTINELS, REFERENCE_PATTERN |
18 | 20 |
|
19 | 21 | class Parameters(object):
|
20 | 22 | '''
|
@@ -47,6 +49,8 @@ def __init__(self, mapping, settings, uri):
|
47 | 49 | self._unrendered = None
|
48 | 50 | self._escapes_handled = {}
|
49 | 51 | self._inv_queries = []
|
| 52 | + self._ref_missed = [] |
| 53 | + self._ref_pattern = '.*'+ re.escape(REFERENCE_SENTINELS[0]) + REFERENCE_PATTERN + re.escape(REFERENCE_SENTINELS[1]) |
50 | 54 | self._needs_all_envs = False
|
51 | 55 | self._keep_overrides = False
|
52 | 56 | if mapping is not None:
|
@@ -282,6 +286,8 @@ def _interpolate_render_value(self, path, value, inventory):
|
282 | 286 | self._render_simple_dict(new, path)
|
283 | 287 | elif isinstance(new, list):
|
284 | 288 | self._render_simple_list(new, path)
|
| 289 | + if re.match(self._ref_pattern, str(new)): |
| 290 | + self._ref_missed.append(path) |
285 | 291 | return new
|
286 | 292 |
|
287 | 293 | def _interpolate_references(self, path, value, inventory):
|
@@ -318,3 +324,12 @@ def _interpolate_references(self, path, value, inventory):
|
318 | 324 | value.assembleRefs(self._base)
|
319 | 325 | if old == len(value.get_references()):
|
320 | 326 | raise BadReferencesError(value.get_references(), str(path), value.uri())
|
| 327 | + |
| 328 | + def check_failed_interpolation(self): |
| 329 | + missing = [] |
| 330 | + for p in self._ref_missed: |
| 331 | + v = str(p.get_value(self._base)) |
| 332 | + if re.match(self._ref_pattern, v): |
| 333 | + missing.append((str(p), v)) |
| 334 | + return missing |
| 335 | + |
0 commit comments