+ # Download and check versions info
+ try:
+ versions_info = compat_urllib_request.urlopen(JSON_URL).read().decode('utf-8')
+ versions_info = json.loads(versions_info)
+ except:
+ if verbose: to_screen(traceback.format_exc().decode())
+ to_screen(u'ERROR: can\'t obtain versions info. Please try again later.')
+ return
+ if not 'signature' in versions_info:
+ to_screen(u'ERROR: the versions file is not signed or corrupted. Aborting.')
+ return
+ signature = versions_info['signature']
+ del versions_info['signature']
+ if not rsa_verify(json.dumps(versions_info, sort_keys=True), signature, UPDATES_RSA_KEY):
+ to_screen(u'ERROR: the versions file signature is invalid. Aborting.')
+ return
+
+ to_screen(u'Updating to version ' + versions_info['latest'] + '...')
+ version = versions_info['versions'][versions_info['latest']]
+ if version.get('notes'):
+ to_screen(u'PLEASE NOTE:')
+ for note in version['notes']:
+ to_screen(note)
+
+ if not os.access(filename, os.W_OK):
+ to_screen(u'ERROR: no write permissions on %s' % filename)
+ return
+
+ # Py2EXE
+ if hasattr(sys, "frozen"):