]> git.phdru.name Git - bookmarks_db.git/blob - bkmk2db.py
Style: Fix flake8 E501 line too long
[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         # good name both for DOS (bookmark.htm) and UNIX
46         filename = 'bookmarks.html'
47
48     if report_stats:
49         from storage import storage_name
50         sys.stdout.write("Converting %s to %s: " % (filename, storage_name))
51         sys.stdout.flush()
52
53     if show_pbar:
54         show_pbar = sys.stderr.isatty()
55
56     if show_pbar:
57         try:
58             from m_lib.pbar.tty_pbar import ttyProgressBar
59         except ImportError:
60             show_pbar = 0
61
62     if show_pbar:
63         try:
64             size = os.path.getsize(filename)
65         except:
66             print(filename, ": no such file")
67             sys.exit(1)
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     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()