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