Export specific tags support.

This commit is contained in:
Arun Prakash Jana 2016-09-20 23:32:04 +05:30
parent 96a527a02b
commit 82ff4318b7
3 changed files with 93 additions and 44 deletions

View File

@ -165,6 +165,7 @@ Shell completion scripts for Bash, Fish and Zsh can be found in respective subdi
power toys:
-e, --export file export bookmarks to Firefox format html
use --tag to export only specific tags
-i, --import file import bookmarks from html file; Firefox,
Google Chrome and IE formats supported
-m, --merge file merge bookmarks from another buku database
@ -250,72 +251,76 @@ Note that URL must precede tags.
$ buku -u 15012014 -c this is a new comment
Applies to --url, --title and --tag too.
7. Import bookmarks:
7. **Export** bookmarks tagged `tag 1` or `tag 2`:
$ buku -e bookmarks.html tag 1, tag 2
All bookmarks are exported if --tag is not specified.
8. **Import** bookmarks:
$ buku -i bookmarks.html
HTML exports from Firefox, Google Chrome and IE are supported.
8. **Delete only comment** for bookmark at 15012014:
9. **Delete only comment** for bookmark at 15012014:
$ buku -u 15012014 -c
Applies to --title and --tag too. URL cannot be deleted without deleting the bookmark.
9. **Update** or refresh **full DB** with page titles from the web:
10. **Update** or refresh **full DB** with page titles from the web:
$ buku -u
This operation does not modify the indexes, URLs, tags or comments. Only title is refreshed if fetched title is non-empty.
10. **Delete** bookmark at index 15012014:
11. **Delete** bookmark at index 15012014:
$ buku -d 15012014
Index 15012020 moved to 15012014
The last index is moved to the deleted index to keep the DB compact.
11. **Delete all** bookmarks:
12. **Delete all** bookmarks:
$ buku -d
12. **Delete** a **range or list** of bookmarks:
13. **Delete** a **range or list** of bookmarks:
$ buku -d 100-200 // delete bookmarks from index 100 to 200
$ buku 100 15 200 // delete bookmarks at indices 100, 15 and 200
13. **Search** bookmarks for **ANY** of the keywords `kernel` and `debugging` in URL, title or tags:
14. **Search** bookmarks for **ANY** of the keywords `kernel` and `debugging` in URL, title or tags:
$ buku -s kernel debugging
14. **Search** bookmarks with **ALL** the keywords `kernel` and `debugging` in URL, title or tags:
15. **Search** bookmarks with **ALL** the keywords `kernel` and `debugging` in URL, title or tags:
$ buku -S kernel debugging
15. **Search** bookmarks **tagged** `general kernel concepts`:
16. **Search** bookmarks **tagged** `general kernel concepts`:
$ buku --st general kernel concepts
16. List **all unique tags** alphabetically:
17. List **all unique tags** alphabetically:
$ buku --st
17. **Encrypt or decrypt** DB with **custom number of iterations** (15) to generate key:
18. **Encrypt or decrypt** DB with **custom number of iterations** (15) to generate key:
$ buku -l 15
$ buku -k 15
The same number of iterations must be specified for one lock & unlock instance. Default is 8, if omitted.
18. **Show details** of bookmark at index 15012014:
19. **Show details** of bookmark at index 15012014:
$ buku -p 15012014
19. **Show all** bookmarks with real index from database:
20. **Show all** bookmarks with real index from database:
$ buku -p
$ buku -p | more
20. **Replace tag** 'old tag' with 'new tag':
21. **Replace tag** 'old tag' with 'new tag':
$ buku -r 'old tag' new tag
21. **Delete tag** 'old tag' from DB:
22. **Delete tag** 'old tag' from DB:
$ buku -r 'old tag'
22. **Append (or delete) tags** 'tag 1', 'tag 2' to (or from) existing tags of bookmark at index 15012014:
23. **Append (or delete) tags** 'tag 1', 'tag 2' to (or from) existing tags of bookmark at index 15012014:
$ buku -u 15012014 --tag + tag 1, tag 2
$ buku -u 15012014 --tag - tag 1, tag 2
23. **Open URL** at index 15012014 in browser:
24. **Open URL** at index 15012014 in browser:
$ buku -o 15012014
24. To list bookmarks with no title or tags for **bookkeeping**:
25. To list bookmarks with no title or tags for **bookkeeping**:
$ buku -S blank
25. More **help**:
26. More **help**:
$ buku
$ man buku

