| 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 urllib | 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 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 raise | 190 raise |
| 191 persistent_cache = {} | 191 persistent_cache = {} |
| 192 | 192 |
| 193 cached_versions = persistent_cache.get(browser) | 193 cached_versions = persistent_cache.get(browser) |
| 194 now = time.mktime(time.gmtime()) | 194 now = time.mktime(time.gmtime()) |
| 195 if exc_info: | 195 if exc_info: |
| 196 if not cached_versions: | 196 if not cached_versions: |
| 197 raise exc_info[0], exc_info[1], exc_info[2] | 197 raise exc_info[0], exc_info[1], exc_info[2] |
| 198 | 198 |
| 199 versions = cached_versions | 199 versions = cached_versions |
| 200 if now - versions['timestamp'] > 60*60*2: | 200 if now > versions['fail_silently_until']: |
| 201 versions['fail_silently_until'] = now + 60*60*24 |
| 201 logging.warning('Failed to get %s versions, falling back to ' | 202 logging.warning('Failed to get %s versions, falling back to ' |
| 202 'cached versions', browser, exc_info=exc_info) | 203 'cached versions', browser, exc_info=exc_info) |
| 203 else: | 204 else: |
| 204 # Determine previous version: If we recorded the version before and it | 205 # Determine previous version: If we recorded the version before and it |
| 205 # changed since then, the old current version becomes the new previous | 206 # changed since then, the old current version becomes the new previous |
| 206 # version. If the version didn't change, use the cached previous version. | 207 # version. If the version didn't change, use the cached previous version. |
| 207 current = versions['current'] | 208 current = versions['current'] |
| 208 previous = None | 209 previous = None |
| 209 if cached_versions: | 210 if cached_versions: |
| 210 cached_current = cached_versions['current'] | 211 cached_current = cached_versions['current'] |
| 211 if cached_current != current: | 212 if cached_current != current: |
| 212 previous = cached_current | 213 previous = cached_current |
| 213 else: | 214 else: |
| 214 previous = cached_versions['previous'] | 215 previous = cached_versions['previous'] |
| 215 versions['previous'] = previous | 216 versions['previous'] = previous |
| 216 | 217 |
| 217 # Remove duplicates from unreleased versions. Occasionally, | 218 # Remove duplicates from unreleased versions. Occasionally, |
| 218 # different channels are on the same version, but we want | 219 # different channels are on the same version, but we want |
| 219 # to list each version only once. | 220 # to list each version only once. |
| 220 versions['unreleased'] = sorted( | 221 versions['unreleased'] = sorted( |
| 221 set(versions['unreleased']) - set(re.sub(r'(\.0*)+$', '', ver) for ver i
n (current, previous) if ver), | 222 set(versions['unreleased']) - set(re.sub(r'(\.0*)+$', '', ver) for ver i
n (current, previous) if ver), |
| 222 key=key_by_version | 223 key=key_by_version |
| 223 ) | 224 ) |
| 224 | 225 |
| 225 versions['timestamp'] = now | 226 versions['fail_silently_until'] = now + 60*60*2 |
| 226 persistent_cache[browser] = versions | 227 persistent_cache[browser] = versions |
| 227 file.seek(0) | 228 |
| 228 json.dump(persistent_cache, file) | 229 file.seek(0) |
| 229 file.truncate() | 230 json.dump(persistent_cache, file) |
| 231 file.truncate() |
| 230 | 232 |
| 231 if not versions['previous']: | 233 if not versions['previous']: |
| 232 logging.warning("Couldn't determine previous browser version, " | 234 logging.warning("Couldn't determine previous browser version, " |
| 233 'please set %s.previous in %s', browser, filename) | 235 'please set %s.previous in %s', browser, filename) |
| 234 | 236 |
| 235 cache[browser] = versions | 237 cache[browser] = versions |
| 236 return versions | 238 return versions |
| OLD | NEW |