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