From 50dd74dbe865c7f6ca153f858d606df4e57f44d5 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sat, 10 Feb 2018 00:59:25 -0500 Subject: [PATCH] Add packaging requirement, and use it's PEP 440 version parsing for version comparisons. --- gui/mainFrame.py | 4 ++-- gui/updateDialog.py | 11 ++++++----- requirements.txt | 3 ++- service/update.py | 30 ++++++++++-------------------- 4 files changed, 20 insertions(+), 28 deletions(-) diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 2aa6bb7508..7b40c7d11c 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -243,8 +243,8 @@ def __init__(self, title="pyfa"): self.titleTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.updateTitle, self.titleTimer) - def ShowUpdateBox(self, release): - dlg = UpdateDialog(self, release) + def ShowUpdateBox(self, release, version): + dlg = UpdateDialog(self, release, version) dlg.ShowModal() def LoadPreviousOpenFits(self): diff --git a/gui/updateDialog.py b/gui/updateDialog.py index 6713bec7da..a38de401f9 100644 --- a/gui/updateDialog.py +++ b/gui/updateDialog.py @@ -33,11 +33,12 @@

pyfa {0}

-

{1}

+
{1}

{2} {3} @@ -45,7 +46,7 @@ class UpdateDialog(wx.Dialog): - def __init__(self, parent, release): + def __init__(self, parent, release, version): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="pyfa Update Available", pos=wx.DefaultPosition, size=wx.Size(550, 450), style=wx.DEFAULT_DIALOG_STYLE) @@ -72,7 +73,7 @@ def __init__(self, parent, release): self.browser.SetPage(html_tmpl.format( self.releaseInfo['tag_name'], releaseDate.strftime('%B %d, %Y'), - "

This is a pre-release, be prepared for unstable features

" if self.releaseInfo['prerelease'] else "", + "

This is a pre-release, be prepared for unstable features

" if version.is_prerelease else "", markdowner.convert(self.releaseInfo['body']) ),"") diff --git a/requirements.txt b/requirements.txt index f1a1bb6b99..72c4f7e008 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ matplotlib >= 2.0.0 python-dateutil requests >= 2.0.0 sqlalchemy >= 1.0.5 -markdown2 \ No newline at end of file +markdown2 +packaging \ No newline at end of file diff --git a/service/update.py b/service/update.py index 7196b2a594..e4cdbe03f6 100644 --- a/service/update.py +++ b/service/update.py @@ -30,6 +30,8 @@ from service.network import Network from service.settings import UpdateSettings from logbook import Logger +from packaging.version import Version + pyfalog = Logger(__name__) @@ -46,7 +48,7 @@ def run(self): network = Network.getInstance() try: - response = network.request('https://api.github.com/repos/pyfa-org/Pyfa/releases', network.UPDATE) + response = network.request('https://api.github.com/repos/blitzmann/Pyfa/releases', network.UPDATE) jsonResponse = json.loads(response.read()) jsonResponse.sort( key=lambda x: calendar.timegm(dateutil.parser.parse(x['published_at']).utctimetuple()), @@ -54,8 +56,11 @@ def run(self): ) for release in jsonResponse: + rVersion = Version(release['tag_name']) + cVersion = Version(config.version) + # Suppress pre releases - if release['prerelease'] and self.settings.get('prerelease'): + if rVersion.is_prerelease and self.settings.get('prerelease'): continue # Handle use-case of updating to suppressed version @@ -66,24 +71,9 @@ def run(self): if release['tag_name'] == self.settings.get('version'): break - # Set the release version that we will be comparing with. - if release['prerelease']: - rVersion = release['tag_name'].replace('singularity-', '', 1) - else: - rVersion = release['tag_name'].replace('v', '', 1) - - if config.tag is 'git' and \ - not release['prerelease'] and \ - self.versiontuple(rVersion) >= self.versiontuple(config.version): - wx.CallAfter(self.callback, release) # git (dev/Singularity) -> Stable - elif config.expansionName is not "Singularity": - if release['prerelease']: - wx.CallAfter(self.callback, release) # Stable -> Singularity - elif self.versiontuple(rVersion) > self.versiontuple(config.version): - wx.CallAfter(self.callback, release) # Stable -> Stable - else: - if release['prerelease'] and rVersion > config.expansionVersion: - wx.CallAfter(self.callback, release) # Singularity -> Singularity + if rVersion > cVersion: + wx.CallAfter(self.callback, release, rVersion) + break except Exception as e: pyfalog.error("Caught exception in run")