]> git.phdru.name Git - dotfiles.git/blobdiff - bin/webbrowser-encode-url
Feat(bin): Port scripts to Python 3
[dotfiles.git] / bin / webbrowser-encode-url
index cc8f8279e8bffc085c0fcb6ad4933a2e16feec8f..8c88c9a6fadadfa435544edeabc5d5d43cf70d8c 100755 (executable)
@@ -1,8 +1,17 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
-from cgi import parse_qsl
-from getopt import getopt
-import sys, urllib
+try:
+    from urllib.parse import parse_qsl, urlencode, \
+        quote, quote_plus, unquote, unquote_plus, \
+        splittype, splithost, splituser, splitpasswd, \
+        splitport, splittag, splitquery
+except ImportError:
+    from cgi import parse_qsl
+    from urllib import urlencode, quote, quote_plus, unquote, unquote_plus, \
+        splittype, splithost, splituser, splitpasswd, \
+        splitport, splittag, splitquery
+from getopt import getopt, GetoptError
+import sys
 from m_lib.defenc import default_encoding
 
 # This must be imported and called before webbrowser
@@ -20,7 +29,7 @@ try:
 except GetoptError:
     usage()
 
-if len(arguments) <> 1:
+if len(arguments) != 1:
     usage()
 
 encoding = None
@@ -38,45 +47,58 @@ if not encoding:
     encoding = default_encoding
 
 url = arguments[0]
-protocol, request = urllib.splittype(url)
+protocol, request = splittype(url)
 user, password, port = None, None, None
-host, path = urllib.splithost(request)
+host, path = splithost(request)
 if host:
-   user, host = urllib.splituser(host)
-   if user:
-      user, password = urllib.splitpasswd(user)
-   host, port = urllib.splitport(host)
-   if port: port = int(port)
-path, tag = urllib.splittag(path)
-path, query = urllib.splitquery(path)
-path = urllib.unquote(path)
-if tag: tag = urllib.unquote_plus(tag)
+    user, host = splituser(host)
+    if user:
+        user, password = splitpasswd(user)
+    host, port = splitport(host)
+    if port: port = int(port)
+path, tag = splittag(path)
+path, query = splitquery(path)
+path = unquote(path)
+if tag: tag = unquote_plus(tag)
 
 if query:
-   qlist = []
-   for name, value in parse_qsl(query):
-      name = unicode(name, default_encoding).encode(encoding)
-      value = unicode(value, default_encoding).encode(encoding)
-      qlist.append((name, value))
+    qlist = []
+    for name, value in parse_qsl(query):
+        if isinstance(name, bytes):
+            name = name.decode(default_encoding)
+            value = value.decode(default_encoding)
+        name = name.encode(encoding)
+        value = value.encode(encoding)
+        qlist.append((name, value))
 
 url = protocol + "://"
 if user:
-   url += urllib.quote(unicode(user, default_encoding).encode(encoding))
-   if password:
-      url += ':' + urllib.quote(unicode(password, default_encoding).encode(encoding))
-   url += '@'
+    if isinstance(user, bytes):
+        user = user.decode(default_encoding)
+    url += quote(user.encode(encoding))
+    if password:
+        if isinstance(password, bytes):
+            password = password.decode(default_encoding)
+        url += ':' + quote(password.encode(encoding))
+    url += '@'
 if host:
-   url += host.decode(encoding).encode('idna')
-   if port:
-      url += ':%d' % port
+    if isinstance(host, bytes):
+        host = host.decode(encoding)
+    url += host.encode('idna').decode('ascii')
+    if port:
+        url += ':%d' % port
 if path:
-   if protocol == "file":
-      url += urllib.quote(path)
-   else:
-      url += urllib.quote(unicode(path, default_encoding).encode(encoding))
+    if protocol == "file":
+        url += quote(path)
+    else:
+        if isinstance(path, bytes):
+            path = path.decode(default_encoding)
+        url += quote(path.encode(encoding))
 if query:
-   url += '?' + urllib.urlencode(qlist)
+    url += '?' + urlencode(qlist)
 if tag:
-   url += '#' + urllib.quote_plus(unicode(tag, default_encoding).encode(encoding))
+    if isinstance(tag, bytes):
+        tag = tag.decode(default_encoding)
+    url += '#' + quote_plus(tag.encode(encoding))
 
 webbrowser.open(url, new)