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