X-Git-Url: https://git.phdru.name/?p=bookmarks_db.git;a=blobdiff_plain;f=set-title-list.py;h=6a4974238b4ea6b7de2856b30255782c376c7def;hp=eb327d62b41b164b4fdfd57219e2dd8e668d976c;hb=HEAD;hpb=c1c90856aeffcf8f2bcb7abf39934d5e0f8be36d diff --git a/set-title-list.py b/set-title-list.py index eb327d6..d373984 100755 --- a/set-title-list.py +++ b/set-title-list.py @@ -1,5 +1,6 @@ -#! /usr/bin/env python -"""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 This file is a part of Bookmarks database and Internet robot. """ @@ -9,111 +10,115 @@ import sys __author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2003-2017 PhiloSoft Design" +__copyright__ = "Copyright (C) 2003-2023 PhiloSoft Design" __license__ = "GNU GPL" 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-2017 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 - - # 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 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: - break_tree(root_folder.linear) - storage.store(root_folder) - - if changed and report_stats: - print("Ok") - print(objects, "objects passed") - print(changed, "objects changed") + 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()