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