| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 # This Source Code Form is subject to the terms of the Mozilla Public |  | 
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |  | 
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |  | 
| 4 |  | 
| 5 """ |  | 
| 6 Update the public suffix list |  | 
| 7 ============================== |  | 
| 8 |  | 
| 9   This script generates a js array of public suffixes (http://publicsuffix.org/) |  | 
| 10 """ |  | 
| 11 |  | 
| 12 import os |  | 
| 13 import urllib |  | 
| 14 import json |  | 
| 15 |  | 
| 16 |  | 
| 17 def urlopen(url, attempts=3): |  | 
| 18     """ |  | 
| 19     Tries to open a particular URL, retries on failure. |  | 
| 20     """ |  | 
| 21     for i in range(attempts): |  | 
| 22         try: |  | 
| 23             return urllib.urlopen(url) |  | 
| 24         except IOError as e: |  | 
| 25             error = e |  | 
| 26             time.sleep(5) |  | 
| 27     raise error |  | 
| 28 |  | 
| 29 |  | 
| 30 def getPublicSuffixList(): |  | 
| 31     """ |  | 
| 32     gets download link for a Gecko add-on from the Mozilla Addons site |  | 
| 33     """ |  | 
| 34     suffixes = {} |  | 
| 35     url = 'http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_t
    ld_names.dat?raw=1' |  | 
| 36     resource = urlopen(url) |  | 
| 37 |  | 
| 38     for line in resource: |  | 
| 39         line = line.decode('utf-8').rstrip() |  | 
| 40         if line.startswith('//') or '.' not in line: |  | 
| 41             continue |  | 
| 42 |  | 
| 43         if line.startswith('*.'): |  | 
| 44             offset = 2 |  | 
| 45             val = 2 |  | 
| 46         elif line.startswith('!'): |  | 
| 47             offset = 1 |  | 
| 48             val = 0 |  | 
| 49         else: |  | 
| 50             offset = 0 |  | 
| 51             val = 1 |  | 
| 52 |  | 
| 53         suffixes[line[offset:].encode('idna').decode('ascii')] = val |  | 
| 54 |  | 
| 55     return suffixes |  | 
| 56 |  | 
| 57 |  | 
| 58 def updatePSL(baseDir): |  | 
| 59     """ |  | 
| 60     writes the current public suffix list to js file in json format |  | 
| 61     """ |  | 
| 62 |  | 
| 63     psl = getPublicSuffixList() |  | 
| 64     file = open(os.path.join(baseDir, 'lib', 'publicSuffixList.js'), 'w') |  | 
| 65     print >>file, 'var publicSuffixes = ' + json.dumps(psl, sort_keys=True, inde
    nt=4, separators=(',', ': ')) + ';' |  | 
| 66     file.close() |  | 
| OLD | NEW | 
|---|