]> git.phdru.name Git - bookmarks_db.git/blob - db2bkmk.py
Add a few TODO items
[bookmarks_db.git] / db2bkmk.py
1 #! /usr/bin/env python
2 """Convert a bkmk database back to bookmarks.html (or other format defined by writer)
3
4 This file is a part of Bookmarks database and Internet robot.
5 """
6
7 __author__ = "Oleg Broytman <phd@phdru.name>"
8 __copyright__ = "Copyright (C) 2000-2012 PhiloSoft Design"
9 __license__ = "GNU GPL"
10
11 import sys
12
13
14 def run():
15    from getopt import getopt
16    optlist, args = getopt(sys.argv[1:], "sp:o:t:r")
17
18    report_stats = 1
19    prune = None
20
21    from writers import writer
22    output_filename = writer.filename
23
24    transl = 0
25    transl_name = "" # dictionary translation; default is no translation
26
27    for _opt, _arg in optlist:
28       if _opt == '-s':
29          report_stats = 0
30       if _opt == '-p':
31          prune = _arg
32       if _opt == '-o':
33          output_filename = _arg
34       if _opt == '-t':
35          transl = 1
36          transl_name = _arg
37       if _opt == '-r':
38          transl = 2
39    try:
40       del _opt, _arg
41    except NameError:
42       pass
43
44    if args:
45       sys.stderr.write("db2bkmk: too many arguments\n")
46       sys.stderr.write("Usage: db2bkmk [-s] [-p prune_folder] [-o filename] [-t trans] [-r]\n")
47       sys.exit(1)
48
49    from storage import storage
50    storage = storage()
51
52    if report_stats:
53       sys.stdout.write("Loading %s: " % storage.filename)
54       sys.stdout.flush()
55
56    root_folder = storage.load()
57
58    if report_stats:
59       print "Ok"
60       sys.stdout.write("Writing %s: " % output_filename)
61       sys.stdout.flush()
62
63
64    if transl:
65       new_ext = str(transl)
66       transl_d = {}
67
68       from m_lib.flad import fladm
69       transl_db = fladm.load_from_file(transl_name, fladm.check_record, ["URL1", "URL2"], [""])
70                                       # This prevents any other key to appear in transl_db ^
71
72       # Generate translation dictionary (hash table)
73       if transl == 1:
74          for record in transl_db:
75             transl_d[record["URL1"]] = record["URL2"]
76       elif transl == 2:
77          for record in transl_db:
78             transl_d[record["URL2"]] = record["URL1"]
79       else:
80          raise ValueError, "transl (%d) must be 1 or 2" % transl
81
82       del transl_db # Save few bytes of memory
83
84       from bkmk_objects import Walker
85       class Transl(Walker):
86          def __init__(self, transl_d):
87             self.transl_d = transl_d
88
89          def bookmark(self, b, level):
90             href = b.href
91             transl_d = self.transl_d
92
93             if transl_d.has_key(href):
94                b.href = transl_d[href]
95
96       root_folder.walk_depth(Transl(transl_d))
97
98
99    outfile = open(output_filename, 'w')
100    root_folder.walk_depth(writer(outfile, prune))
101    outfile.close()
102
103    if report_stats:
104       print "Ok"
105
106
107 if __name__ == '__main__':
108    run()