X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=sort_db.py;fp=sort_db.py;h=60e3d4179437ac47d0de23c81de13c65af1a3ea0;hb=fb5c3b2b91aeeb615d6d6d890491af3fdff69556;hp=0000000000000000000000000000000000000000;hpb=2e82a937f80392639176d9a414b55ffb8164ebca;p=bookmarks_db.git diff --git a/sort_db.py b/sort_db.py new file mode 100755 index 0000000..60e3d41 --- /dev/null +++ b/sort_db.py @@ -0,0 +1,117 @@ +#! /usr/local/bin/python -O +""" + Sort bookmarks DB according to a rule: + -a - by AddDate + -v - by LastVisit + -m - by LastModified + -z - by Size + -t - by LastTested + default is -m + -r - reverse the sort order + + Written by BroytMann, Apr 2000. Copyright (C) 2000 PhiloSoft Design +""" + + +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 + + return cmp(attr1, attr2) + + +def walk_linear(linear, walker): + 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" + + +if __name__ == '__main__': + run()