Fix update check
It should return assets for all platforms, since the repo tarball is unsuitable for setuptools_scm. Preferred asset is the universal wheel.
This commit is contained in:
parent
6e14e8709b
commit
66b89f4fed
3 changed files with 37 additions and 14 deletions
|
@ -6,6 +6,9 @@ The format is based on
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Update check now always shows assets instead of the repo tarball.
|
||||||
|
|
||||||
|
|
||||||
## [2.16] - 2020-01-12
|
## [2.16] - 2020-01-12
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2019 Tobias Gruetzmacher
|
# Copyright (C) 2015-2020 Tobias Gruetzmacher
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
@ -10,11 +10,15 @@ import os
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
|
|
||||||
import dosagelib
|
import dosagelib
|
||||||
from dosagelib import configuration
|
|
||||||
from . import http
|
from . import http
|
||||||
|
|
||||||
|
|
||||||
UPDATE_URL = "https://api.github.com/repos/webcomics/dosage/releases/latest"
|
UPDATE_URL = 'https://api.github.com/repos/webcomics/dosage/releases/latest'
|
||||||
|
EXTPRIO = {
|
||||||
|
'.exe': 1 if os.name == 'nt' else 9,
|
||||||
|
'.whl': 2,
|
||||||
|
'.gz': 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def check_update():
|
def check_update():
|
||||||
|
@ -38,20 +42,22 @@ def check_update():
|
||||||
return True, (version, None)
|
return True, (version, None)
|
||||||
|
|
||||||
|
|
||||||
|
def asset_key(asset):
|
||||||
|
return EXTPRIO.get(os.path.splitext(asset['browser_download_url'])[1], 99)
|
||||||
|
|
||||||
|
|
||||||
def get_online_version():
|
def get_online_version():
|
||||||
"""Download update info and parse it."""
|
"""Download update info and parse it."""
|
||||||
page = http.default_session.get(UPDATE_URL).json()
|
page = http.default_session.get(UPDATE_URL).json()
|
||||||
version = page.get('tag_name', None)
|
version = page.get('tag_name', None)
|
||||||
|
|
||||||
if os.name == 'nt':
|
|
||||||
try:
|
|
||||||
url = next((x['browser_download_url'] for x in page['assets'] if
|
|
||||||
x['content_type'] == 'application/x-msdos-program'),
|
|
||||||
configuration.Url)
|
|
||||||
except KeyError:
|
|
||||||
url = None
|
url = None
|
||||||
else:
|
try:
|
||||||
url = page.get('tarball_url', None)
|
assets = sorted(page['assets'], key=asset_key)
|
||||||
|
if len(assets) > 0:
|
||||||
|
url = assets[0]['browser_download_url']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
return version, url
|
return version, url
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -46,19 +47,32 @@ class TestDosage(object):
|
||||||
@responses.activate
|
@responses.activate
|
||||||
def test_update_available(self, capsys):
|
def test_update_available(self, capsys):
|
||||||
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
||||||
json={'tag_name': '9999.0', 'tarball_url': 'NOWHERE'})
|
json={'tag_name': '9999.0', 'assets': [
|
||||||
|
{'browser_download_url': 'TEST.whl'},
|
||||||
|
{'browser_download_url': 'TEST.exe'},
|
||||||
|
]})
|
||||||
cmd_ok('--version', '-v')
|
cmd_ok('--version', '-v')
|
||||||
captured = capsys.readouterr()
|
captured = capsys.readouterr()
|
||||||
|
best = 'TEST.exe' if os.name == 'nt' else 'TEST.whl'
|
||||||
|
assert best in captured.out
|
||||||
assert 'A new version' in captured.out
|
assert 'A new version' in captured.out
|
||||||
|
|
||||||
@responses.activate
|
@responses.activate
|
||||||
def test_no_update_available(self, capsys):
|
def test_no_update_available(self, capsys):
|
||||||
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
||||||
json={'tag_name': '1.0', 'tarball_url': 'NOWHERE'})
|
json={'tag_name': '1.0'})
|
||||||
cmd_ok('--version', '-v')
|
cmd_ok('--version', '-v')
|
||||||
captured = capsys.readouterr()
|
captured = capsys.readouterr()
|
||||||
assert 'Detected local or development' in captured.out
|
assert 'Detected local or development' in captured.out
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_current(self, capsys):
|
||||||
|
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
||||||
|
json={'tag_name': dosagelib.__version__})
|
||||||
|
cmd_ok('--version', '-v')
|
||||||
|
captured = capsys.readouterr()
|
||||||
|
assert captured.out.endswith('issues\n')
|
||||||
|
|
||||||
@responses.activate
|
@responses.activate
|
||||||
def test_update_broken(self, capsys):
|
def test_update_broken(self, capsys):
|
||||||
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
|
||||||
|
|
Loading…
Reference in a new issue