]> git.phdru.name Git - bookmarks_db.git/blobdiff - bkmk_objects.py
Fix(Py3): Fix `list.join(separator)`
[bookmarks_db.git] / bkmk_objects.py
index b1d20739a554c94f4d5cb0d2c52c17bf12f06fee..b9dabff1e316a66c36d14a9f3d0911f4b60f6b2c 100644 (file)
@@ -14,10 +14,19 @@ __all__ = ['Folder', 'Bookmark', 'Ruler', 'Walker', 'Writer', 'Robot',
            ]
 
 
-import os, urllib
+import os
+try:
+    from urllib.parse import quote, \
+        splittype, splithost, splituser, splitpasswd, \
+        splitport
+except ImportError:
+    from urllib import quote, \
+        splittype, splithost, splituser, splitpasswd, \
+        splitport
 
 BKMK_FORMAT = os.environ.get("BKMK_FORMAT", "MOZILLA")
 
+
 class Folder(list):
     isFolder = 1
     isBookmark = 0
@@ -29,7 +38,7 @@ class Folder(list):
         self.last_modified = last_modified
 
     def walk_depth(self, walker, level=0):
-        if hasattr(self, "header"): # root folder
+        if hasattr(self, "header"):  # root folder
             prune = 0
             walker.root_folder(self)
         else:
@@ -56,14 +65,14 @@ class Bookmark(object):
     def __init__(self, href, add_date, last_visit=None, last_modified=None,
                  keyword=None, comment='', icon_href=None, icon=None,
                  charset=None, parser_charset=None):
-        protocol, request = urllib.splittype(href)
+        protocol, request = splittype(href)
         user, password, port = None, None, None
-        host, path = urllib.splithost(request)
+        host, path = splithost(request)
         if host:
-            user, host = urllib.splituser(host)
+            user, host = splituser(host)
             if user:
-                user, password = urllib.splitpasswd(user)
-            host, port = urllib.splitport(host)
+                user, password = splitpasswd(user)
+            host, port = splitport(host)
             if port: port = int(port)
 
         if protocol == 'place':
@@ -71,12 +80,12 @@ class Bookmark(object):
         else:
             href = protocol + "://"
         if user:
-            href += urllib.quote(user)
+            href += quote(user)
             if password:
-                href += ':' + urllib.quote(password)
+                href += ':' + quote(password)
             href += '@'
         if host:
-            href += host.decode(parser_charset or 'utf-8').encode('idna')
+            href += host.encode('idna').decode('ascii')
             if port:
                 href += ':%d' % port
         if path:
@@ -140,7 +149,7 @@ class Robot(object):
         self.log = log
 
     def stop(self):
-        pass # Nothing to do on cleanup
+        pass  # Nothing to do on cleanup
 
 
 # Helper class to make inverese links (nodes linked to their parent)
@@ -150,7 +159,8 @@ class InverseLinker(Walker):
 
     def start_folder(self, f, level):
         f.parent = self.parent_stack[-1]
-        self.parent_stack.append(f) # Push the folder onto the stack of parents
+        # Push the folder onto the stack of parents
+        self.parent_stack.append(f)
 
     def end_folder(self, f, level):
         del self.parent_stack[-1]   # Pop off the stack
@@ -181,7 +191,8 @@ class Linear(Walker):
         self.add_object(r)
 
 
-# Helper - make linked linear represenatation of the tree, suitable to be stored in sequential storage
+# Helper - make linked linear represenatation of the tree,
+# suitable to be stored in sequential storage.
 def make_linear(root_folder):
     linker = InverseLinker()
     root_folder.walk_depth(linker)
@@ -190,7 +201,8 @@ def make_linear(root_folder):
     root_folder.walk_depth(linear)
 
 
-# Helper, opposite of make_linear - make a tree from the linked linear representation
+# Helper, opposite of make_linear -
+# make a tree from the linked linear representation.
 def make_tree(linear):
     root_folder = linear[0]
     del linear[0]
@@ -200,6 +212,7 @@ def make_tree(linear):
 
     return root_folder
 
+
 def break_tree(linear):
     del linear[0]
 
@@ -212,11 +225,13 @@ def quote_title(title):
         title = title.replace("'", "'")
     return title
 
+
 def unquote_title(title):
     if BKMK_FORMAT == "MOZILLA":
         from HTMLParser import HTMLParser
-        title = HTMLParser().unescape(title.replace("&", '&').decode('utf-8'))
-        title = title.encode('utf-8').replace("'", "'")
+        title = HTMLParser().unescape(
+            title.replace("&", '&'))
+        title = title.replace("'", "'")
     return title
 
 
@@ -229,6 +244,7 @@ def parse_params(param_str):
         param_list[key] = value
     return main_param, param_list
 
+
 def set_params(obj, params):
     if hasattr(params, "items"):
         params = params.items()