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