]> git.phdru.name Git - bookmarks_db.git/blob - bkmk2db.py
Style: Fix flake8 E401 multiple imports on one line
[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 from getopt import getopt
9 import os
10 import sys
11
12 from bkmk_parser import BkmkParser
13
14
15 __author__ = "Oleg Broytman <phd@phdru.name>"
16 __copyright__ = "Copyright (C) 1997-2023 PhiloSoft Design"
17 __license__ = "GNU GPL"
18
19
20 def run():
21     optlist, args = getopt(sys.argv[1:], "is")
22
23     show_pbar = True
24     report_stats = 1
25
26     for _opt, _arg in optlist:
27         if _opt == '-i':
28             show_pbar = 0
29         if _opt == '-s':
30             report_stats = 0
31     try:
32         del _opt, _arg
33     except NameError:
34         pass
35
36     if args:
37         if len(args) > 1:
38             sys.stderr.write("bkmk2db: too many arguments\n")
39             sys.stderr.write("Usage: bkmk2db [-is] bookmarks.html\n")
40             sys.exit(1)
41
42         filename = args[0]
43
44     else:
45         filename = 'bookmarks.html'  # good name both for DOS (bookmark.htm) and UNIX
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     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     infile = open(filename, 'r')
79     parser = BkmkParser()
80
81     line_no = 0
82     lng = 0
83     ok = 1
84
85     for line in infile:
86         if show_pbar:
87             lng = lng + len(line) + dos_add
88             pbar.display(lng)
89
90         # line = line.strip()
91         line_no = line_no + 1
92
93         try:
94             parser.feed(line)
95         except:
96             ok = 0
97             break
98
99     try:
100         parser.close()
101     except:
102         ok = 0
103
104     infile.close()
105
106     if show_pbar:
107         del pbar
108
109     if report_stats:
110         print("Ok")
111         print(line_no, "lines proceed")
112         print(parser.urls, "urls found")
113         print(parser.objects, "objects created")
114
115     if ok:
116         from storage import storage
117         storage = storage()
118         storage.store(parser.root_folder)
119
120     else:
121         import traceback
122         traceback.print_exc()
123         sys.exit(1)
124
125
126 if __name__ == '__main__':
127     run()