| OLD | NEW |
| 1 import re | 1 import re |
| 2 import os | 2 import os |
| 3 import sys | 3 import sys |
| 4 import json | 4 import json |
| 5 import urllib2 | 5 import urllib |
| 6 import errno | 6 import errno |
| 7 import logging | 7 import logging |
| 8 import time | 8 import time |
| 9 from xml.dom import minidom | 9 from xml.dom import minidom |
| 10 | 10 |
| 11 from jinja2 import contextfunction | 11 from jinja2 import contextfunction |
| 12 | 12 |
| 13 BROWSERS = {} | 13 BROWSERS = {} |
| 14 | 14 |
| 15 CHROME_UPDATE_XML = '''\ | 15 CHROME_UPDATE_XML = '''\ |
| 16 <?xml version="1.0" encoding="UTF-8"?> | 16 <?xml version="1.0" encoding="UTF-8"?> |
| 17 <request protocol="3.0" ismachine="0"> | 17 <request protocol="3.0" ismachine="0"> |
| 18 <os platform="win" version="99" arch="x64"/> | 18 <os platform="win" version="99" arch="x64"/> |
| 19 <app appid="{4DC8B4CA-1BDA-483E-B5FA-D3C12E15B62D}"> | 19 <app appid="{4DC8B4CA-1BDA-483E-B5FA-D3C12E15B62D}"> |
| 20 <updatecheck/> | 20 <updatecheck/> |
| 21 </app> | 21 </app> |
| 22 <app appid="{4DC8B4CA-1BDA-483E-B5FA-D3C12E15B62D}" ap="x64-beta-multi-chrome"
> | 22 <app appid="{4DC8B4CA-1BDA-483E-B5FA-D3C12E15B62D}" ap="x64-beta-multi-chrome"
> |
| 23 <updatecheck/> | 23 <updatecheck/> |
| 24 </app> | 24 </app> |
| 25 <app appid="{4DC8B4CA-1BDA-483E-B5FA-D3C12E15B62D}" ap="x64-dev-multi-chrome"> | 25 <app appid="{4DC8B4CA-1BDA-483E-B5FA-D3C12E15B62D}" ap="x64-dev-multi-chrome"> |
| 26 <updatecheck/> | 26 <updatecheck/> |
| 27 </app> | 27 </app> |
| 28 </request>''' | 28 </request>''' |
| 29 | 29 |
| 30 cache = {} | 30 cache = {} |
| 31 | 31 |
| 32 def get_mozilla_version(product, origin_version, channel, | 32 def get_mozilla_version(product, origin_version, channel, |
| 33 minor=False, subdomain='aus4', origin_build='-', | 33 minor=False, subdomain='aus4', origin_build='-', |
| 34 attribute='appVersion', platform='WINNT_x86-msvc'): | 34 attribute='appVersion', platform='WINNT_x86-msvc'): |
| 35 response = urllib2.urlopen('https://%s.mozilla.org/update/3/%s/%s/%s/%s/en-US/
%s/-/default/default/update.xml?force=1' % ( | 35 response = urllib.urlopen('https://%s.mozilla.org/update/3/%s/%s/%s/%s/en-US/%
s/-/default/default/update.xml?force=1' % ( |
| 36 subdomain, | 36 subdomain, |
| 37 product, | 37 product, |
| 38 origin_version, | 38 origin_version, |
| 39 origin_build, | 39 origin_build, |
| 40 platform, | 40 platform, |
| 41 channel | 41 channel |
| 42 )) | 42 )) |
| 43 try: | 43 try: |
| 44 doc = minidom.parse(response) | 44 doc = minidom.parse(response) |
| 45 finally: | 45 finally: |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 versions['unreleased'].append(version) | 87 versions['unreleased'].append(version) |
| 88 | 88 |
| 89 return versions | 89 return versions |
| 90 | 90 |
| 91 BROWSERS['seamonkey'] = get_seamonkey_versions | 91 BROWSERS['seamonkey'] = get_seamonkey_versions |
| 92 | 92 |
| 93 def get_chrome_version(manifest): | 93 def get_chrome_version(manifest): |
| 94 return manifest.getAttribute('version').split('.')[0] | 94 return manifest.getAttribute('version').split('.')[0] |
| 95 | 95 |
| 96 def get_chrome_versions(): | 96 def get_chrome_versions(): |
| 97 response = urllib2.urlopen(urllib2.Request('https://tools.google.com/service/u
pdate2', CHROME_UPDATE_XML)) | 97 response = urllib.urlopen('https://tools.google.com/service/update2', CHROME_U
PDATE_XML) |
| 98 try: | 98 try: |
| 99 doc = minidom.parse(response) | 99 doc = minidom.parse(response) |
| 100 finally: | 100 finally: |
| 101 response.close() | 101 response.close() |
| 102 | 102 |
| 103 manifests = doc.getElementsByTagName('manifest') | 103 manifests = doc.getElementsByTagName('manifest') |
| 104 return { | 104 return { |
| 105 'current': get_chrome_version(manifests[0]), | 105 'current': get_chrome_version(manifests[0]), |
| 106 'unreleased': map(get_chrome_version, manifests[1:]) | 106 'unreleased': map(get_chrome_version, manifests[1:]) |
| 107 } | 107 } |
| 108 | 108 |
| 109 BROWSERS['chrome'] = get_chrome_versions | 109 BROWSERS['chrome'] = get_chrome_versions |
| 110 | 110 |
| 111 def get_opera_version(channel): | 111 def get_opera_version(channel): |
| 112 response = urllib2.urlopen('https://autoupdate.geo.opera.com/netinstaller/' +
channel) | 112 response = urllib.urlopen('https://autoupdate.geo.opera.com/netinstaller/' + c
hannel) |
| 113 try: | 113 try: |
| 114 spec = json.load(response) | 114 spec = json.load(response) |
| 115 finally: | 115 finally: |
| 116 response.close() | 116 response.close() |
| 117 | 117 |
| 118 return re.search(r'\d+', spec['installer_filename']).group(0) | 118 return re.search(r'\d+', spec['installer_filename']).group(0) |
| 119 | 119 |
| 120 def get_opera_versions(): | 120 def get_opera_versions(): |
| 121 return { | 121 return { |
| 122 'current': get_opera_version('Stable'), | 122 'current': get_opera_version('Stable'), |
| 123 'unreleased': [ | 123 'unreleased': [ |
| 124 get_opera_version('Beta'), | 124 get_opera_version('Beta'), |
| 125 get_opera_version('Developer') | 125 get_opera_version('Developer') |
| 126 ] | 126 ] |
| 127 } | 127 } |
| 128 | 128 |
| 129 BROWSERS['opera'] = get_opera_versions | 129 BROWSERS['opera'] = get_opera_versions |
| 130 | 130 |
| 131 def get_yandex_version(suffix): | 131 def get_yandex_version(suffix): |
| 132 response = urllib2.urlopen('https://api.browser.yandex.ru/update-info/browser/
yandex%s/win-yandex.xml' % suffix) | 132 response = urllib.urlopen('https://api.browser.yandex.ru/update-info/browser/y
andex%s/win-yandex.xml' % suffix) |
| 133 try: | 133 try: |
| 134 doc = minidom.parse(response) | 134 doc = minidom.parse(response) |
| 135 finally: | 135 finally: |
| 136 response.close() | 136 response.close() |
| 137 | 137 |
| 138 item = doc.getElementsByTagName('item')[0] | 138 item = doc.getElementsByTagName('item')[0] |
| 139 description = item.getElementsByTagName('description')[0] | 139 description = item.getElementsByTagName('description')[0] |
| 140 return re.search(r'\d+\.\d+', description.firstChild.nodeValue).group(0) | 140 return re.search(r'\d+\.\d+', description.firstChild.nodeValue).group(0) |
| 141 | 141 |
| 142 def get_yandex_versions(): | 142 def get_yandex_versions(): |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 file.seek(0) | 217 file.seek(0) |
| 218 json.dump(persistent_cache, file) | 218 json.dump(persistent_cache, file) |
| 219 file.truncate() | 219 file.truncate() |
| 220 | 220 |
| 221 if not versions['previous']: | 221 if not versions['previous']: |
| 222 logging.warning("Couldn't determine previous browser version, " | 222 logging.warning("Couldn't determine previous browser version, " |
| 223 'please set %s.previous in %s', browser, filename) | 223 'please set %s.previous in %s', browser, filename) |
| 224 | 224 |
| 225 cache[browser] = versions | 225 cache[browser] = versions |
| 226 return versions | 226 return versions |
| OLD | NEW |