From 31bbc8c5b39abfe7f5d0a28df94b821d6055baa7 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Thu, 14 Sep 2017 09:50:52 -0500 Subject: [PATCH 01/17] importer support for keywords and search engines This allows importer.py to process Netscape HTML exports from Firefox (and other Mozilla browsers) with three distinct types: * bookmarks (sans shortcuturl attribute) * keywords (bookmarks with a shortcuturl attribute) * searches (keywords with a URL containing a %s substitution) The first two can be combined at will in either quickmark or bookmark output formats, the only difference being that keywords will be used in place of titles when exporting to quickmark format. Searches are exported to qutebrowser.conf format, or the new config.py format. Dictionaries are used in the import function for readability's sake, but the command line arguments follow the same general formula of true-false flags used to select input bookmark types and the output format. --- scripts/importer.py | 87 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 14 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index 1b3be4d32..d140fa2a7 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -31,8 +31,30 @@ import argparse def main(): args = get_args() + bookmark_types = [] + output_format = '' + if args.search_query or args.search_output: + bookmark_types = ['search'] + if args.newconfig: + output_format = 'ncsearch' + else: + output_format = 'search' + else: + if args.bookmark_output: + output_format = 'bookmark' + elif args.quickmark_output: + output_format = 'quickmark' + if args.bookmark_query: + bookmark_types.append('bookmark') + if args.keyword_query: + bookmark_types.append('keyword') + if not bookmark_types: + bookmark_types = ['bookmark','keyword'] + if not output_format: + output_format = 'quickmark' + if args.browser in ['chromium', 'firefox', 'ie']: - import_netscape_bookmarks(args.bookmarks, args.bookmark_format) + import_netscape_bookmarks(args.bookmarks,bookmark_types,output_format) def get_args(): @@ -45,14 +67,31 @@ def get_args(): choices=['chromium', 'firefox', 'ie'], metavar='browser') parser.add_argument('-b', help="Output in bookmark format.", - dest='bookmark_format', action='store_true', + dest='bookmark_output', action='store_true', default=False, required=False) + parser.add_argument('-q', help="Output in quickmark format (default).", + dest='quickmark_output', action='store_true', + default=False,required=False) + parser.add_argument('-s', help="Output search engine format", + dest='search_output', action='store_true', + default=False,required=False) + parser.add_argument('--newconfig', help="Output search engine format for new config.py format", + default=False,action='store_true',required=False) + parser.add_argument('-S', help="Import search engines", + dest='search_query', action='store_true', + default=False,required=False) + parser.add_argument('-B', help="Import plain bookmarks (no keywords)", + dest='bookmark_query', action='store_true', + default=False,required=False) + parser.add_argument('-K', help="Import keywords (no search)", + dest='keyword_query', action='store_true', + default=False,required=False) parser.add_argument('bookmarks', help="Bookmarks file (html format)") args = parser.parse_args() return args -def import_netscape_bookmarks(bookmarks_file, is_bookmark_format): +def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): """Import bookmarks from a NETSCAPE-Bookmark-file v1. Generated by Chromium, Firefox, IE and possibly more browsers @@ -60,18 +99,38 @@ def import_netscape_bookmarks(bookmarks_file, is_bookmark_format): import bs4 with open(bookmarks_file, encoding='utf-8') as f: soup = bs4.BeautifulSoup(f, 'html.parser') - - html_tags = soup.findAll('a') - if is_bookmark_format: - output_template = '{tag[href]} {tag.string}' - else: - output_template = '{tag.string} {tag[href]}' - + bookmark_query = { + 'search': + lambda tag: (tag.name == 'a') and ('shortcuturl' in tag.attrs) and ('%s' in tag['href']), + 'keyword': + lambda tag: (tag.name == 'a') and ('shortcuturl' in tag.attrs) and ('%s' not in tag['href']), + 'bookmark': + lambda tag: (tag.name == 'a') and ('shortcuturl' not in tag.attrs) and (tag.string) + } + output_template = { + 'ncsearch': { + 'search': "config.val.url.searchengines['{tag[shortcuturl]}'] = '{tag[href]}' #{tag.string}" + }, + 'search': { + 'search': '{tag[shortcuturl]} = {tag[href]} #{tag.string}', + }, + 'bookmark': { + 'bookmark': '{tag[href]} {tag.string}', + 'keyword': '{tag[href]} {tag.string}' + }, + 'quickmark': { + 'bookmark': '{tag.string} {tag[href]}', + 'keyword': '{tag[shortcuturl]} {tag[href]}' + } + } bookmarks = [] - for tag in html_tags: - if tag['href'] not in bookmarks: - bookmarks.append(output_template.format(tag=tag)) - + for typ in bookmark_types: + tags = soup.findAll(bookmark_query[typ]) + for tag in tags: + if typ=='search': + tag['href'] = tag['href'].replace('%s','{}') + if tag['href'] not in bookmarks: + bookmarks.append(output_template[output_format][typ].format(tag=tag)) for bookmark in bookmarks: print(bookmark) From c163f702c2365398a394755eb7dc6ba1dec51060 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Fri, 15 Sep 2017 03:03:24 -0500 Subject: [PATCH 02/17] fix config.val in format --- scripts/importer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index d140fa2a7..d22bc14f3 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -109,7 +109,7 @@ def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): } output_template = { 'ncsearch': { - 'search': "config.val.url.searchengines['{tag[shortcuturl]}'] = '{tag[href]}' #{tag.string}" + 'search': "c.url.searchengines['{tag[shortcuturl]}'] = '{tag[href]}' #{tag.string}" }, 'search': { 'search': '{tag[shortcuturl]} = {tag[href]} #{tag.string}', From 898dde566d09eef010cbeb597ef0d2815f8c149c Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Fri, 15 Sep 2017 03:37:16 -0500 Subject: [PATCH 03/17] fix whitespace issues --- scripts/importer.py | 117 +++++++++++++++++++++++++++++--------------- 1 file changed, 77 insertions(+), 40 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index d22bc14f3..aa53bccce 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -18,14 +18,11 @@ # # You should have received a copy of the GNU General Public License # along with qutebrowser. If not, see . - - """Tool to import data from other browsers. Currently only importing bookmarks from Netscape Bookmark files is supported. """ - import argparse @@ -49,43 +46,74 @@ def main(): if args.keyword_query: bookmark_types.append('keyword') if not bookmark_types: - bookmark_types = ['bookmark','keyword'] + bookmark_types = ['bookmark', 'keyword'] if not output_format: output_format = 'quickmark' if args.browser in ['chromium', 'firefox', 'ie']: - import_netscape_bookmarks(args.bookmarks,bookmark_types,output_format) + import_netscape_bookmarks(args.bookmarks, bookmark_types, + output_format) def get_args(): """Get the argparse parser.""" parser = argparse.ArgumentParser( epilog="To import bookmarks from Chromium, Firefox or IE, " - "export them to HTML in your browsers bookmark manager. " - "By default, this script will output in a quickmarks format.") - parser.add_argument('browser', help="Which browser? (chromium, firefox)", - choices=['chromium', 'firefox', 'ie'], - metavar='browser') - parser.add_argument('-b', help="Output in bookmark format.", - dest='bookmark_output', action='store_true', - default=False, required=False) - parser.add_argument('-q', help="Output in quickmark format (default).", - dest='quickmark_output', action='store_true', - default=False,required=False) - parser.add_argument('-s', help="Output search engine format", - dest='search_output', action='store_true', - default=False,required=False) - parser.add_argument('--newconfig', help="Output search engine format for new config.py format", - default=False,action='store_true',required=False) - parser.add_argument('-S', help="Import search engines", - dest='search_query', action='store_true', - default=False,required=False) - parser.add_argument('-B', help="Import plain bookmarks (no keywords)", - dest='bookmark_query', action='store_true', - default=False,required=False) - parser.add_argument('-K', help="Import keywords (no search)", - dest='keyword_query', action='store_true', - default=False,required=False) + "export them to HTML in your browsers bookmark manager. " + "By default, this script will output in a quickmarks format.") + parser.add_argument( + 'browser', + help="Which browser? (chromium, firefox)", + choices=['chromium', 'firefox', 'ie'], + metavar='browser') + parser.add_argument( + '-b', + help="Output in bookmark format.", + dest='bookmark_output', + action='store_true', + default=False, + required=False) + parser.add_argument( + '-q', + help="Output in quickmark format (default).", + dest='quickmark_output', + action='store_true', + default=False, + required=False) + parser.add_argument( + '-s', + help="Output search engine format", + dest='search_output', + action='store_true', + default=False, + required=False) + parser.add_argument( + '--newconfig', + help="Output search engine format for new config.py format", + default=False, + action='store_true', + required=False) + parser.add_argument( + '-S', + help="Import search engines", + dest='search_query', + action='store_true', + default=False, + required=False) + parser.add_argument( + '-B', + help="Import plain bookmarks (no keywords)", + dest='bookmark_query', + action='store_true', + default=False, + required=False) + parser.add_argument( + '-K', + help="Import keywords (no search)", + dest='keyword_query', + action='store_true', + default=False, + required=False) parser.add_argument('bookmarks', help="Bookmarks file (html format)") args = parser.parse_args() return args @@ -100,16 +128,24 @@ def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): with open(bookmarks_file, encoding='utf-8') as f: soup = bs4.BeautifulSoup(f, 'html.parser') bookmark_query = { - 'search': - lambda tag: (tag.name == 'a') and ('shortcuturl' in tag.attrs) and ('%s' in tag['href']), - 'keyword': - lambda tag: (tag.name == 'a') and ('shortcuturl' in tag.attrs) and ('%s' not in tag['href']), - 'bookmark': - lambda tag: (tag.name == 'a') and ('shortcuturl' not in tag.attrs) and (tag.string) + 'search': lambda tag: ( + (tag.name == 'a') and + ('shortcuturl' in tag.attrs) and + ('%s' in tag['href'])), + 'keyword': lambda tag: ( + (tag.name == 'a') and + ('shortcuturl' in tag.attrs) and + ('%s' not in tag['href'])), + 'bookmark': lambda tag: ( + (tag.name == 'a') and + ('shortcuturl' not in tag.attrs) and + (tag.string)), } output_template = { 'ncsearch': { - 'search': "c.url.searchengines['{tag[shortcuturl]}'] = '{tag[href]}' #{tag.string}" + 'search': + "c.url.searchengines['{tag[shortcuturl]}'] = " + "'{tag[href]}' #{tag.string}" }, 'search': { 'search': '{tag[shortcuturl]} = {tag[href]} #{tag.string}', @@ -127,10 +163,11 @@ def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): for typ in bookmark_types: tags = soup.findAll(bookmark_query[typ]) for tag in tags: - if typ=='search': - tag['href'] = tag['href'].replace('%s','{}') + if typ == 'search': + tag['href'] = tag['href'].replace('%s', '{}') if tag['href'] not in bookmarks: - bookmarks.append(output_template[output_format][typ].format(tag=tag)) + bookmarks.append( + output_template[output_format][typ].format(tag=tag)) for bookmark in bookmarks: print(bookmark) From 799fe5deb3865f67570840ef07c61cc15ddec822 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Fri, 22 Sep 2017 17:27:36 -0500 Subject: [PATCH 04/17] default to new search format --- scripts/importer.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index aa53bccce..56480f762 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -32,8 +32,8 @@ def main(): output_format = '' if args.search_query or args.search_output: bookmark_types = ['search'] - if args.newconfig: - output_format = 'ncsearch' + if args.oldconfig: + output_format = 'oldsearch' else: output_format = 'search' else: @@ -88,8 +88,8 @@ def get_args(): default=False, required=False) parser.add_argument( - '--newconfig', - help="Output search engine format for new config.py format", + '--oldconfig', + help="Output search engine format for old qutebrowser.conf format", default=False, action='store_true', required=False) @@ -142,12 +142,12 @@ def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): (tag.string)), } output_template = { - 'ncsearch': { + 'search': { 'search': "c.url.searchengines['{tag[shortcuturl]}'] = " "'{tag[href]}' #{tag.string}" }, - 'search': { + 'oldsearch': { 'search': '{tag[shortcuturl]} = {tag[href]} #{tag.string}', }, 'bookmark': { From aa0613c6d8c70ed9fa0de067e43e1cc5888bf9df Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Sun, 24 Sep 2017 06:25:13 -0500 Subject: [PATCH 05/17] support multiple input formats This restructures things to better support future implementations of other input formats. The default formats are specified in a global dict of browsers, which prevents duplicating the list of choices for browser in bother get_args() and main(), and a new option enables overriding of the default. --- scripts/importer.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index 56480f762..edfd2e4cc 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -25,11 +25,20 @@ Currently only importing bookmarks from Netscape Bookmark files is supported. import argparse +browser_default_input_format = { + 'chromium': 'netscape', + 'ie': 'netscape', + 'firefox': 'netscape', + 'seamonkey': 'netscape', + 'palemoon': 'netscape' +} + def main(): args = get_args() bookmark_types = [] output_format = '' + input_format = args.input_format if args.search_query or args.search_output: bookmark_types = ['search'] if args.oldconfig: @@ -49,10 +58,11 @@ def main(): bookmark_types = ['bookmark', 'keyword'] if not output_format: output_format = 'quickmark' + if not input_format: + input_format = browser_default_input_format[args.browser] - if args.browser in ['chromium', 'firefox', 'ie']: - import_netscape_bookmarks(args.bookmarks, bookmark_types, - output_format) + import_function = {'netscape': import_netscape_bookmarks} + import_function[input_format](arg.bookmarks, bookmark_types, output_format) def get_args(): @@ -64,8 +74,14 @@ def get_args(): parser.add_argument( 'browser', help="Which browser? (chromium, firefox)", - choices=['chromium', 'firefox', 'ie'], + choices=browser_default_input_format.keys(), metavar='browser') + parser.add_argument( + '-i', + '--input-format', + help='Which input format? (overrides browser default)', + choices=set(browser_default_input_format.values()), + required=False) parser.add_argument( '-b', help="Output in bookmark format.", From d85a15f0a29c5264ae7c0504225c08ad5021519a Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Sun, 24 Sep 2017 06:41:12 -0500 Subject: [PATCH 06/17] style, variable name typo --- scripts/importer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index edfd2e4cc..5e66a5202 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -62,7 +62,8 @@ def main(): input_format = browser_default_input_format[args.browser] import_function = {'netscape': import_netscape_bookmarks} - import_function[input_format](arg.bookmarks, bookmark_types, output_format) + import_function[input_format](args.bookmarks, bookmark_types, + output_format) def get_args(): From 84b2b05254db655deb11a63399d03b29512c2e03 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Sun, 24 Sep 2017 12:02:44 -0500 Subject: [PATCH 07/17] help text mod Browser choices are now formatted in the help text rather than listed manually. Redundant line regarding output default removed from epilogue --- scripts/importer.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index 5e66a5202..3a2c6a9f9 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -70,11 +70,10 @@ def get_args(): """Get the argparse parser.""" parser = argparse.ArgumentParser( epilog="To import bookmarks from Chromium, Firefox or IE, " - "export them to HTML in your browsers bookmark manager. " - "By default, this script will output in a quickmarks format.") + "export them to HTML in your browsers bookmark manager. ") parser.add_argument( 'browser', - help="Which browser? (chromium, firefox)", + help="Which browser? {%(choices)s}", choices=browser_default_input_format.keys(), metavar='browser') parser.add_argument( From a6ed079011b01315a2b3cce9c1be14dbd5b152c2 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Mon, 25 Sep 2017 06:27:12 -0500 Subject: [PATCH 08/17] make browser argument optional --- scripts/importer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/importer.py b/scripts/importer.py index 3a2c6a9f9..c07fec0ec 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -75,6 +75,7 @@ def get_args(): 'browser', help="Which browser? {%(choices)s}", choices=browser_default_input_format.keys(), + nargs='?', metavar='browser') parser.add_argument( '-i', From 73c5666ff9c607ff7ee013a5d537318ea0a7f71b Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Tue, 10 Oct 2017 20:07:29 -0500 Subject: [PATCH 09/17] various importer fixes * Line breaks reinserted * None in place of '' * Check for browser before selecting default input format (to fix KeyError) * Remove redundant -S option and clarify help to make it slightly more obvious what output formats make sense * Added long-form arguments and slightly more sensible names (not really a fix, but I personally like having them) --- scripts/importer.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index c07fec0ec..96bf1a942 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -18,13 +18,17 @@ # # You should have received a copy of the GNU General Public License # along with qutebrowser. If not, see . + + """Tool to import data from other browsers. Currently only importing bookmarks from Netscape Bookmark files is supported. """ + import argparse + browser_default_input_format = { 'chromium': 'netscape', 'ie': 'netscape', @@ -37,9 +41,9 @@ browser_default_input_format = { def main(): args = get_args() bookmark_types = [] - output_format = '' + output_format = None input_format = args.input_format - if args.search_query or args.search_output: + if args.import_search: bookmark_types = ['search'] if args.oldconfig: output_format = 'oldsearch' @@ -50,15 +54,18 @@ def main(): output_format = 'bookmark' elif args.quickmark_output: output_format = 'quickmark' - if args.bookmark_query: + if args.import_bookmarks: bookmark_types.append('bookmark') - if args.keyword_query: + if args.import_keywords: bookmark_types.append('keyword') if not bookmark_types: bookmark_types = ['bookmark', 'keyword'] if not output_format: output_format = 'quickmark' if not input_format: + if not args.browser: + print("Must specify either browser or input format") + exit(1) input_format = browser_default_input_format[args.browser] import_function = {'netscape': import_netscape_bookmarks} @@ -85,22 +92,22 @@ def get_args(): required=False) parser.add_argument( '-b', + '--bookmark-output', help="Output in bookmark format.", - dest='bookmark_output', action='store_true', default=False, required=False) parser.add_argument( '-q', + '--quickmark-output', help="Output in quickmark format (default).", - dest='quickmark_output', action='store_true', default=False, required=False) parser.add_argument( '-s', - help="Output search engine format", - dest='search_output', + '--search-output', + help="Output config.py search engine format (negates -B and -K)", action='store_true', default=False, required=False) @@ -110,24 +117,17 @@ def get_args(): default=False, action='store_true', required=False) - parser.add_argument( - '-S', - help="Import search engines", - dest='search_query', - action='store_true', - default=False, - required=False) parser.add_argument( '-B', - help="Import plain bookmarks (no keywords)", - dest='bookmark_query', + '--import-bookmarks', + help="Import plain bookmarks (can be combiend with -K)", action='store_true', default=False, required=False) parser.add_argument( '-K', - help="Import keywords (no search)", - dest='keyword_query', + '--import-keywords', + help="Import keywords (can be combined with -B)", action='store_true', default=False, required=False) From af8a5c58da8dcac6ee8d6c821302b6092a07aaca Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Tue, 17 Oct 2017 14:47:45 -0500 Subject: [PATCH 10/17] use sys.exit --- scripts/importer.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index 96bf1a942..d1d6fe9b5 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -27,7 +27,7 @@ Currently only importing bookmarks from Netscape Bookmark files is supported. import argparse - +import sys browser_default_input_format = { 'chromium': 'netscape', @@ -64,8 +64,7 @@ def main(): output_format = 'quickmark' if not input_format: if not args.browser: - print("Must specify either browser or input format") - exit(1) + sys.exit("Must specify either browser or input format") input_format = browser_default_input_format[args.browser] import_function = {'netscape': import_netscape_bookmarks} From 31f1025ff858e1222d1335f668759173cc961b35 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Sat, 21 Oct 2017 18:12:25 -0500 Subject: [PATCH 11/17] escape search engine URLs in importer --- scripts/importer.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index d1d6fe9b5..b3ab90fc2 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -135,6 +135,14 @@ def get_args(): return args +def search_escape(url): + """Escapes URLs such that preexisting { and } are handled properly. + + Will obviously trash a properly-formatted Qutebrowser URL. + """ + return url.replace('{', '{{').replace('}', '}}') + + def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): """Import bookmarks from a NETSCAPE-Bookmark-file v1. @@ -180,7 +188,7 @@ def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): tags = soup.findAll(bookmark_query[typ]) for tag in tags: if typ == 'search': - tag['href'] = tag['href'].replace('%s', '{}') + tag['href'] = search_escape(tag['href']).replace('%s', '{}') if tag['href'] not in bookmarks: bookmarks.append( output_template[output_format][typ].format(tag=tag)) From 4ed7fe731d33323d93690aaeb254f0ae1f8d8aa6 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Tue, 24 Oct 2017 17:31:42 -0500 Subject: [PATCH 12/17] removed wrong option --- scripts/importer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index b3ab90fc2..d239c62c5 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -43,7 +43,7 @@ def main(): bookmark_types = [] output_format = None input_format = args.input_format - if args.import_search: + if args.search_output: bookmark_types = ['search'] if args.oldconfig: output_format = 'oldsearch' From 137a7114e117a92e4e9283c786f21b0c6c0c59ef Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Tue, 24 Oct 2017 19:41:22 -0500 Subject: [PATCH 13/17] importer: documentation of bookmark types --- scripts/importer.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index d239c62c5..f5da1e47e 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -146,7 +146,11 @@ def search_escape(url): def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): """Import bookmarks from a NETSCAPE-Bookmark-file v1. - Generated by Chromium, Firefox, IE and possibly more browsers + Generated by Chromium, Firefox, IE and possibly more browsers. Not all + export all possible bookmark types: + - Firefox mostly works with everything + - Chrome doesn't support keywords at all; searches are a separate + database """ import bs4 with open(bookmarks_file, encoding='utf-8') as f: From 38e3c1ee8fcb65750c008dd4b73eb9634ce2d99d Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Tue, 24 Oct 2017 19:58:38 -0500 Subject: [PATCH 14/17] fix whitespace --- scripts/importer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index f5da1e47e..5886efa5a 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -146,10 +146,10 @@ def search_escape(url): def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): """Import bookmarks from a NETSCAPE-Bookmark-file v1. - Generated by Chromium, Firefox, IE and possibly more browsers. Not all + Generated by Chromium, Firefox, IE and possibly more browsers. Not all export all possible bookmark types: - Firefox mostly works with everything - - Chrome doesn't support keywords at all; searches are a separate + - Chrome doesn't support keywords at all; searches are a separate database """ import bs4 From 3d87f4ebdf0050fc1184c9ef46f5deeeeb359fe9 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Wed, 25 Oct 2017 14:52:53 -0500 Subject: [PATCH 15/17] default to Netscape format for importer --- scripts/importer.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/importer.py b/scripts/importer.py index 5886efa5a..ca3eaa206 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -63,9 +63,11 @@ def main(): if not output_format: output_format = 'quickmark' if not input_format: - if not args.browser: - sys.exit("Must specify either browser or input format") - input_format = browser_default_input_format[args.browser] + if args.browser: + input_format = browser_default_input_format[args.browser] + else: + #default to netscape + input_format = 'netscape' import_function = {'netscape': import_netscape_bookmarks} import_function[input_format](args.bookmarks, bookmark_types, @@ -86,7 +88,8 @@ def get_args(): parser.add_argument( '-i', '--input-format', - help='Which input format? (overrides browser default)', + help='Which input format? (overrides browser default; "netscape" if ' + 'neither given)', choices=set(browser_default_input_format.values()), required=False) parser.add_argument( From 5d2975293b08fbb71f919783b1c5e830f083105b Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Wed, 25 Oct 2017 16:49:12 -0500 Subject: [PATCH 16/17] remove unused import --- scripts/importer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index ca3eaa206..436971e58 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -27,7 +27,6 @@ Currently only importing bookmarks from Netscape Bookmark files is supported. import argparse -import sys browser_default_input_format = { 'chromium': 'netscape', From 879e8dfb2c879c9c1cb7cb90baade6f027f3cf46 Mon Sep 17 00:00:00 2001 From: Ryan Farley Date: Thu, 26 Oct 2017 17:09:45 -0500 Subject: [PATCH 17/17] fix D401 in importer --- scripts/importer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/importer.py b/scripts/importer.py index 436971e58..9171bbbb6 100755 --- a/scripts/importer.py +++ b/scripts/importer.py @@ -138,7 +138,7 @@ def get_args(): def search_escape(url): - """Escapes URLs such that preexisting { and } are handled properly. + """Escape URLs such that preexisting { and } are handled properly. Will obviously trash a properly-formatted Qutebrowser URL. """