Skip to content

Commit 90e34b6

Browse files
committedSep 26, 2018
horejsek#28 Fix overriding variables in pattern properties
1 parent c07c95c commit 90e34b6

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed
 

‎fastjsonschema/draft04.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -424,15 +424,15 @@ def generate_pattern_properties(self):
424424
self.create_variable_keys()
425425
for pattern, definition in self._definition['patternProperties'].items():
426426
self._compile_regexps['{}'.format(pattern)] = re.compile(pattern)
427-
with self.l('for key, val in {variable}.items():'):
427+
with self.l('for {variable}_key, {variable}_val in {variable}.items():'):
428428
for pattern, definition in self._definition['patternProperties'].items():
429-
with self.l('if REGEX_PATTERNS["{}"].search(key):', pattern):
430-
with self.l('if key in {variable}_keys:'):
431-
self.l('{variable}_keys.remove(key)')
429+
with self.l('if REGEX_PATTERNS["{}"].search({variable}_key):', pattern):
430+
with self.l('if {variable}_key in {variable}_keys:'):
431+
self.l('{variable}_keys.remove({variable}_key)')
432432
self.generate_func_code_block(
433433
definition,
434-
'val',
435-
'{}.{{key}}'.format(self._variable_name),
434+
'{}_val'.format(self._variable),
435+
'{}.{{{}_key}}'.format(self._variable_name, self._variable),
436436
)
437437

438438
def generate_additional_properties(self):

‎tests/test_pattern_properties.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
def test_dont_override_variable_names(asserter):
2+
value = {
3+
'foo:bar': {
4+
'baz': {
5+
'bat': {},
6+
},
7+
'bit': {},
8+
},
9+
}
10+
asserter({
11+
'type': 'object',
12+
'patternProperties': {
13+
'^foo:': {
14+
'type': 'object',
15+
'properties': {
16+
'baz': {
17+
'type': 'object',
18+
'patternProperties': {
19+
'^b': {'type': 'object'},
20+
},
21+
},
22+
'bit': {'type': 'object'},
23+
},
24+
},
25+
},
26+
}, value, value)

0 commit comments

Comments
 (0)
Please sign in to comment.