| LEFT | RIGHT |
| 1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
| 2 # Copyright (C) 2006-2014 Eyeo GmbH | 2 # Copyright (C) 2006-2014 Eyeo GmbH |
| 3 # | 3 # |
| 4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
| 5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
| 6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
| 7 # | 7 # |
| 8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 (['XML_DIZ_INFO', 'ASP', 'ASP_Member_Number'], None), | 130 (['XML_DIZ_INFO', 'ASP', 'ASP_Member_Number'], None), |
| 131 ] | 131 ] |
| 132 | 132 |
| 133 def validate_fields(fields, nodes, filename): | 133 def validate_fields(fields, nodes, filename): |
| 134 expected_nodes = set() | 134 expected_nodes = set() |
| 135 | 135 |
| 136 for node_name, fields in itertools.groupby(fields, lambda (path, regex): path[
0]): | 136 for node_name, fields in itertools.groupby(fields, lambda (path, regex): path[
0]): |
| 137 expected_nodes.add(node_name) | 137 expected_nodes.add(node_name) |
| 138 | 138 |
| 139 regex = None | 139 regex = None |
| 140 leaf = False | |
| 141 nested_fields = [] | 140 nested_fields = [] |
| 142 for path, regex_ in fields: | 141 for path, regex_ in fields: |
| 143 if path == [node_name]: | 142 if path == [node_name]: |
| 144 regex = regex_ | 143 regex = regex_ |
| 145 leaf = True | |
| 146 else: | 144 else: |
| 147 nested_fields.append((path[1:], regex_)) | 145 nested_fields.append((path[1:], regex_)) |
| 148 | 146 |
| 149 found = False | 147 found = False |
| 150 for node in nodes: | 148 for node in nodes: |
| 151 if node.nodeName == node_name: | 149 if node.nodeName == node_name: |
| 152 if found: | 150 if found: |
| 153 warnings.warn('invalid PAD file (duplicate node)\n' | 151 warnings.warn('invalid PAD file (duplicate node)\n' |
| 154 'filename: %s\n' | 152 'filename: %s\n' |
| 155 'node: %s' % (filename, node_name)) | 153 'node: %s' % (filename, node_name)) |
| 156 | 154 |
| 157 if regex: | 155 if regex: |
| 158 value = ''.join(child.toxml() for child in node.childNodes) | 156 value = ''.join(child.toxml() for child in node.childNodes) |
| 159 if not re.match(regex, value): | 157 if not re.match(regex, value): |
| 160 warnings.warn('invalid PAD file (invalid value)\n' | 158 warnings.warn('invalid PAD file (invalid value)\n' |
| 161 'filename: %s\n' | 159 'filename: %s\n' |
| 162 'node: %s\n' | 160 'node: %s\n' |
| 163 'value: %s\n' | 161 'value: %s\n' |
| 164 'regex: %s' % (filename, node_name, value, regex)) | 162 'regex: %s' % (filename, node_name, value, regex)) |
| 165 | 163 |
| 166 if nested_fields: | 164 if nested_fields: |
| 167 » validate_fields(nested_fields, node.childNodes, filename) | 165 validate_fields(nested_fields, node.childNodes, filename) |
| 168 | 166 |
| 169 found = True | 167 found = True |
| 170 | 168 |
| 171 if not found: | 169 if not found: |
| 172 if regex and not re.match(regex, ''): | 170 if regex and not re.match(regex, ''): |
| 173 warnings.warn('invalid PAD file (missing node)\n' | 171 warnings.warn('invalid PAD file (missing node)\n' |
| 174 'filename: %s\n' | 172 'filename: %s\n' |
| 175 'node: %s' % (filename, node_name)) | 173 'node: %s' % (filename, node_name)) |
| 176 | 174 |
| 177 validate_fields(nested_fields, [], filename) | 175 validate_fields(nested_fields, [], filename) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 197 for field in doc.getElementsByTagName('Field'): | 195 for field in doc.getElementsByTagName('Field'): |
| 198 path, regex = [ | 196 path, regex = [ |
| 199 ''.join(node.nodeValue for node in field.getElementsByTagName(name)[0].chi
ldNodes) | 197 ''.join(node.nodeValue for node in field.getElementsByTagName(name)[0].chi
ldNodes) |
| 200 for name in ('Path', 'RegEx') | 198 for name in ('Path', 'RegEx') |
| 201 ] | 199 ] |
| 202 print ' (%r, %s),' % (str(path).split('/'), "r'%s'" % regex if regex else '
None') | 200 print ' (%r, %s),' % (str(path).split('/'), "r'%s'" % regex if regex else '
None') |
| 203 print ']' | 201 print ']' |
| 204 | 202 |
| 205 if __name__ == '__main__': | 203 if __name__ == '__main__': |
| 206 print_fields() | 204 print_fields() |
| LEFT | RIGHT |