5
5
"""
6
6
import platform
7
7
import re
8
- import socket
9
- import sys
8
+ import requests
10
9
11
10
from MAVProxy .modules .lib import mp_util
12
11
from MAVProxy .modules .lib import mp_module
17
16
from MAVProxy .modules .lib .mp_menu import MPMenuOpenWeblink
18
17
from MAVProxy .modules .lib .mp_menu import MPMenuChildMessageDialog
19
18
20
- if sys .version_info .major < 3 :
21
- import xmlrpclib
22
- else :
23
- basestring = str
24
- import xmlrpc .client as xmlrpclib
25
-
26
19
27
20
class HelpModule (mp_module .MPModule ):
28
21
def __init__ (self , mpstate ):
@@ -48,27 +41,7 @@ def __init__(self, mpstate):
48
41
self .wxVersion = ''
49
42
50
43
# check for updates, if able
51
- pypi = xmlrpclib .ServerProxy ('https://pypi.python.org/pypi' )
52
- available = None
53
- try :
54
- available = pypi .package_releases ('MAVProxy' )
55
- except socket .gaierror :
56
- pass
57
-
58
- if available :
59
- self .newversion = available [0 ]
60
- else :
61
- self .newversion = 'Error finding update'
62
-
63
- # and format the update string
64
- if not isinstance (self .newversion , basestring ):
65
- self .newversion = "Error finding update"
66
- elif re .search ('[a-zA-Z]' , self .newversion ):
67
- self .newversion = "Error finding update: " + self .newversion
68
- elif self .newversion .strip () == self .version .strip ():
69
- self .newversion = "Running latest version"
70
- else :
71
- self .newversion = "New version " + self .newversion + " available (currently running " + self .version + ")"
44
+ self .check_for_updates ()
72
45
73
46
if mp_util .has_wxpython :
74
47
self .menu_added_console = False
@@ -100,8 +73,39 @@ def __init__(self, mpstate):
100
73
))
101
74
])
102
75
76
+ def check_for_updates (self ):
77
+ url = "https://pypi.org/pypi/MAVProxy/json"
78
+ try :
79
+ response = requests .get (url )
80
+ except requests .exceptions .RequestException as e :
81
+ self .newversion = f"Error finding update: { e } "
82
+ return
83
+
84
+ if response .status_code != 200 :
85
+ self .newversion = f"HTTP error getting update ({ response .status_code } )"
86
+ return
87
+
88
+ self .newversion = response .json ()['info' ]['version' ]
89
+
90
+ # and format the update string
91
+ if not isinstance (self .newversion , str ):
92
+ self .newversion = "Error finding update"
93
+ elif re .search ('[a-zA-Z]' , self .newversion ):
94
+ self .newversion = "Error finding update: " + self .newversion
95
+ elif self .newversion .strip () == self .version .strip ():
96
+ self .newversion = "Running latest version"
97
+ else :
98
+ self .newversion = "New version " + self .newversion + " available (currently running " + self .version + ")"
99
+
103
100
def about_string (self ):
104
- return "MAVProxy Version " + self .version + "\n OS: " + self .host + "\n Python " + self .pythonversion + "\n WXPython " + self .wxVersion # noqa
101
+ bits = {
102
+ "MAVProxy Version" : self .version ,
103
+ "OS" : self .host ,
104
+ "Python" : self .pythonversion ,
105
+ "WXPython" : self .wxVersion ,
106
+ "LatestVersion" : self .newversion ,
107
+ }
108
+ return "" .join ([f"{ x [0 ]} : { x [1 ]} \n " for x in bits .items ()])
105
109
106
110
def idle_task (self ):
107
111
'''called on idle'''
0 commit comments