Coverage for /Users/Newville/Codes/xraylarch/larch/wxlib/larch_updater.py: 19%
47 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-11-09 10:08 -0600
« prev ^ index » next coverage.py v7.3.2, created at 2023-11-09 10:08 -0600
1import wx
2import sys
3from collections import namedtuple
4from pyshortcuts import platform
5from ..version import check_larchversion
6from . import GridPanel, SimpleText, OkCancel, LEFT, HLine, Button
9class LarchUpdaterDialog(wx.Dialog):
10 """dialog for running larch updates"""
11 def __init__(self, parent, caller='this program', **kws):
12 title = "Checking for Larch updates..."
13 wx.Dialog.__init__(self, parent, wx.ID_ANY, title=title, size=(525, 250))
15 vinfo = check_larchversion()
16 self.update_available = vinfo.update_available
18 upgrade_pycmd = f'{sys.executable} -m pip install --upgrade xraylarch'
19 panel = GridPanel(self, ncols=3, nrows=4, pad=4, itemstyle=LEFT)
20 panel.Add((5, 5))
22 def addline(text):
23 panel.Add(SimpleText(panel, text), newrow=True)
25 def toclipboard(event=None, **kws):
26 cb = wx.TheClipboard
27 if cb.IsOpened():
28 cb.Close()
29 cb.Open()
30 cb.SetData(wx.TextDataObject(upgrade_pycmd))
31 cb.Close()
33 addline(' Installed Version: {:s}'.format(vinfo.local_version))
34 addline(' Latest Version: {:s}'.format(vinfo.remote_version))
35 panel.Add((5, 5))
37 if not vinfo.update_available:
38 addline(' Your version is up to date!')
39 else:
40 if platform.startswith('win'):
41 addline(f' Close {caller} and Run "Larch Updater" from your Larch Desktop Folder')
42 else:
43 addline(f' Click OK to update (you will need to restart {caller})')
44 panel.Add((5, 5))
45 addline(' You can also update from a Terminal with:')
46 addline(f' {upgrade_pycmd}')
47 panel.Add(Button(panel, 'Copy Upgrade Command To Clipboard',
48 action=toclipboard), newrow=True)
49 panel.Add((5, 5), newrow=True)
51 panel.Add(HLine(panel, size=(240, 3)), dcol=2, newrow=True)
52 panel.Add(OkCancel(panel), dcol=2, newrow=True)
53 panel.pack()
55 def GetResponse(self):
56 self.Raise()
57 out = namedtuple('UpgradeResponse', ('ok', 'run_updates'))
58 result = out((wx.ID_OK==self.ShowModal()), self.update_available)
59 if platform.startswith('win'):
60 result = out(False, self.update_available)
61 return result