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