]> git.phdru.name Git - bookmarks_db.git/blobdiff - sort_db.py
Fix(Robot): Stop splitting and un-splitting URLs
[bookmarks_db.git] / sort_db.py
index 60e3d4179437ac47d0de23c81de13c65af1a3ea0..4dd117e51219cbf818d3c9ce4db004b676e07cf2 100755 (executable)
@@ -1,6 +1,5 @@
-#! /usr/local/bin/python -O
-"""
-   Sort bookmarks DB according to a rule:
+#! /usr/bin/env python3
+"""Sort bookmarks DB according to a rule:
       -a - by AddDate
       -v - by LastVisit
       -m - by LastModified
    default is -m
       -r - reverse the sort order
 
-   Written by BroytMann, Apr 2000. Copyright (C) 2000 PhiloSoft Design
+This file is a part of Bookmarks database and Internet robot.
+
 """
 
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 2000-2023 PhiloSoft Design"
+__license__ = "GNU GPL"
 
 import sys
 
 
-class SortBy:
-   def __init__(self, sort_by):
-      self.sort_by = sort_by
-
-   def __call__(self, o1, o2):
-      try:
-         attr1 = int(getattr(o1, self.sort_by))
-      except (TypeError, AttributeError):
-         return 1
-
-      try:
-         attr2 = int(getattr(o2, self.sort_by))
-      except (TypeError, AttributeError):
-         return -1
+class SortKey(object):
+    def __init__(self, sort_by):
+        self.sort_by = sort_by
 
-      return cmp(attr1, attr2)
+    def __call__(self, o1):
+        try:
+            return int(getattr(o1, self.sort_by))
+        except (AttributeError, TypeError, ValueError):
+            return 1
 
 
 def walk_linear(linear, walker):
-   for object in linear:
-      if object.isBookmark:
-         walker.bookmark(object, 0)
+    for object in linear:
+        if object.isBookmark:
+            walker.bookmark(object, 0)
 
 
 def run():
-   from getopt import getopt
-   optlist, args = getopt(sys.argv[1:], "avmztrs")
-
-   sort_by = "last_modified"
-   reverse = 0
-   report_stats = 1
-
-   for _opt, _arg in optlist:
-      if _opt == '-a':
-         sort_by = "add_date"
-      elif _opt == '-v':
-         sort_by = "last_visit"
-      elif _opt == '-m':
-         sort_by = "last_modified"
-      elif _opt == '-z':
-         sort_by = "size"
-      elif _opt == '-t':
-         sort_by = "last_tested"
-      elif _opt == '-r':
-         reverse = 1
-      elif _opt == '-s':
-         report_stats = 0
-   try:
-      del _opt, _arg
-   except NameError:
-      pass
-
-   from storage import storage
-   storage = storage()
-
-   if report_stats:
-      sys.stdout.write("Loading %s: " % storage.filename)
-      sys.stdout.flush()
-
-   root_folder = storage.load()
-
-   if report_stats:
-      print "Ok"
-      sys.stdout.write("Sorting (by %s): " % sort_by)
-      sys.stdout.flush()
-
-   from bkmk_objects import make_linear
-   make_linear(root_folder)
-
-   linear = root_folder.linear
-   del linear[0] # exclude root folder from sorting
-
-   by = SortBy(sort_by)
-   linear.sort(by)
-
-   from writers import writer
-   output_filename = "%s-sorted_by-%s" % (writer.filename, sort_by)
-
-   if reverse:
-      linear.reverse()
-      output_filename = output_filename + "-reverse"
-
-   if report_stats:
-      print "done"
-      sys.stdout.write("Writing %s: " % output_filename)
-      sys.stdout.flush()
-
-   outfile = open(output_filename, 'w')
-   writer = writer(outfile)
-   writer.root_folder(root_folder)
-   walk_linear(linear, writer)
-   outfile.close()
-
-   if report_stats:
-      print "Ok"
+    from getopt import getopt
+    optlist, args = getopt(sys.argv[1:], "avmztrs")
+
+    sort_by = "last_modified"
+    reverse = 0
+    report_stats = 1
+
+    for _opt, _arg in optlist:
+        if _opt == '-a':
+            sort_by = "add_date"
+        elif _opt == '-v':
+            sort_by = "last_visit"
+        elif _opt == '-m':
+            sort_by = "last_modified"
+        elif _opt == '-z':
+            sort_by = "size"
+        elif _opt == '-t':
+            sort_by = "last_tested"
+        elif _opt == '-r':
+            reverse = 1
+        elif _opt == '-s':
+            report_stats = 0
+    try:
+        del _opt, _arg
+    except NameError:
+        pass
+
+    from storage import storage
+    storage = storage()
+
+    if report_stats:
+        sys.stdout.write("Loading %s: " % storage.filename)
+        sys.stdout.flush()
+
+    root_folder = storage.load()
+
+    if report_stats:
+        print("Ok")
+        sys.stdout.write("Sorting (by %s): " % sort_by)
+        sys.stdout.flush()
+
+    from bkmk_objects import make_linear
+    make_linear(root_folder)
+
+    linear = root_folder.linear
+    del linear[0]  # exclude root folder from sorting
+
+    sort_key = SortKey(sort_by)
+    linear.sort(key=sort_key)
+
+    from writers import writer
+    output_filename = "%s-sorted_by-%s" % (writer.filename, sort_by)
+
+    if reverse:
+        linear.reverse()
+        output_filename = output_filename + "-reverse"
+
+    if report_stats:
+        print("done")
+        sys.stdout.write("Writing %s: " % output_filename)
+        sys.stdout.flush()
+
+    outfile = open(output_filename, 'wt', encoding='utf-8')
+    writer = writer(outfile)
+    writer.root_folder(root_folder)
+    walk_linear(linear, writer)
+    outfile.close()
+
+    if report_stats:
+        print("Ok")
 
 
 if __name__ == '__main__':
-   run()
+    run()