| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # coding: utf-8 | 2 # coding: utf-8 |
| 3 | 3 |
| 4 # This file is part of the Adblock Plus web scripts, | 4 # This file is part of the Adblock Plus web scripts, |
| 5 # Copyright (C) 2006-2014 Eyeo GmbH | 5 # Copyright (C) 2006-2014 Eyeo GmbH |
| 6 # | 6 # |
| 7 # Adblock Plus is free software: you can redistribute it and/or modify | 7 # Adblock Plus is free software: you can redistribute it and/or modify |
| 8 # it under the terms of the GNU General Public License version 3 as | 8 # it under the terms of the GNU General Public License version 3 as |
| 9 # published by the Free Software Foundation. | 9 # published by the Free Software Foundation. |
| 10 # | 10 # |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 if len(lines) > 0: | 82 if len(lines) > 0: |
| 83 header = lines.pop(0) | 83 header = lines.pop(0) |
| 84 if not re.search(r"\[Adblock(?:\s*Plus\s*([\d\.]+)?)?\]", header, re.I): | 84 if not re.search(r"\[Adblock(?:\s*Plus\s*([\d\.]+)?)?\]", header, re.I): |
| 85 raise Exception("This is not a valid Adblock Plus subscription file.") | 85 raise Exception("This is not a valid Adblock Plus subscription file.") |
| 86 | 86 |
| 87 lines = resolve_includes(source_name, sources, lines, timeout) | 87 lines = resolve_includes(source_name, sources, lines, timeout) |
| 88 seen = set(["checksum", "version"]) | 88 seen = set(["checksum", "version"]) |
| 89 def check_line(line): | 89 def check_line(line): |
| 90 if line == "": | 90 if line == "": |
| 91 return False | 91 return False |
| 92 match = re.search(r"^\s*!\s*(Redirect|Homepage|Title|Checksum|Version)\s*:",
line, re.M | re.I) | 92 match = re.search(r"^\s*!\s*(Redirect|Homepage|Title|Checksum|Version|Expire
s)\s*:", line, re.M | re.I) |
| 93 if not match: | 93 if not match: |
| 94 return True | 94 return True |
| 95 key = match.group(1).lower() | 95 key = match.group(1).lower() |
| 96 if key in seen: | 96 if key in seen: |
| 97 return False | 97 return False |
| 98 seen.add(key) | 98 seen.add(key) |
| 99 return True | 99 return True |
| 100 lines = filter(check_line, lines) | 100 lines = filter(check_line, lines) |
| 101 | 101 |
| 102 write_tpl(save_file, os.path.splitext(filename)[0] + ".tpl", lines) | 102 write_tpl(save_file, os.path.splitext(filename)[0] + ".tpl", lines) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 131 except urllib2.URLError, e: | 131 except urllib2.URLError, e: |
| 132 error = e | 132 error = e |
| 133 time.sleep(5) | 133 time.sleep(5) |
| 134 if error: | 134 if error: |
| 135 raise error | 135 raise error |
| 136 | 136 |
| 137 # We should really get the charset from the headers rather than assuming | 137 # We should really get the charset from the headers rather than assuming |
| 138 # that it is UTF-8. However, some of the Google Code mirrors are | 138 # that it is UTF-8. However, some of the Google Code mirrors are |
| 139 # misconfigured and will return ISO-8859-1 as charset instead of UTF-8. | 139 # misconfigured and will return ISO-8859-1 as charset instead of UTF-8. |
| 140 newlines = data.decode("utf-8").splitlines() | 140 newlines = data.decode("utf-8").splitlines() |
| 141 newlines = filter(lambda l: not re.search(r"^\s*!.*?\bExpires\s*(?::|aft
er)\s*(\d+)\s*(h)?", l, re.M | re.I), newlines) | 141 newlines = filter(lambda l: not re.search(r"^\s*!\s*(Redirect|Homepage|T
itle|Version|Expires)\s*:", l, re.M | re.I), newlines) |
| 142 newlines = filter(lambda l: not re.search(r"^\s*!\s*(Redirect|Homepage|T
itle|Version)\s*:", l, re.M | re.I), newlines) | |
| 143 else: | 142 else: |
| 144 result.append("! *** %s ***" % filename) | 143 result.append("! *** %s ***" % filename) |
| 145 | 144 |
| 146 include_source = source_name | 145 include_source = source_name |
| 147 if ":" in filename: | 146 if ":" in filename: |
| 148 include_source, filename = filename.split(":", 1) | 147 include_source, filename = filename.split(":", 1) |
| 149 if not include_source in sources: | 148 if not include_source in sources: |
| 150 raise Exception('Cannot include file from repository "%s", this reposi
tory is unknown' % include_source) | 149 raise Exception('Cannot include file from repository "%s", this reposi
tory is unknown' % include_source) |
| 151 | 150 |
| 152 source = sources[include_source] | 151 source = sources[include_source] |
| (...skipping 11 matching lines...) Expand all Loading... |
| 164 line = "" | 163 line = "" |
| 165 result.append(line) | 164 result.append(line) |
| 166 return result | 165 return result |
| 167 | 166 |
| 168 def write_tpl(save_file, filename, lines): | 167 def write_tpl(save_file, filename, lines): |
| 169 result = [] | 168 result = [] |
| 170 result.append("msFilterList") | 169 result.append("msFilterList") |
| 171 for line in lines: | 170 for line in lines: |
| 172 if re.search(r"^\s*!", line): | 171 if re.search(r"^\s*!", line): |
| 173 # This is a comment. Handle "Expires" comment in a special way, keep the r
est. | 172 # This is a comment. Handle "Expires" comment in a special way, keep the r
est. |
| 174 match = re.search(r"\bExpires\s*(?::|after)\s*(\d+)\s*(h)?", line, re.I) | 173 match = re.search(r"^\s*!\s*Expires\s*:\s*(\d+)\s*(h)?", line, re.I) |
| 175 if match: | 174 if match: |
| 176 interval = int(match.group(1)) | 175 interval = int(match.group(1)) |
| 177 if match.group(2): | 176 if match.group(2): |
| 178 interval = int(interval / 24) | 177 interval = int(interval / 24) |
| 179 result.append(": Expires=%i" % interval) | 178 result.append(": Expires=%i" % interval) |
| 180 else: | 179 else: |
| 181 result.append(re.sub(r"^\s*!", "#", re.sub(r"--!$", "--#", line))) | 180 result.append(re.sub(r"^\s*!", "#", re.sub(r"--!$", "--#", line))) |
| 182 elif line.find("#") >= 0: | 181 elif line.find("#") >= 0: |
| 183 # Element hiding rules are not supported in MSIE, drop them | 182 # Element hiding rules are not supported in MSIE, drop them |
| 184 pass | 183 pass |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 | 317 |
| 319 timeout = 30 | 318 timeout = 30 |
| 320 for option, value in opts: | 319 for option, value in opts: |
| 321 if option in ("-h", "--help"): | 320 if option in ("-h", "--help"): |
| 322 usage() | 321 usage() |
| 323 sys.exit() | 322 sys.exit() |
| 324 elif option in ("-t", "--timeout"): | 323 elif option in ("-t", "--timeout"): |
| 325 timeout = int(value) | 324 timeout = int(value) |
| 326 | 325 |
| 327 combine_subscriptions(sources, target_dir, timeout) | 326 combine_subscriptions(sources, target_dir, timeout) |
| OLD | NEW |