]> git.phdru.name Git - bookmarks_db.git/blob - bkmk2db.py
Added docstrings, __{version,revision,etc}__ boilerplates.
[bookmarks_db.git] / bkmk2db.py
1 #! /usr/bin/env python
2 """Convert Netscape Navigator's or Mozilla's bookmarks.html to a database
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) 1997-2011 PhiloSoft Design"
12 __license__ = "GNU GPL"
13
14 import sys, os
15 from getopt import getopt
16 from bkmk_parser import BkmkParser
17
18
19 def run():
20    optlist, args = getopt(sys.argv[1:], "is")
21
22    show_pbar = True
23    report_stats = 1
24
25    for _opt, _arg in optlist:
26       if _opt == '-i':
27          show_pbar = 0
28       if _opt == '-s':
29          report_stats = 0
30    try:
31       del _opt, _arg
32    except NameError:
33       pass
34
35    if args:
36       if len(args) > 1:
37          sys.stderr.write("bkmk2db: too many arguments\n")
38          sys.stderr.write("Usage: bkmk2db [-is] bookmarks.html\n")
39          sys.exit(1)
40
41       filename = args[0]
42
43    else:
44       filename = 'bookmarks.html' # good name both for DOS (bookmark.htm) and UNIX
45
46
47    if report_stats:
48       from storage import storage_name
49       sys.stdout.write("Converting %s to %s: " % (filename, storage_name))
50       sys.stdout.flush()
51
52    if show_pbar:
53       show_pbar = sys.stderr.isatty()
54
55    if show_pbar:
56       try:
57          from m_lib.pbar.tty_pbar import ttyProgressBar
58       except ImportError:
59          show_pbar = 0
60
61    if show_pbar:
62       try:
63          size = os.path.getsize(filename)
64       except:
65          print filename, ": no such file"
66          sys.exit(1)
67
68
69    if show_pbar:
70       pbar = ttyProgressBar(0, size)
71       lng = 0
72
73       # This is for DOS - it counts CRLF, which len() counts as 1 char!
74       if os.name == 'dos' or os.name == 'nt' :
75          dos_add = 1
76       else:
77          dos_add = 0 # UNIX' and Mac's len() counts CR or LF correct
78
79
80    infile = open(filename, 'r')
81    parser = BkmkParser()
82
83    line_no = 0
84    lng = 0
85    ok = 1
86
87    for line in infile:
88       if show_pbar:
89          lng = lng + len(line) + dos_add
90          pbar.display(lng)
91
92       #line = line.strip()
93       line_no = line_no + 1
94
95       try:
96          parser.feed(line)
97       except:
98          ok = 0
99          break
100
101    try:
102       parser.close()
103    except:
104       ok = 0
105
106    infile.close()
107
108    if show_pbar:
109       del pbar
110
111    if report_stats:
112       print "Ok"
113       print line_no, "lines proceed"
114       print parser.urls, "urls found"
115       print parser.objects, "objects created"
116
117    if ok:
118       from storage import storage
119       storage = storage()
120       storage.store(parser.root_folder)
121
122    else:
123       import traceback
124       traceback.print_exc()
125       sys.exit(1)
126
127
128 if __name__ == '__main__':
129    run()