47
buku
View File

@ -950,7 +950,7 @@ class BukuDb:
except IndexError:
logger.error('Index out of bound')
def export_bookmark(self, fp):
def export_bookmark(self, fp, taglist=None):
'''Export bookmarks to a Firefox
bookmarks formatted html file.
@ -959,6 +959,38 @@ class BukuDb:
import time
count = 0
timestamp = int(time.time())
arguments = []
query = 'SELECT * FROM bookmarks'
tagvalid = False
if taglist is not None:
tagstr = parse_tags(taglist)
if len(tagstr) == 0 or tagstr == DELIMITER:
logger.error('Invalid tag')
return
if len(tagstr) > 0:
tags = tagstr.split(DELIMITER)
query = '%s WHERE' % query
for tag in tags:
if tag != '':
tagvalid = True
query += " tags LIKE '%' || ? || '%' OR"
tag = '%s%s%s' % (DELIMITER, tag, DELIMITER)
arguments += (tag,)
if tagvalid:
query = query[:-3]
else:
query = query[:-6]
logger.debug('(%s), %s' % (query, arguments))
self.cur.execute(query, arguments)
resultset = self.cur.fetchall()
if os.path.exists(fp):
resp = input('%s exists. Overwrite? (y/n): ' % fp)
if resp != 'y':
@ -970,11 +1002,6 @@ class BukuDb:
logger.error(e)
return
count = 0
timestamp = int(time.time())
self.cur.execute('SELECT * FROM bookmarks')
resultset = self.cur.fetchall()
f.write('''<!DOCTYPE NETSCAPE-Bookmark-file-1>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
@ -1695,6 +1722,7 @@ if __name__ == '__main__':
power_grp = argparser.add_argument_group(
title='power toys',
description='''-e, --export file export bookmarks to Firefox format html
use --tag to export only specific tags
-i, --import file import bookmarks from html file; Firefox,
Google Chrome and IE formats supported
-m, --merge file merge bookmarks from another buku database
@ -1904,7 +1932,12 @@ if __name__ == '__main__':
# Export bookmarks
if args.export is not None:
bdb.export_bookmark(args.export[0])
if args.tag is None:
bdb.export_bookmark(args.export[0])
elif len(args.tag) == 0:
logger.error('Missing tag')
else:
bdb.export_bookmark(args.export[0], args.tag)
# Import bookmarks
if args.imports is not None:

47
buku.1
View File

@ -101,7 +101,7 @@ Decrypt (unlock) the DB file with
.SH POWER OPTIONS
.TP
.BI \-e " " \--export " file"
Export bookmarks to Firefox bookmarks formatted HTML.
Export bookmarks to Firefox bookmarks formatted HTML. Works with --tag to export only specific tags.
.TP
.BI \-i " " \--import " file"
Import bookmarks exported from Firefox, Google Chrome or IE in HTML format.
@ -217,6 +217,17 @@ Note that URL must precede tags.
Applies to --url, --title and --tag too.
.PP
.IP 7. 4
\fBExport\fR bookmarks tagged 'tag 1' or 'tag 2':
.PP
.EX
.IP
.B buku -e bookmarks.html --tag tag 1, tag 2
.EE
.PP
.IP "" 4
All bookmarks are exported if --tag is not specified.
.PP
.IP 8. 4
\fBImport\fR bookmarks:
.PP
.EX
@ -227,7 +238,7 @@ Applies to --url, --title and --tag too.
.IP "" 4
HTML exports from Firefox, Google Chrome and IE are supported.
.PP
.IP 8. 4
.IP 9. 4
\fBDelete only comment\fR for bookmark at 15012014:
.PP
.EX
@ -238,7 +249,7 @@ HTML exports from Firefox, Google Chrome and IE are supported.
.IP "" 4
Applies to --title and --tag too. URL cannot be deleted without deleting the bookmark.
.PP
.IP 9. 4
.IP 10. 4
\fBUpdate\fR or refresh \fBfull DB\fR with page titles from the web:
.PP
.EX
@ -249,7 +260,7 @@ Applies to --title and --tag too. URL cannot be deleted without deleting the boo
.IP "" 4
This operation does not modify the indexes, URLs, tags or comments. Only title is refreshed if fetched title is non-empty.
.PP
.IP 10. 4
.IP 11. 4
\fBDelete\fR bookmark at index 15012014:
.PP
.EX
@ -260,14 +271,14 @@ This operation does not modify the indexes, URLs, tags or comments. Only title i
.IP "" 4
The last index is moved to the deleted index to keep the DB compact.
.PP
.IP 11. 4
.IP 12. 4
\fBDelete all\fR bookmarks:
.PP
.EX
.IP
.B buku -d
.PP
.IP 12. 4
.IP 13. 4
\fBDelete\fR a \fBrange or list\fR of bookmarks:
.PP
.EX
@ -275,35 +286,35 @@ The last index is moved to the deleted index to keep the DB compact.
.B $ buku -d 100-200 // delete bookmarks from index 100 to 200
.B $ buku 100 15 200 // delete bookmarks at indices 100, 15 and 200
.PP
.IP 13. 4
.IP 14. 4
\fBSearch\fR bookmarks for \fBANY\fR of the keywords 'kernel' and 'debugging' in URL, title or tags:
.PP
.EX
.IP
.B buku -s kernel debugging
.PP
.IP 14. 4
.IP 15. 4
\fBSearch\fR bookmarks with \fBALL\fR the keywords 'kernel' and 'debugging' in URL, title or tags:
.PP
.EX
.IP
.B buku -S kernel debugging
.PP
.IP 15. 4
.IP 16. 4
\fBSearch\fR bookmarks \fBtagged\fR 'general kernel concepts':
.PP
.EX
.IP
.B buku --st general kernel concepts
.PP
.IP 16. 4
.IP 17. 4
List \fBall unique tags\fR alphabetically:
.PP
.EX
.IP
.B buku --st
.PP
.IP 17. 4
.IP 18. 4
\fBEncrypt or decrypt\fR DB with \fBcustom number of iterations\fR (15) to generate key:
.PP
.EX
@ -316,14 +327,14 @@ List \fBall unique tags\fR alphabetically:
.IP "" 4
The same number of iterations must be specified for one lock & unlock instance. Default is 8, if omitted.
.PP
.IP 18. 4
.IP 19. 4
\fBShow details\fR of bookmark at index 15012014:
.PP
.EX
.IP
.B buku -p 15012014
.PP
.IP 19. 4
.IP 20. 4
\fBShow all\fR bookmarks with real index from database:
.PP
.EX
@ -331,21 +342,21 @@ The same number of iterations must be specified for one lock & unlock instance.
.B buku -p
.B buku -p | more
.PP
.IP 20. 4
.IP 21. 4
\fBReplace tag\fR 'old tag' with 'new tag':
.PP
.EX
.IP
.B buku -r 'old tag' new tag
.PP
.IP 21. 4
.IP 22. 4
\fBDelete tag\fR 'old tag' from DB:
.PP
.EX
.IP
.B buku -r 'old tag'
.PP
.IP 22. 4
.IP 23. 4
\fBAppend (or delete) tags\fR 'tag 1', 'tag 2' to (or from) existing tags of bookmark at index 15012014:
.PP
.EX
@ -353,14 +364,14 @@ The same number of iterations must be specified for one lock & unlock instance.
.B buku -u 15012014 --tag + tag 1, tag 2
.B buku -u 15012014 --tag - tag 1, tag 2
.PP
.IP 23. 4
.IP 24. 4
\fBOpen URL\fR at index 15012014 in browser:
.PP
.EX
.IP
.B buku -o 15012014
.PP
.IP 24. 4
.IP 25. 4
To list bookmarks with no title or tags for \fBbookkeeping\fR:
.PP
.EX