]> git.phdru.name Git - bookmarks_db.git/blobdiff - bkmk2db.py
Minor refactoring
[bookmarks_db.git] / bkmk2db.py
index 39ddea6cc8f682e3c30810eb3345358e2b7521ed..34fca60d21fa8ced2434430a1c0de314440d4f33 100755 (executable)
@@ -1,32 +1,27 @@
-#! /usr/local/bin/python -O
-"""
-   Convert Netscape Navigator's bookmarks.html to FLAD database
+#! /usr/bin/env python
+"""Convert Netscape Navigator's or Mozilla's bookmarks.html to a database
 
-   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, stat, string
-from getopt import getopt
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
+__license__ = "GNU GPL"
 
-import bkmk_parser
-from formatter import AbstractFormatter, NullWriter
+import sys, os
+from getopt import getopt
+from bkmk_parser import BkmkParser
 
 
 def run():
-   optlist, args = getopt(sys.argv[1:], "gits")
+   optlist, args = getopt(sys.argv[1:], "is")
 
-   show_pbar = 1
-   to_text = 0
-   to_gf = 0
+   show_pbar = True
    report_stats = 1
 
    for _opt, _arg in optlist:
-      if _opt == '-g':
-         to_gf = 1
       if _opt == '-i':
          show_pbar = 0
-      if _opt == '-t':
-         to_text = 1
       if _opt == '-s':
          report_stats = 0
    try:
@@ -37,6 +32,7 @@ def run():
    if args:
       if len(args) > 1:
          sys.stderr.write("bkmk2db: too many arguments\n")
+         sys.stderr.write("Usage: bkmk2db [-is] bookmarks.html\n")
          sys.exit(1)
 
       filename = args[0]
@@ -44,44 +40,29 @@ def run():
    else:
       filename = 'bookmarks.html' # good name both for DOS (bookmark.htm) and UNIX
 
+
+   if report_stats:
+      from storage import storage_name
+      sys.stdout.write("Converting %s to %s: " % (filename, storage_name))
+      sys.stdout.flush()
+
    if show_pbar:
       show_pbar = sys.stderr.isatty()
 
    if show_pbar:
       try:
-         from tty_pbar import ttyProgressBar
+         from m_lib.pbar.tty_pbar import ttyProgressBar
       except ImportError:
          show_pbar = 0
 
    if show_pbar:
       try:
-         size = os.stat(filename)[stat.ST_SIZE]
+         size = os.path.getsize(filename)
       except:
          print filename, ": no such file"
          sys.exit(1)
 
 
-   fmt = AbstractFormatter(NullWriter())
-   if to_text:
-      parser = bkmk_parser.Bookmarks2Text(fmt)
-   elif to_gf:
-      parser = bkmk_parser.Bookmarks2Gadfly(fmt)
-   else:
-      parser = bkmk_parser.Bookmarks2Flad(fmt)
-
-
-   if report_stats:
-      str = "Converting " + filename + " to "
-      if to_text:
-         str = "text"
-      elif to_gf:
-         str = "GadFly database"
-      else:
-         str = "FLAD database"
-
-      sys.stdout.write("Converting %s to %s: " % (filename, str))
-      sys.stdout.flush()
-
    if show_pbar:
       pbar = ttyProgressBar(0, size)
       lng = 0
@@ -92,39 +73,34 @@ def run():
       else:
          dos_add = 0 # UNIX' and Mac's len() counts CR or LF correct
 
-   try:
-      f = open(filename, 'r')
-   except IOError, msg:
-      print filename, ":", msg
-      sys.exit(1)
 
-   header = open("header", 'w')
-   line_no = 0
+   infile = open(filename, 'r')
+   parser = BkmkParser()
 
-   while 1:
-      line = f.readline()
-      if not line:
-         break
+   line_no = 0
+   lng = 0
+   ok = 1
 
+   for line in infile:
       if show_pbar:
          lng = lng + len(line) + dos_add
          pbar.display(lng)
 
-      line = string.strip(line)
+      #line = line.strip()
       line_no = line_no + 1
 
       try:
          parser.feed(line)
+      except:
+         ok = 0
+         break
 
-         if parser.outfile: # Write header until HTML parser start writing outfile
-            if header:
-               header.close()
-               header = None
-         else:
-            header.write(line + '\n')
+   try:
+      parser.close()
+   except:
+      ok = 0
 
-      except:
-         break # I need total number of lines; interpreter will print traceback on exit
+   infile.close()
 
    if show_pbar:
       del pbar
@@ -132,11 +108,18 @@ def run():
    if report_stats:
       print "Ok"
       print line_no, "lines proceed"
-      print parser.urls_no, "urls found"
-      print parser.record_no, "records created"
+      print parser.urls, "urls found"
+      print parser.objects, "objects created"
 
-   parser.close()
-   f.close()
+   if ok:
+      from storage import storage
+      storage = storage()
+      storage.store(parser.root_folder)
+
+   else:
+      import traceback
+      traceback.print_exc()
+      sys.exit(1)
 
 
 if __name__ == '__main__':