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