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

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 

7 

8 

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

14 

15 vinfo = check_larchversion() 

16 self.update_available = vinfo.update_available 

17 

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

21 

22 def addline(text): 

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

24 

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

32 

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

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

35 panel.Add((5, 5)) 

36 

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) 

50 

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

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

53 panel.pack() 

54 

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