1 #! /usr/bin/env python3
2 """Convert a bkmk database back to bookmarks.html
3 (or other format defined by writer)
5 This file is a part of Bookmarks database and Internet robot.
8 __author__ = "Oleg Broytman <phd@phdru.name>"
9 __copyright__ = "Copyright (C) 2000-2023 PhiloSoft Design"
10 __license__ = "GNU GPL"
16 from getopt import getopt
17 optlist, args = getopt(sys.argv[1:], "sp:o:t:r")
22 from writers import writer
23 output_filename = writer.filename
26 transl_name = "" # dictionary translation; default is no translation
28 for _opt, _arg in optlist:
34 output_filename = _arg
46 sys.stderr.write("db2bkmk: too many arguments\n")
47 sys.stderr.write("Usage: db2bkmk [-s] [-p prune_folder]"
48 " [-o filename] [-t trans] [-r]\n")
51 from storage import storage
55 sys.stdout.write("Loading %s: " % storage.filename)
58 root_folder = storage.load()
62 sys.stdout.write("Writing %s: " % output_filename)
68 from m_lib.flad import fladm
69 transl_db = fladm.load_from_file(
70 transl_name, fladm.check_record, ["URL1", "URL2"], [""])
71 # This prevents any other key to appear in transl_db ^
73 # Generate translation dictionary (hash table)
75 for record in transl_db:
76 transl_d[record["URL1"]] = record["URL2"]
78 for record in transl_db:
79 transl_d[record["URL2"]] = record["URL1"]
81 raise ValueError("transl (%d) must be 1 or 2" % transl)
83 del transl_db # Save few bytes of memory
85 from bkmk_objects import Walker
88 def __init__(self, transl_d): # noqa: E306 expected 1 blank line
89 self.transl_d = transl_d
91 def bookmark(self, b, level):
93 transl_d = self.transl_d
96 b.href = transl_d[href]
98 root_folder.walk_depth(Transl(transl_d))
100 outfile = open(output_filename, 'w')
101 root_folder.walk_depth(writer(outfile, prune))
108 if __name__ == '__main__':