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