Remove length check for empty lists

Fix a bug in get_all_tags() where tuple was not returned.
Fix Travis error.
Convert some prints to tacit
This commit is contained in:
Arun Prakash Jana 2017-01-29 22:51:55 +05:30
parent bb8e683f93
commit ce3a7aa377
2 changed files with 76 additions and 72 deletions

141
buku.py
View File

@ -458,11 +458,11 @@ class BukuDb:
'''
self.cur.execute('SELECT * FROM bookmarks WHERE id = ?', (index,))
results = self.cur.fetchall()
if len(results) == 0:
return None
else:
return results[0]
resultset = self.cur.fetchall()
if resultset:
return resultset[0]
return None
def get_rec_id(self, url):
'''Check if URL already exists in DB
@ -473,10 +473,10 @@ class BukuDb:
self.cur.execute('SELECT id FROM bookmarks WHERE URL = ?', (url,))
resultset = self.cur.fetchall()
if len(resultset) == 0:
return -1
if resultset:
return resultset[0][0]
return resultset[0][0]
return -1
def add_rec(self, url, title_in=None, tags_in=None, desc=None, immutable=0,
delay_commit=False):
@ -815,7 +815,7 @@ class BukuDb:
while True:
cond.acquire()
if len(resultset) > 0:
if resultset:
row = resultset.pop()
else:
cond.release()
@ -972,7 +972,7 @@ class BukuDb:
self.cur.execute('SELECT MAX(id) from bookmarks')
results = self.cur.fetchall()
# Return if the last index left in DB was just deleted
if len(results) == 1 and results[0][0] is None:
if results[0][0] is None:
return
query1 = 'SELECT id, URL, metadata, tags, \
@ -991,7 +991,8 @@ class BukuDb:
(index, row[1], row[2], row[3], row[4],))
if not delay_commit:
self.conn.commit()
print('Index %d moved to %d' % (row[0], index))
if self.chatty:
print('Index %d moved to %d' % (row[0], index))
def delete_rec(self, index, low=0, high=0, is_range=False,
delay_commit=False):
@ -1104,7 +1105,7 @@ class BukuDb:
query = 'SELECT * FROM bookmarks WHERE id = ?'
self.cur.execute(query, (index,))
results = self.cur.fetchall()
if len(results) == 0:
if not results:
logerr('No matching index %d', index)
return
except IndexError:
@ -1146,8 +1147,8 @@ class BukuDb:
def get_all_tags(self):
'''Get list of tags in DB
:return: list of unique tags sorted alphabetically
:return: a dictionary of {tag:usage_count}
:return: tuple (list of unique tags sorted alphabetically,
a dictionary of {tag:usage_count})
'''
tags = []
@ -1163,8 +1164,8 @@ class BukuDb:
else:
dic[tag] += row[1]
if len(tags) == 0:
return tags
if not tags:
return tags, dic
if tags[0] == '':
unique_tags = sorted(tags[1:])
@ -1198,15 +1199,14 @@ class BukuDb:
query = 'SELECT id, tags FROM bookmarks WHERE tags LIKE ?'
self.cur.execute(query, ('%' + orig + '%',))
results = self.cur.fetchall()
if results:
query = 'UPDATE bookmarks SET tags = ? WHERE id = ?'
for row in results:
tags = row[1].replace(orig, newtags)
tags = parse_tags([tags])
self.cur.execute(query, (tags, row[0],))
print('Index %d updated' % row[0])
query = 'UPDATE bookmarks SET tags = ? WHERE id = ?'
for row in results:
tags = row[1].replace(orig, newtags)
tags = parse_tags([tags])
self.cur.execute(query, (tags, row[0],))
print('Index %d updated' % row[0])
if len(results):
self.conn.commit()
return True
@ -1263,30 +1263,28 @@ class BukuDb:
if taglist is not None:
tagstr = parse_tags(taglist)
if len(tagstr) == 0 or tagstr == DELIM:
if not tagstr or tagstr == DELIM:
logerr('Invalid tag')
return False
if len(tagstr) > 0:
tags = tagstr.split(DELIM)
query = '%s WHERE' % query
for tag in tags:
if tag != '':
is_tag_valid = True
query += " tags LIKE '%' || ? || '%' OR"
tag = '%s%s%s' % (DELIM, tag, DELIM)
arguments += (tag,)
tags = tagstr.split(DELIM)
query = '%s WHERE' % query
for tag in tags:
if tag != '':
is_tag_valid = True
query += " tags LIKE '%' || ? || '%' OR"
tag = '%s%s%s' % (DELIM, tag, DELIM)
arguments += (tag,)
if is_tag_valid:
query = query[:-3]
else:
query = query[:-6]
if is_tag_valid:
query = query[:-3]
else:
query = query[:-6]
logdbg('(%s), %s', query, arguments)
self.cur.execute(query, arguments)
resultset = self.cur.fetchall()
if len(resultset) == 0:
if not resultset:
print('No bookmarks exported')
return False
@ -1424,10 +1422,10 @@ Buku bookmarks</H3>
return False
resultset = indb_cur.fetchall()
for row in resultset:
self.add_rec(row[1], row[2], row[3], row[4], row[5], True)
if resultset:
for row in resultset:
self.add_rec(row[1], row[2], row[3], row[4], row[5], True)
if len(resultset):
self.conn.commit()
try:
@ -1455,11 +1453,11 @@ Buku bookmarks</H3>
self.cur.execute('SELECT url FROM bookmarks WHERE id = ?',
(index,))
results = self.cur.fetchall()
if len(results):
url = results[0][0]
else:
if not results:
return None
url = results[0][0]
proxies = {
'https': os.environ.get('https_proxy'),
}
@ -1749,7 +1747,7 @@ def network_handler(url):
return (page_title.strip().replace('\n', ''), 0, 0)
def parse_tags(keywords=None):
def parse_tags(keywords=[]):
'''Format and get tag string from tokens
:param keywords: list of tags
@ -1761,6 +1759,9 @@ def parse_tags(keywords=None):
if keywords is None:
return None
if not keywords:
return DELIM
tags = DELIM
orig_tags = []
unique_tags = []
@ -1816,7 +1817,7 @@ def taglist_subprompt(obj, msg, noninteractive=False):
while True:
if new_results:
if len(unique_tags) == 0:
if not unique_tags:
count = 0
print('0 tags')
else:
@ -2197,7 +2198,7 @@ def main():
pass
# If piped input, set argument vector
if len(pipeargs) > 0:
if pipeargs:
sys.argv = pipeargs
# Setup custom argument parser
@ -2365,7 +2366,7 @@ POSITIONAL ARGUMENTS:
addarg('--fixtags', action='store_true', help=HIDE)
# Show help and exit if no arguments
if len(sys.argv) < 2:
if len(sys.argv) == 1:
argparser.print_help(sys.stdout)
sys.exit(1)
@ -2404,21 +2405,21 @@ POSITIONAL ARGUMENTS:
# Set up tags
if args.tag is not None:
if len(args.tag):
if args.tag:
tags_in = args.tag
else:
tags_in = [DELIM, ]
# Set up title
if args.title is not None:
if len(args.title):
if args.title:
title_in = ' '.join(args.title)
else:
title_in = ''
# Set up comment
if args.comment is not None:
if len(args.comment) > 0:
if args.comment:
desc_in = ' '.join(args.comment)
else:
desc_in = ''
@ -2433,14 +2434,13 @@ POSITIONAL ARGUMENTS:
tags = DELIM
keywords = args.add
if tags_in is not None:
if tags_in[0] == '+' and len(tags_in) == 1:
pass
elif tags_in[0] == '+':
# The case: buku -a url tag1, tag2 --tag + tag3, tag4
tags_in = tags_in[1:]
# In case of add, args.add may have URL followed by tags
# Add delimiter as url+tags may not end with one
keywords = args.add + [DELIM] + tags_in
if tags_in[0] == '+':
if len(tags_in) > 1:
# The case: buku -a url tag1, tag2 --tag + tag3, tag4
tags_in = tags_in[1:]
# In case of add, args.add may have URL followed by tags
# Add delimiter as url+tags may not end with one
keywords = args.add + [DELIM] + tags_in
else:
keywords = args.add + [DELIM] + tags_in
@ -2482,10 +2482,10 @@ POSITIONAL ARGUMENTS:
# In case of search and delete/update,
# prompt should be non-interactive
# delete gets priority over update
if args.delete is not None and len(args.delete) == 0:
if args.delete is not None and not args.delete:
oneshot = True
to_delete = True
elif args.update is not None and len(args.update) == 0:
elif args.update is not None and not args.update:
oneshot = True
update_search_results = True
@ -2507,7 +2507,7 @@ POSITIONAL ARGUMENTS:
url_in = ''
# Parse tags into a comma-separated string
if tags_in and len(tags_in):
if tags_in:
if tags_in[0] == '+':
tags = '+%s' % parse_tags(tags_in[1:])
elif tags_in[0] == '-':
@ -2517,13 +2517,14 @@ POSITIONAL ARGUMENTS:
else:
tags = None
if len(args.update) == 0:
if not args.update:
# Update all records only if search was not opted
if not search_opted:
bdb.update_rec(0, url_in, title_in, tags, desc_in,
args.immutable, args.threads)
elif update_search_results and search_results is not None:
print("Updated results:\n")
if not args.tacit:
print("Updated results:\n")
pos = len(search_results) - 1
while pos >= 0:
@ -2565,7 +2566,7 @@ POSITIONAL ARGUMENTS:
# Delete record
if args.delete is not None:
if len(args.delete) == 0:
if not args.delete:
# Attempt delete-all only if search was not opted
if not search_opted:
bdb.cleardb()
@ -2598,7 +2599,7 @@ POSITIONAL ARGUMENTS:
# Print record
if args.print is not None:
if len(args.print) == 0:
if not args.print:
bdb.print_rec(0)
else:
for idx in args.print:
@ -2627,7 +2628,7 @@ POSITIONAL ARGUMENTS:
if args.export is not None:
if args.tag is None:
bdb.exportdb(args.export[0], args.markdown)
elif len(args.tag) == 0:
elif not args.tag:
logerr('Missing tag')
else:
bdb.exportdb(args.export[0], args.markdown, args.tag)
@ -2642,7 +2643,7 @@ POSITIONAL ARGUMENTS:
# Open URL in browser
if args.open is not None:
if len(args.open) == 0:
if not args.open:
bdb.browse_by_index(0)
else:
for idx in args.open:

View File

@ -11,9 +11,12 @@ class TestHelpers(unittest.TestCase):
# @unittest.skip('skipping')
def test_parse_tags(self):
# call without arguments
parsed = parse_tags()
# call with None
parsed = parse_tags(None)
self.assertIsNone(parsed)
# call with empty list
parsed = parse_tags([])
self.assertEqual(parsed, ",")
# empty tags
parsed = parse_tags([",,,,,"])
self.assertEqual(parsed, ",")