X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;ds=inline;f=db2bkmk.py;h=e0ac1c1bcb6b76c6247f7680421a2e66765b34a4;hb=7fc9a9ac1bfa749aa30e3ae1d730ac4f266db950;hp=cc2bb82eec1eb73a116feab6c0b27080ac211bea;hpb=2e82a937f80392639176d9a414b55ffb8164ebca;p=bookmarks_db.git diff --git a/db2bkmk.py b/db2bkmk.py index cc2bb82..e0ac1c1 100755 --- a/db2bkmk.py +++ b/db2bkmk.py @@ -1,220 +1,108 @@ -#! /usr/local/bin/python -O -""" - Convert FLAD database back to bookmarks.html suitable for Netscape Navigator +#! /usr/bin/env python +"""Convert a bkmk database back to bookmarks.html (or other format defined by writer) - Written by BroytMann, Jun 1997 - Mar 1999. Copyright (C) 1997-1999 PhiloSoft Design +This file is a part of Bookmarks database and Internet robot. """ -import sys, os, string, shutil -from getopt import getopt - -import fladm - - -def write(str): - if private_level == 0: # Put in public all except private folder - public_html.write(str) - private_html.write(str) - - -def unindent(old_level, new_level): - while old_level > new_level: - old_level = old_level - 1 - write(" "*old_level + "
\n") - - -def gen_html(bookmarks_db, show_pbar, report_stats): - global pbar, record_no, urls_no, public_html, private_html, private_level - - shutil.copy("header", "public.html") - shutil.copy("header", "private.html") - - public_html = open("public.html", 'a') - private_html = open("private.html", 'a') - - record_no = 0 - urls_no = 0 - - save_level = 0 - got_folder = 1 # Start as if we already have one folder - private_level = 0 - - for record in bookmarks_db: - record_no = record_no + 1 - - if show_pbar: - pbar.display(record_no) - - level = string.atoi(record["Level"]) - - if level == save_level: - pass - elif level == save_level + 1: - if got_folder: - write(" "*(level - 1) + "
\n")
- else:
- raise ValueError, "indent without folder"
- elif level <= save_level - 1:
- unindent(save_level, level)
- else:
- raise ValueError, "new level (%d) too big; must be %d - %d" % (level, save_level-1, save_level+1)
-
- save_level = level
- got_folder = record.has_key("Folder") # Test here to save got_folder for next loop
-
- if private_level == save_level:
- private_level = 0 # We've returned to saved private level - private folder is over
+__author__ = "Oleg Broytman %s
\n' % (record["AddDate"], record["Folder"]))
- else:
- write(" "*level + '%s
\n' % (record["AddDate"], record["Folder"]))
-
- elif record.has_key("Ruler"):
- write(" "*level + "
\n")
-
- else:
- raise KeyError, "neither \"URL\" nor \"Folder\" nor \"Ruler\" in record " + str(record)
-
- if record.has_key("Comment") and (record["Comment"] <> ''):
- write("
"), "
\n"))
-
-
- if save_level >= 0:
- unindent(save_level, 0)
- else:
- raise ValueError, "new level (%d) too little - must be >= 0" % save_level
-
- public_html.close()
- private_html.close()
-
- if show_pbar:
- del pbar
-
- if report_stats:
- print "Ok"
-
-
-def translate(bookmarks_db, transldb_name, transl, show_pbar, report_stats):
- global pbar, record_no, urls_no, public_html, private_html, private_level
-
- new_ext = str(transl)
- os.rename("public.html", "public." + new_ext)
- os.rename("private.html", "private." + new_ext)
-
- transl_d = {}
- transl_db = fladm.load_from_file(transldb_name, fladm.check_record, ["URL1", "URL2"], [""])
- # This prevents any other key to appear in transl.db ^
-
- # Generate translation dictionary (hash table)
- if transl == 1:
- for record in transl_db:
- transl_d[record["URL1"]] = record["URL2"]
- elif transl == 2:
- for record in transl_db:
- transl_d[record["URL2"]] = record["URL1"]
- else:
- raise ValueError, "transl (%d) must be 1 or 2" % transl
-
- del transl_db # Save few bytes of memory
- transl_k = transl_d.keys()
-
- # Translate URLs
- for record in bookmarks_db:
- if record.has_key("URL") and (record["URL"] in transl_k):
- record["URL"] = transl_d[record["URL"]]
-
- gen_html(bookmarks_db, show_pbar, report_stats)
+def run():
+ from getopt import getopt
+ optlist, args = getopt(sys.argv[1:], "sp:o:t:r")
- new_ext = str(3 - transl) # Translate 1 to 2, or 2 to 1
- os.rename("public.html", "public." + new_ext)
- os.rename("private.html", "private." + new_ext)
+ report_stats = 1
+ prune = None
+ from writers import writer
+ output_filename = writer.filename
-def run():
- global pbar, record_no, urls_no, public_html, private_html, private_level
+ transl = 0
+ transl_name = "" # dictionary translation; default is no translation
- optlist, args = getopt(sys.argv[1:], "ist:r")
+ for _opt, _arg in optlist:
+ if _opt == '-s':
+ report_stats = 0
+ if _opt == '-p':
+ prune = _arg
+ if _opt == '-o':
+ output_filename = _arg
+ if _opt == '-t':
+ transl = 1
+ transl_name = _arg
+ if _opt == '-r':
+ transl = 2
+ try:
+ del _opt, _arg
+ except NameError:
+ pass
- show_pbar = 1
- report_stats = 1
+ if args:
+ sys.stderr.write("db2bkmk: too many arguments\n")
+ sys.stderr.write("Usage: db2bkmk [-s] [-p prune_folder] [-o filename] [-t trans] [-r]\n")
+ sys.exit(1)
- transldb_name = "" # dictionary translation; default is no translation
- transl = 0
+ from storage import storage
+ storage = storage()
- for _opt, _arg in optlist:
- if _opt == '-i':
- show_pbar = 0
- if _opt == '-s':
- report_stats = 0
- if _opt == '-t':
- transldb_name = _arg
- transl = 1
- if _opt == '-r':
- transl = 2
- try:
- del _opt, _arg
- except NameError:
- pass
+ if report_stats:
+ sys.stdout.write("Loading %s: " % storage.filename)
+ sys.stdout.flush()
- if args:
- sys.stderr.write("db2bkmk: too many arguments\n")
- sys.exit(1)
+ root_folder = storage.load()
- if show_pbar:
- show_pbar = sys.stderr.isatty()
+ if report_stats:
+ print("Ok")
+ sys.stdout.write("Writing %s: " % output_filename)
+ sys.stdout.flush()
- if show_pbar:
- try:
- from tty_pbar import ttyProgressBar
- except ImportError:
- show_pbar = 0
- if report_stats:
- sys.stdout.write("Loading: ")
- sys.stdout.flush()
+ if transl:
+ new_ext = str(transl)
+ transl_d = {}
- bookmarks_db = fladm.load_from_file("bookmarks.db", fladm.check_record, ["Level"])
+ from m_lib.flad import fladm
+ transl_db = fladm.load_from_file(transl_name, fladm.check_record, ["URL1", "URL2"], [""])
+ # This prevents any other key to appear in transl_db ^
- if report_stats:
- print "Ok"
- sys.stdout.write("Converting FLAD database to bookmarks.html: ")
- sys.stdout.flush()
+ # Generate translation dictionary (hash table)
+ if transl == 1:
+ for record in transl_db:
+ transl_d[record["URL1"]] = record["URL2"]
+ elif transl == 2:
+ for record in transl_db:
+ transl_d[record["URL2"]] = record["URL1"]
+ else:
+ raise ValueError("transl (%d) must be 1 or 2" % transl)
- if show_pbar:
- pbar = ttyProgressBar(0, len(bookmarks_db))
+ del transl_db # Save few bytes of memory
- gen_html(bookmarks_db, show_pbar, report_stats)
+ from bkmk_objects import Walker
+ class Transl(Walker):
+ def __init__(self, transl_d):
+ self.transl_d = transl_d
- if transl:
- if report_stats:
- sys.stdout.write("Translating: ")
- sys.stdout.flush()
+ def bookmark(self, b, level):
+ href = b.href
+ transl_d = self.transl_d
- if report_stats and show_pbar: # Display bar only without "-i";
- # with "-s" skip it (one bar already
- # displayed, and it is enough)
- pbar = ttyProgressBar(0, len(bookmarks_db))
+ if transl_d.has_key(href):
+ b.href = transl_d[href]
- else:
- show_pbar = 0
+ root_folder.walk_depth(Transl(transl_d))
- translate(bookmarks_db, transldb_name, transl, show_pbar, report_stats)
+ outfile = open(output_filename, 'w')
+ root_folder.walk_depth(writer(outfile, prune))
+ outfile.close()
- if report_stats:
- print record_no, "records proceed"
- print urls_no, "urls created"
+ if report_stats:
+ print("Ok")
if __name__ == '__main__':
- run()
+ run()