-#! /usr/local/bin/python -O
-"""
- Run through the bookmarks database and set names to titles from an external file
+#! /usr/bin/env python3
+"""Run through the bookmarks database and set names to titles
+from an external file
- Written by BroytMann, May 2003 - May 2003. Copyright (C) 2003 PhiloSoft Design
+This file is a part of Bookmarks database and Internet robot.
"""
-
+from __future__ import print_function
import sys
-def run():
- from getopt import getopt
- optlist, args = getopt(sys.argv[1:], "s")
-
- report_stats = 1
-
- for _opt, _arg in optlist:
- if _opt == '-s':
- report_stats = 0
- try:
- del _opt, _arg
- except NameError:
- pass
-
- if report_stats:
- print "BroytMann set-title-list, Copyright (C) 2003 PhiloSoft Design"
-
- if len(args) <> 1:
- sys.stderr.write("Usage: set-title-list [-s] title_list_file\n")
- sys.exit(1)
-
- # Read the external file with titles and build a mapping (URL => title)
- titles_dict = {}
-
- URL = None
- title = None
-
- title_list_file = open(args[0], 'r')
- for line in title_list_file:
- line = line[:-1] # strip trailing newline
- if URL is None:
- URL = line
-
- elif title is None:
- title = line
-
- elif line: # the third line in every 3 lines must be empty
- raise ValueError, "line is not empty for URL `%s', title `%s': line `%s'" % (URL, title, line)
-
- else: # We've got 3 lines - add new entry to the mapping
- if titles_dict.has_key(URL):
- if title <> titles_dict[URL]:
- raise ValueError, "titles are not identical for URL `%s': `%s' <> `%s'" % (URL, title, titles_dict[URL])
-
- else:
- titles_dict[URL] = title
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 2003-2023 PhiloSoft Design"
+__license__ = "GNU GPL"
- # reset
- URL = None
- title = None
- title_list_file.close()
-
-
- from storage import storage
- storage = storage()
-
- if report_stats:
- sys.stdout.write("Loading %s: " % storage.filename)
- sys.stdout.flush()
-
- root_folder = storage.load()
- from bkmk_objects import make_linear
- make_linear(root_folder)
- objects = len(root_folder.linear)
-
- if report_stats:
- print "Ok"
-
-
- # Run through the list of objects and check URLs/titles
- changed = 0
- for object_no in range(objects):
- object = root_folder.linear[object_no]
-
- if object.isBookmark:
- URL = object.href
- if titles_dict.has_key(URL):
- name = titles_dict[URL]
- if object.name <> name:
- object.name = name
- changed += 1
-
-
- if changed and report_stats:
- sys.stdout.write("Saving %s: " % storage.filename)
- sys.stdout.flush()
-
- if not changed and report_stats:
- sys.stdout.write("No need to save data\n")
- sys.stdout.flush()
-
- if changed:
- storage.store(root_folder)
-
- if changed and report_stats:
- print "Ok"
- print objects, "objects passed"
- print changed, "objects changed"
+def run():
+ from getopt import getopt
+ optlist, args = getopt(sys.argv[1:], "s")
+
+ report_stats = 1
+
+ for _opt, _arg in optlist:
+ if _opt == '-s':
+ report_stats = 0
+ try:
+ del _opt, _arg
+ except NameError:
+ pass
+
+ if report_stats:
+ print("Broytman set-title-list, Copyright (C)"
+ " 2003-2023 PhiloSoft Design")
+
+ if len(args) != 1:
+ sys.stderr.write("Usage: set-title-list [-s] title_list_file\n")
+ sys.exit(1)
+
+ # Read the external file with titles and build a mapping (URL => title)
+ titles_dict = {}
+
+ URL = None
+ title = None
+
+ title_list_file = open(args[0], 'rt', encoding='utf-8')
+ for line in title_list_file:
+ line = line[:-1] # strip trailing newline
+ if URL is None:
+ URL = line
+
+ elif title is None:
+ title = line
+
+ elif line: # the third line in every 3 lines must be empty
+ raise ValueError(
+ "line is not empty for URL `%s', title `%s': line `%s'"
+ % (URL, title, line)
+ )
+
+ else: # We've got 3 lines - add new entry to the mapping
+ if URL in titles_dict:
+ if title != titles_dict[URL]:
+ raise ValueError(
+ "titles are not identical for URL `%s': `%s' != `%s'"
+ % (URL, title, titles_dict[URL])
+ )
+
+ else:
+ titles_dict[URL] = title
+
+ # reset
+ URL = None
+ title = None
+
+ title_list_file.close()
+
+ from storage import storage
+ storage = storage()
+
+ if report_stats:
+ sys.stdout.write("Loading %s: " % storage.filename)
+ sys.stdout.flush()
+
+ root_folder = storage.load()
+ from bkmk_objects import make_linear, break_tree
+ make_linear(root_folder)
+ objects = len(root_folder.linear)
+
+ if report_stats:
+ print("Ok")
+
+ # Run through the list of objects and check URLs/titles
+ changed = 0
+ for object_no in range(objects):
+ object = root_folder.linear[object_no]
+
+ if object.isBookmark:
+ URL = object.href
+ if URL in titles_dict:
+ name = titles_dict[URL]
+ if object.name != name:
+ object.name = name
+ changed += 1
+
+ if changed and report_stats:
+ sys.stdout.write("Saving %s: " % storage.filename)
+ sys.stdout.flush()
+
+ if not changed and report_stats:
+ sys.stdout.write("No need to save data\n")
+ sys.stdout.flush()
+
+ if changed:
+ break_tree(root_folder.linear)
+ storage.store(root_folder)
+
+ if changed and report_stats:
+ print("Ok")
+ print(objects, "objects passed")
+ print(changed, "objects changed")
if __name__ == '__main__':
- run()
+ run()