]> git.phdru.name Git - bookmarks_db.git/blob - bkmk2db.py
Style: Fix flake8 E303 too many blank lines
[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-2023 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     if report_stats:
46         from storage import storage_name
47         sys.stdout.write("Converting %s to %s: " % (filename, storage_name))
48         sys.stdout.flush()
49
50     if show_pbar:
51         show_pbar = sys.stderr.isatty()
52
53     if show_pbar:
54         try:
55             from m_lib.pbar.tty_pbar import ttyProgressBar
56         except ImportError:
57             show_pbar = 0
58
59     if show_pbar:
60         try:
61             size = os.path.getsize(filename)
62         except:
63             print(filename, ": no such file")
64             sys.exit(1)
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     infile = open(filename, 'r')
77     parser = BkmkParser()
78
79     line_no = 0
80     lng = 0
81     ok = 1
82
83     for line in infile:
84         if show_pbar:
85             lng = lng + len(line) + dos_add
86             pbar.display(lng)
87
88         # line = line.strip()
89         line_no = line_no + 1
90
91         try:
92             parser.feed(line)
93         except:
94             ok = 0
95             break
96
97     try:
98         parser.close()
99     except:
100         ok = 0
101
102     infile.close()
103
104     if show_pbar:
105         del pbar
106
107     if report_stats:
108         print("Ok")
109         print(line_no, "lines proceed")
110         print(parser.urls, "urls found")
111         print(parser.objects, "objects created")
112
113     if ok:
114         from storage import storage
115         storage = storage()
116         storage.store(parser.root_folder)
117
118     else:
119         import traceback
120         traceback.print_exc()
121         sys.exit(1)
122
123
124 if __name__ == '__main__':
125     run()