This commit is contained in:
Artem Zavyalov 2023-07-01 22:48:53 -04:00 committed by GitHub
commit c037c24b03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 3 deletions

15
server-list.txt Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<settings>
<servers>
<server url="http://speedtest.deltacable.com:8080/speedtest/upload.php" lat="49.0902" lon="-123.0652" name="Delta, BC" country="Canada" cc="CA" sponsor="Eastlink" id="22154" host="speedtest.deltacable.com:8080"/>
<server url="https://speedtest.vc.shawcable.net:8080/speedtest/upload.php" lat="49.2505" lon="-123.1119" name="Vancouver, BC" country="Canada" cc="CA" sponsor="Shaw Communications" id="4243" host="speedtest.vc.shawcable.net:8080"/>
<server url="http://speedtest.skywaywest.net:8080/speedtest/upload.php" lat="49.2505" lon="-123.1119" name="Vancouver, BC" country="Canada" cc="CA" sponsor="Skyway West Business Internet Services" id="3318" host="speedtest.skywaywest.net:8080"/>
<server url="http://speedtest-6.aebc.com:8080/speedtest/upload.php" lat="49.2505" lon="-123.1119" name="Vancouver, BC" country="Canada" cc="CA" sponsor="AEBC Internet" id="41509" host="speedtest-6.aebc.com:8080"/>
<server url="http://speedtest.van3.fibretel.ca:8080/speedtest/upload.php" lat="49.2505" lon="-123.1119" name="Vancouver, BC" country="Canada" cc="CA" sponsor="FIBRETEL" id="58622" host="speedtest.van3.fibretel.ca:8080"/>
<server url="http://fast.rockisland.net:8080/speedtest/upload.php" lat="48.5343" lon="-123.0171" name="Friday Harbor, WA" country="United States" cc="US" sponsor="Rock Island Communications" id="26805" host="fast.rockisland.net:8080"/>
<server url="http://speedtest.cityofanacortes.org:8080/speedtest/upload.php" lat="48.5126" lon="-122.6127" name="Anacortes, WA" country="United States" cc="US" sponsor="City of Anacortes" id="31110" host="speedtest.cityofanacortes.org:8080"/>
<server url="http://ost02.whidbey.net:8080/speedtest/upload.php" lat="48.0401" lon="-122.4063" name="Langley, WA" country="United States" cc="US" sponsor="Whidbey Telecom" id="54406" host="ost02.whidbey.net:8080"/>
<server url="https://speedtestvm-evrtwaxa.as20055.net:8080/speedtest/upload.php" lat="47.9790" lon="-122.2021" name="Everett, WA" country="United States" cc="US" sponsor="Ziply Fiber" id="42157" host="speedtestvm-evrtwaxa.as20055.net:8080"/>
<server url="http://speedtest1-bothwaxb.as20055.net:8080/speedtest/upload.php" lat="47.7717" lon="-122.2044" name="Bothell, WA" country="United States" cc="US" sponsor="Ziply Fiber" id="51693" host="speedtest1-bothwaxb.as20055.net:8080"/>
</servers>
</settings>

View File

@ -1237,7 +1237,7 @@ class Speedtest(object):
return self.config return self.config
def get_servers(self, servers=None, exclude=None): def get_servers(self, servers=None, exclude=None, load_servers=None):
"""Retrieve a the list of speedtest.net servers, optionally filtered """Retrieve a the list of speedtest.net servers, optionally filtered
to servers matching those specified in the ``servers`` argument to servers matching those specified in the ``servers`` argument
""" """
@ -1326,6 +1326,14 @@ class Speedtest(object):
except (SyntaxError, xml.parsers.expat.ExpatError): except (SyntaxError, xml.parsers.expat.ExpatError):
raise ServersRetrievalError() raise ServersRetrievalError()
#load from file if exist
printer('Servers File:\n%s' % load_servers, debug=True)
if load_servers is not None:
if os.path.isfile(load_servers):
serverfile = ET.parse(load_servers)
serverlist = serverfile.getroot()
elements = elements + list(set(serverlist[0])-set(elements))
for server in elements: for server in elements:
try: try:
attrib = server.attrib attrib = server.attrib
@ -1757,6 +1765,8 @@ def parse_args():
help='Suppress verbose output, only show basic ' help='Suppress verbose output, only show basic '
'information in JSON format. Speeds listed in ' 'information in JSON format. Speeds listed in '
'bit/s and not affected by --bytes') 'bit/s and not affected by --bytes')
parser.add_argument('--load-servers', action='append',
help='Load list of servers from file')
parser.add_argument('--list', action='store_true', parser.add_argument('--list', action='store_true',
help='Display a list of speedtest.net servers ' help='Display a list of speedtest.net servers '
'sorted by distance') 'sorted by distance')
@ -1891,9 +1901,18 @@ def shell():
printer('Cannot retrieve speedtest configuration', error=True) printer('Cannot retrieve speedtest configuration', error=True)
raise SpeedtestCLIError(get_exception()) raise SpeedtestCLIError(get_exception())
if args.load_servers:
printer('Loading file with servers...', quiet)
if not os.path.isfile(args.load_servers[0]):
raise SystemExit('ERROR: Cannot load specified %s file' % args.load_servers)
file = args.load_servers[0]
else:
file = None
if args.list: if args.list:
try: try:
speedtest.get_servers() speedtest.get_servers(load_servers=file)
except (ServersRetrievalError,) + HTTP_ERRORS: except (ServersRetrievalError,) + HTTP_ERRORS:
printer('Cannot retrieve speedtest server list', error=True) printer('Cannot retrieve speedtest server list', error=True)
raise SpeedtestCLIError(get_exception()) raise SpeedtestCLIError(get_exception())
@ -1916,7 +1935,7 @@ def shell():
if not args.mini: if not args.mini:
printer('Retrieving speedtest.net server list...', quiet) printer('Retrieving speedtest.net server list...', quiet)
try: try:
speedtest.get_servers(servers=args.server, exclude=args.exclude) speedtest.get_servers(servers=args.server, exclude=args.exclude, load_servers=file)
except NoMatchedServers: except NoMatchedServers:
raise SpeedtestCLIError( raise SpeedtestCLIError(
'No matched servers: %s' % 'No matched servers: %s' %