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

1import wx 

2import sys 

3from collections import namedtuple 

4from ..version import check_larchversion 

5from . import GridPanel, SimpleText, OkCancel, LEFT, HLine, Button 

6 

7 

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)) 

13 

14 vinfo = check_larchversion() 

15 self.update_available = vinfo.update_available 

16 

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)) 

20 

21 def addline(text): 

22 panel.Add(SimpleText(panel, text), newrow=True) 

23 

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() 

31 

32 addline(' Installed Version: {:s}'.format(vinfo.local_version)) 

33 addline(' Latest Version: {:s}'.format(vinfo.remote_version)) 

34 panel.Add((5, 5)) 

35 

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) 

46 

47 panel.Add(HLine(panel, size=(240, 3)), dcol=2, newrow=True) 

48 panel.Add(OkCancel(panel), dcol=2, newrow=True) 

49 panel.pack() 

50 

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