Merge pull request #266 from eikenb/master
auto-import's folder as tags uses parent hierarchy
This commit is contained in:
commit
42429c3f6c
12
buku.py
12
buku.py
@ -2029,7 +2029,8 @@ class BukuDb:
|
|||||||
|
|
||||||
for item in sublist:
|
for item in sublist:
|
||||||
if item['type'] == 'folder':
|
if item['type'] == 'folder':
|
||||||
for i in self.traverse_bm_folder(item['children'], unique_tag, item['name'], add_parent_folder_as_tag):
|
next_folder_name = folder_name + ',' + item['name']
|
||||||
|
for i in self.traverse_bm_folder(item['children'], unique_tag, next_folder_name, add_parent_folder_as_tag):
|
||||||
yield (i)
|
yield (i)
|
||||||
elif item['type'] == 'url':
|
elif item['type'] == 'url':
|
||||||
try:
|
try:
|
||||||
@ -2110,8 +2111,13 @@ class BukuDb:
|
|||||||
|
|
||||||
if add_parent_folder_as_tag:
|
if add_parent_folder_as_tag:
|
||||||
# add folder name
|
# add folder name
|
||||||
res = cur.execute('SELECT title FROM moz_bookmarks WHERE id={}'.format(row[1]))
|
parent_id = row[1]
|
||||||
bookmark_tags.append(res.fetchone()[0])
|
while parent_id:
|
||||||
|
res = cur.execute('SELECT title,parent FROM moz_bookmarks WHERE id={}'.format(parent_id))
|
||||||
|
parent = res.fetchone()
|
||||||
|
if parent:
|
||||||
|
title, parent_id = parent
|
||||||
|
bookmark_tags.append(title)
|
||||||
|
|
||||||
if unique_tag:
|
if unique_tag:
|
||||||
# add timestamp tag
|
# add timestamp tag
|
||||||
|
2
setup.py
2
setup.py
@ -17,7 +17,7 @@ with open('README.md', encoding='utf-8') as f:
|
|||||||
|
|
||||||
tests_require = [
|
tests_require = [
|
||||||
'pytest-cov', 'hypothesis>=3.7.0', 'py>=1.5.0',
|
'pytest-cov', 'hypothesis>=3.7.0', 'py>=1.5.0',
|
||||||
'beautifulsoup4>=4.6.0', 'flake8>=3.4.1', 'pylint>=1.7.2'
|
'beautifulsoup4>=4.6.0', 'flake8>=3.4.1', 'pylint>=1.7.2', 'PyYAML>=3.12'
|
||||||
]
|
]
|
||||||
if sys.version_info.major == 3 and sys.version_info.minor == 6:
|
if sys.version_info.major == 3 and sys.version_info.minor == 6:
|
||||||
tests_require.append('pytest>=3.4.2,!=3.5.0,!=3.5.1')
|
tests_require.append('pytest>=3.4.2,!=3.5.0,!=3.5.1')
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
#
|
#
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import pickle
|
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import sqlite3
|
import sqlite3
|
||||||
@ -20,6 +19,7 @@ from hypothesis import strategies as st
|
|||||||
from unittest import mock as mock
|
from unittest import mock as mock
|
||||||
import pytest
|
import pytest
|
||||||
import unittest
|
import unittest
|
||||||
|
import yaml
|
||||||
|
|
||||||
from buku import BukuDb, parse_tags, prompt
|
from buku import BukuDb, parse_tags, prompt
|
||||||
|
|
||||||
@ -1240,10 +1240,6 @@ def bookmark_folder(tmpdir):
|
|||||||
zip_url = 'https://github.com/jarun/Buku/files/1319933/bookmarks.zip'
|
zip_url = 'https://github.com/jarun/Buku/files/1319933/bookmarks.zip'
|
||||||
tmp_zip = tmpdir.join('bookmarks.zip')
|
tmp_zip = tmpdir.join('bookmarks.zip')
|
||||||
extract_all_from_zip_url(zip_url, tmp_zip, tmpdir)
|
extract_all_from_zip_url(zip_url, tmp_zip, tmpdir)
|
||||||
# expected res
|
|
||||||
zip_url = 'https://github.com/jarun/Buku/files/1321193/bookmarks_res.zip'
|
|
||||||
tmp_zip = tmpdir.join('bookmarks_res.zip')
|
|
||||||
extract_all_from_zip_url(zip_url, tmp_zip, tmpdir)
|
|
||||||
return tmpdir
|
return tmpdir
|
||||||
|
|
||||||
|
|
||||||
@ -1253,11 +1249,10 @@ def chrome_db(bookmark_folder):
|
|||||||
tmpdir = bookmark_folder
|
tmpdir = bookmark_folder
|
||||||
|
|
||||||
json_file = [x.strpath for x in tmpdir.listdir() if x.basename == 'Bookmarks'][0]
|
json_file = [x.strpath for x in tmpdir.listdir() if x.basename == 'Bookmarks'][0]
|
||||||
res_pickle_file = [
|
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||||
x.strpath for x in tmpdir.listdir() if x.basename == '25491522_res.pickle'][0]
|
res_yaml_file = os.path.join(dir_path, 'test_bukuDb', '25491522_res.yaml')
|
||||||
res_nopt_pickle_file = [
|
res_nopt_yaml_file = os.path.join(dir_path, 'test_bukuDb', '25491522_res_nopt.yaml')
|
||||||
x.strpath for x in tmpdir.listdir() if x.basename == '25491522_res_nopt.pickle'][0]
|
return json_file, res_yaml_file, res_nopt_yaml_file
|
||||||
return json_file, res_pickle_file, res_nopt_pickle_file
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('add_pt', [True, False])
|
@pytest.mark.parametrize('add_pt', [True, False])
|
||||||
@ -1265,9 +1260,11 @@ def test_load_chrome_database(chrome_db, add_pt):
|
|||||||
"""test method."""
|
"""test method."""
|
||||||
# compatibility
|
# compatibility
|
||||||
json_file = chrome_db[0]
|
json_file = chrome_db[0]
|
||||||
res_pickle_file = chrome_db[1] if add_pt else chrome_db[2]
|
res_yaml_file = chrome_db[1] if add_pt else chrome_db[2]
|
||||||
with open(res_pickle_file, 'rb') as f:
|
dump_data = False
|
||||||
res_pickle = pickle.load(f)
|
if not dump_data:
|
||||||
|
with open(res_yaml_file, 'r') as f:
|
||||||
|
res_yaml = yaml.load(f)
|
||||||
# init
|
# init
|
||||||
import buku
|
import buku
|
||||||
bdb = buku.BukuDb()
|
bdb = buku.BukuDb()
|
||||||
@ -1275,7 +1272,12 @@ def test_load_chrome_database(chrome_db, add_pt):
|
|||||||
bdb.load_chrome_database(json_file, None, add_pt)
|
bdb.load_chrome_database(json_file, None, add_pt)
|
||||||
call_args_list_dict = dict(bdb.add_rec.call_args_list)
|
call_args_list_dict = dict(bdb.add_rec.call_args_list)
|
||||||
# test
|
# test
|
||||||
assert call_args_list_dict == res_pickle
|
if not dump_data:
|
||||||
|
assert call_args_list_dict == res_yaml
|
||||||
|
# dump data for new test
|
||||||
|
if dump_data:
|
||||||
|
with open(res_yaml_file, 'w') as f:
|
||||||
|
yaml.dump(call_args_list_dict, f)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
@ -1284,21 +1286,21 @@ def firefox_db(bookmark_folder):
|
|||||||
tmpdir = bookmark_folder
|
tmpdir = bookmark_folder
|
||||||
|
|
||||||
ff_db_path = [x.strpath for x in tmpdir.listdir() if x.basename == 'places.sqlite'][0]
|
ff_db_path = [x.strpath for x in tmpdir.listdir() if x.basename == 'places.sqlite'][0]
|
||||||
res_pickle_file = [
|
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||||
x.strpath for x in tmpdir.listdir() if x.basename == 'firefox_res.pickle'][0]
|
res_yaml_file = os.path.join(dir_path, 'test_bukuDb', 'firefox_res.yaml')
|
||||||
res_nopt_pickle_file = [
|
res_nopt_yaml_file = os.path.join(dir_path, 'test_bukuDb', 'firefox_res_nopt.yaml')
|
||||||
x.strpath for x in tmpdir.listdir() if x.basename == 'firefox_res_nopt.pickle'][0]
|
return ff_db_path, res_yaml_file, res_nopt_yaml_file
|
||||||
return ff_db_path, res_pickle_file, res_nopt_pickle_file
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('add_pt', [True, False])
|
@pytest.mark.parametrize('add_pt', [True, False])
|
||||||
def test_load_firefox_database(firefox_db, add_pt):
|
def test_load_firefox_database(firefox_db, add_pt):
|
||||||
# compatibility
|
# compatibility
|
||||||
ff_db_path = firefox_db[0]
|
ff_db_path = firefox_db[0]
|
||||||
|
dump_data = False
|
||||||
res_pickle_file = firefox_db[1] if add_pt else firefox_db[2]
|
res_yaml_file = firefox_db[1] if add_pt else firefox_db[2]
|
||||||
with open(res_pickle_file, 'rb') as f:
|
if not dump_data:
|
||||||
res_pickle = pickle.load(f)
|
with open(res_yaml_file, 'r') as f:
|
||||||
|
res_yaml = yaml.load(f)
|
||||||
# init
|
# init
|
||||||
import buku
|
import buku
|
||||||
bdb = buku.BukuDb()
|
bdb = buku.BukuDb()
|
||||||
@ -1306,7 +1308,11 @@ def test_load_firefox_database(firefox_db, add_pt):
|
|||||||
bdb.load_firefox_database(ff_db_path, None, add_pt)
|
bdb.load_firefox_database(ff_db_path, None, add_pt)
|
||||||
call_args_list_dict = dict(bdb.add_rec.call_args_list)
|
call_args_list_dict = dict(bdb.add_rec.call_args_list)
|
||||||
# test
|
# test
|
||||||
assert call_args_list_dict == res_pickle
|
if not dump_data:
|
||||||
|
assert call_args_list_dict == res_yaml
|
||||||
|
if dump_data:
|
||||||
|
with open(res_yaml_file, 'w') as f:
|
||||||
|
yaml.dump(call_args_list_dict, f)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
45
tests/test_bukuDb/25491522_res.yaml
Normal file
45
tests/test_bukuDb/25491522_res.yaml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
? !!python/tuple ['http://voyagerlive.org/', Voyager, ',bookmarks bar,', null, 0,
|
||||||
|
true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://wiki.ubuntu.com/', Ubuntu Wiki (community-edited website),
|
||||||
|
',bookmarks bar,imported from firefox,ubuntu and free software links,', null, 0,
|
||||||
|
true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.debian.org/', Debian (Ubuntu is based on Debian), ',bookmarks
|
||||||
|
bar,imported from firefox,ubuntu and free software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.ubuntu.com/', Ubuntu, ',bookmarks bar,imported from
|
||||||
|
firefox,ubuntu and free software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/adblock-plus/', Adblock
|
||||||
|
Plus, ',bookmarks bar,f+,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/searchpreview/', SearchPreview,
|
||||||
|
',bookmarks bar,f+,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/language-tools/', Language
|
||||||
|
Tools, ',bookmarks bar,f+,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://answers.launchpad.net/ubuntu/+addquestion', Make a Support
|
||||||
|
Request to the Ubuntu Community, ',bookmarks bar,imported from firefox,ubuntu
|
||||||
|
and free software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://one.ubuntu.com/', Ubuntu One - The personal cloud that
|
||||||
|
brings your digital life together, ',bookmarks bar,imported from firefox,ubuntu
|
||||||
|
and free software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.google.com/', Google, ',other bookmarks,', null, 0,
|
||||||
|
true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/about/', About Us, ',bookmarks bar,imported
|
||||||
|
from firefox,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/contribute/', Get Involved, ',bookmarks
|
||||||
|
bar,imported from firefox,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/customize/', Customize Firefox,
|
||||||
|
',bookmarks bar,imported from firefox,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/help/', Help and Tutorials,
|
||||||
|
',bookmarks bar,imported from firefox,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
39
tests/test_bukuDb/25491522_res_nopt.yaml
Normal file
39
tests/test_bukuDb/25491522_res_nopt.yaml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
? !!python/tuple ['http://voyagerlive.org/', Voyager, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://wiki.ubuntu.com/', Ubuntu Wiki (community-edited website),
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.debian.org/', Debian (Ubuntu is based on Debian), ',',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.ubuntu.com/', Ubuntu, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/adblock-plus/', Adblock
|
||||||
|
Plus, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/searchpreview/', SearchPreview,
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/language-tools/', Language
|
||||||
|
Tools, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://answers.launchpad.net/ubuntu/+addquestion', Make a Support
|
||||||
|
Request to the Ubuntu Community, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://one.ubuntu.com/', Ubuntu One - The personal cloud that
|
||||||
|
brings your digital life together, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.google.com/', Google, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/about/', About Us, ',', null, 0,
|
||||||
|
true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/contribute/', Get Involved, ',',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/customize/', Customize Firefox,
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/help/', Help and Tutorials,
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
49
tests/test_bukuDb/firefox_res.yaml
Normal file
49
tests/test_bukuDb/firefox_res.yaml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
? !!python/tuple ['http://voyagerlive.org/', Voyager, ',bookmarks toolbar,', null,
|
||||||
|
0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://wiki.ubuntu.com/', Ubuntu Wiki (community-edited website),
|
||||||
|
',bookmarks menu,ubuntu and free software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.debian.org/', Debian (Ubuntu is based on Debian), ',bookmarks
|
||||||
|
menu,ubuntu and free software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.ubuntu.com/', Ubuntu, ',bookmarks menu,ubuntu and free
|
||||||
|
software links,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/adblock-plus/', '',
|
||||||
|
',language,tags,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/adblock-plus/', Adblock
|
||||||
|
Plus, ',bookmarks toolbar,f+,language,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/searchpreview/', SearchPreview,
|
||||||
|
',bookmarks toolbar,f+,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/language-tools/', '', ',hello,language,tags,',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/language-tools/', Language
|
||||||
|
Tools, ',bookmarks toolbar,f+,hello,language,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://answers.launchpad.net/ubuntu/+addquestion', Make a Support
|
||||||
|
Request to the Ubuntu Community, ',bookmarks menu,ubuntu and free software links,',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://one.ubuntu.com/', Ubuntu One - The personal cloud that
|
||||||
|
brings your digital life together, ',bookmarks menu,ubuntu and free software links,',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.google.co.in/', '', ',bookmarks menu,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/about/', About Us, ',bookmarks menu,mozilla
|
||||||
|
firefox,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/contribute/', Get Involved, ',bookmarks
|
||||||
|
menu,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/customize/', Customize Firefox,
|
||||||
|
',bookmarks menu,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/help/', Help and Tutorials,
|
||||||
|
',bookmarks menu,mozilla firefox,', null, 0, true]
|
||||||
|
: {}
|
45
tests/test_bukuDb/firefox_res_nopt.yaml
Normal file
45
tests/test_bukuDb/firefox_res_nopt.yaml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
? !!python/tuple ['http://voyagerlive.org/', Voyager, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://wiki.ubuntu.com/', Ubuntu Wiki (community-edited website),
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.debian.org/', Debian (Ubuntu is based on Debian), ',',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['http://www.ubuntu.com/', Ubuntu, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/adblock-plus/', '',
|
||||||
|
',language,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/adblock-plus/', Adblock
|
||||||
|
Plus, ',language,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/addon/searchpreview/', SearchPreview,
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/language-tools/', '', ',hello,language,',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://addons.mozilla.org/fr/firefox/language-tools/', Language
|
||||||
|
Tools, ',hello,language,', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://answers.launchpad.net/ubuntu/+addquestion', Make a Support
|
||||||
|
Request to the Ubuntu Community, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://one.ubuntu.com/', Ubuntu One - The personal cloud that
|
||||||
|
brings your digital life together, ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.google.co.in/', '', ',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/about/', About Us, ',', null, 0,
|
||||||
|
true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/contribute/', Get Involved, ',',
|
||||||
|
null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/customize/', Customize Firefox,
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
||||||
|
? !!python/tuple ['https://www.mozilla.org/en-US/firefox/help/', Help and Tutorials,
|
||||||
|
',', null, 0, true]
|
||||||
|
: {}
|
Loading…
Reference in New Issue
Block a user