Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1262)

Unified Diff: telemetry/telemetry/util/js_template.py

Issue 2671693002: [Telemetry] Validate args in js_template rendering (Closed)
Patch Set: fix old api Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: telemetry/telemetry/util/js_template.py
diff --git a/telemetry/telemetry/util/js_template.py b/telemetry/telemetry/util/js_template.py
index 61f5d5f9b1d5d56e013d753e78db13fc78a407c0..c167ebc3afa1922baed36966e49d940cd65a4f4b 100644
--- a/telemetry/telemetry/util/js_template.py
+++ b/telemetry/telemetry/util/js_template.py
@@ -38,12 +38,16 @@ def Render(template, **kwargs):
to interpolate with values.
**kwargs: Values to be interpolated in the template.
"""
+ unused = set(kwargs)
+
def interpolate(m):
field_spec = m.group('field_spec').strip()
field = RE_FIELD_IDENTIFIER.match(field_spec)
if not field:
raise KeyError(field_spec)
- value = kwargs[field.group('name')]
+ key = field.group('name')
+ value = kwargs[key]
+ unused.discard(key)
if field.group('modifier') == '@':
if not isinstance(value, str):
raise ValueError('Literal value for %s must be a string' % field_spec)
@@ -51,4 +55,8 @@ def Render(template, **kwargs):
else:
return RenderValue(value)
- return RE_REPLACEMENT_FIELD.sub(interpolate, template)
+ result = RE_REPLACEMENT_FIELD.sub(interpolate, template)
+ if unused:
+ raise TypeError('Unexpected arguments not used in template: %s.' % (
+ ', '.join(repr(str(k)) for k in sorted(unused))))
nednguyen 2017/02/02 14:33:50 On another hand, ca we also output error if there
perezju 2017/02/02 14:42:44 Those will raise a KeyError when trying to read th
+ return result

Powered by Google App Engine
This is Rietveld 408576698