aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Levine <plevine457@gmail.com>2023-07-24 18:40:02 -0400
committerSam James <sam@gentoo.org>2023-08-07 00:28:34 +0100
commitfe715a306754a4df2d05a3a24034d015c16377bf (patch)
tree867352c46433a691b27c4a0ed98250e0f03ba1b3
parentmain: Fix --all option parsing (diff)
downloadmirrorselect-fe715a306754a4df2d05a3a24034d015c16377bf.tar.gz
mirrorselect-fe715a306754a4df2d05a3a24034d015c16377bf.tar.bz2
mirrorselect-fe715a306754a4df2d05a3a24034d015c16377bf.zip
extractor.py: parse proto from the uri
The protocol can be parsed from the URI so we can get rid of the protocol tag altogether. Bug: https://bugs.gentoo.org/911183 Suggested-by: Florian Schmaus <flow@gentoo.org> Suggested-by: Sam James <sam@gentoo.org> Signed-off-by: Peter Levine <plevine457@gmail.com> Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r--mirrorselect/mirrorparser3.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/mirrorselect/mirrorparser3.py b/mirrorselect/mirrorparser3.py
index 089f949..444bc11 100644
--- a/mirrorselect/mirrorparser3.py
+++ b/mirrorselect/mirrorparser3.py
@@ -44,6 +44,22 @@ class MirrorParser3:
def _reset(self):
self._dict = {}
+ def _get_proto(self, uri=None):
+ if not uri: # Don't parse if empty
+ return None;
+ try:
+ import sys;
+ if sys.version_info[0] >= 3:
+ from urllib.parse import urlparse
+ return urlparse(uri).scheme
+ else:
+ from urllib2 import Request
+ return Request(uri).get_type()
+ except Exception as e: # Add general exception to catch errors
+ from mirrorselect.output import Output
+ Output.write(('_get_proto(): Exception while parsing the protocol '
+ 'for URI %s: %s\n')% (uri, e), 2)
+
def parse(self, text):
self._reset()
for mirrorgroup in ET.XML(text):
@@ -60,7 +76,7 @@ class MirrorParser3:
"region": mirrorgroup.get("region"),
"ipv4": e.get("ipv4"),
"ipv6": e.get("ipv6"),
- "proto": e.get("protocol"),
+ "proto": e.get("protocol") or self._get_proto(uri),
}
def tuples(self):