]> git.phdru.name Git - bookmarks_db.git/blob - sort_db.py
"BroytMann" => "Broytman".
[bookmarks_db.git] / sort_db.py
1 #! /usr/bin/env python
2 """
3    Sort bookmarks DB according to a rule:
4       -a - by AddDate
5       -v - by LastVisit
6       -m - by LastModified
7       -z - by Size
8       -t - by LastTested
9    default is -m
10       -r - reverse the sort order
11
12    Written by Broytman, Apr 2000. Copyright (C) 2000 PhiloSoft Design
13 """
14
15
16 import sys
17
18
19 class SortBy:
20    def __init__(self, sort_by):
21       self.sort_by = sort_by
22
23    def __call__(self, o1, o2):
24       try:
25          attr1 = int(getattr(o1, self.sort_by))
26       except (AttributeError, TypeError, ValueError):
27          return 1
28
29       try:
30          attr2 = int(getattr(o2, self.sort_by))
31       except (AttributeError, TypeError, ValueError):
32          return -1
33
34       return cmp(attr1, attr2)
35
36
37 def walk_linear(linear, walker):
38    for object in linear:
39       if object.isBookmark:
40          walker.bookmark(object, 0)
41
42
43 def run():
44    from getopt import getopt
45    optlist, args = getopt(sys.argv[1:], "avmztrs")
46
47    sort_by = "last_modified"
48    reverse = 0
49    report_stats = 1
50
51    for _opt, _arg in optlist:
52       if _opt == '-a':
53          sort_by = "add_date"
54       elif _opt == '-v':
55          sort_by = "last_visit"
56       elif _opt == '-m':
57          sort_by = "last_modified"
58       elif _opt == '-z':
59          sort_by = "size"
60       elif _opt == '-t':
61          sort_by = "last_tested"
62       elif _opt == '-r':
63          reverse = 1
64       elif _opt == '-s':
65          report_stats = 0
66    try:
67       del _opt, _arg
68    except NameError:
69       pass
70
71    from storage import storage
72    storage = storage()
73
74    if report_stats:
75       sys.stdout.write("Loading %s: " % storage.filename)
76       sys.stdout.flush()
77
78    root_folder = storage.load()
79
80    if report_stats:
81       print "Ok"
82       sys.stdout.write("Sorting (by %s): " % sort_by)
83       sys.stdout.flush()
84
85    from bkmk_objects import make_linear
86    make_linear(root_folder)
87
88    linear = root_folder.linear
89    del linear[0] # exclude root folder from sorting
90
91    by = SortBy(sort_by)
92    linear.sort(by)
93
94    from writers import writer
95    output_filename = "%s-sorted_by-%s" % (writer.filename, sort_by)
96
97    if reverse:
98       linear.reverse()
99       output_filename = output_filename + "-reverse"
100
101    if report_stats:
102       print "done"
103       sys.stdout.write("Writing %s: " % output_filename)
104       sys.stdout.flush()
105
106    outfile = open(output_filename, 'w')
107    writer = writer(outfile)
108    writer.root_folder(root_folder)
109    walk_linear(linear, writer)
110    outfile.close()
111
112    if report_stats:
113       print "Ok"
114
115
116 if __name__ == '__main__':
117    run()