From 679e001a48d763b8fed7788ad4f4ccef6900d906 Mon Sep 17 00:00:00 2001 From: Ryan Roden-Corrent Date: Fri, 9 Jun 2017 08:06:12 -0400 Subject: [PATCH] Separate sqlcategory title from table name. Also fix a number of sql/completion tests that were failing. --- qutebrowser/completion/models/sqlcategory.py | 10 +++++---- qutebrowser/completion/models/urlmodel.py | 3 ++- tests/unit/completion/test_models.py | 23 +++++++++----------- tests/unit/completion/test_sqlcategory.py | 14 ++++++------ 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/qutebrowser/completion/models/sqlcategory.py b/qutebrowser/completion/models/sqlcategory.py index d49b1db51..7e0ecf2c5 100644 --- a/qutebrowser/completion/models/sqlcategory.py +++ b/qutebrowser/completion/models/sqlcategory.py @@ -31,12 +31,14 @@ class SqlCategory(QSqlQueryModel): """Wraps a SqlQuery for use as a completion category.""" - def __init__(self, name, *, filter_fields, sort_by=None, sort_order=None, - select='*', where=None, group_by=None, parent=None): + def __init__(self, name, *, title=None, filter_fields, sort_by=None, + sort_order=None, select='*', where=None, group_by=None, + parent=None): """Create a new completion category backed by a sql table. Args: - name: Name of category, and the table in the database. + name: Name of the table in the database. + title: Title of category, defaults to table name. filter_fields: Names of fields to apply filter pattern to. select: A custom result column expression for the select statement. where: An optional clause to filter out some rows. @@ -44,7 +46,7 @@ class SqlCategory(QSqlQueryModel): sort_order: Either 'asc' or 'desc', if sort_by is non-None """ super().__init__(parent=parent) - self.name = name + self.name = title or name querystr = 'select {} from {} where ('.format(select, name) # the incoming pattern will have literal % and _ escaped with '\' diff --git a/qutebrowser/completion/models/urlmodel.py b/qutebrowser/completion/models/urlmodel.py index 7e42285a6..8cacca873 100644 --- a/qutebrowser/completion/models/urlmodel.py +++ b/qutebrowser/completion/models/urlmodel.py @@ -78,7 +78,8 @@ def url(): timefmt = config.get('completion', 'timestamp-format').replace("'", "`") select_time = "strftime('{}', last_atime, 'unixepoch')".format(timefmt) hist_cat = sqlcategory.SqlCategory( - 'CompletionHistory', sort_order='desc', sort_by='last_atime', + 'CompletionHistory', title='History', + sort_order='desc', sort_by='last_atime', filter_fields=['url', 'title'], select='url, title, {}'.format(select_time)) model.add_category(hist_cat) diff --git a/tests/unit/completion/test_models.py b/tests/unit/completion/test_models.py index c85ecbf38..89da30013 100644 --- a/tests/unit/completion/test_models.py +++ b/tests/unit/completion/test_models.py @@ -161,16 +161,15 @@ def web_history_stub(stubs, init_sql): @pytest.fixture def web_history(web_history_stub, init_sql): """Pre-populate the web-history database.""" - web_history_stub.insert(['http://qutebrowser.org', 'qutebrowser', - datetime(2015, 9, 5).timestamp()]) - web_history_stub.insert(['https://python.org', 'Welcome to Python.org', - datetime(2016, 2, 8).timestamp()]) - web_history_stub.insert(['https://python.org', 'Welcome to Python.org', - datetime(2016, 3, 8).timestamp()]) - web_history_stub.insert(['https://python.org', 'Welcome to Python.org', - datetime(2014, 3, 8).timestamp()]) - web_history_stub.insert(['https://github.com', 'https://github.com', - datetime(2016, 5, 1).timestamp()]) + web_history_stub.insert(url='http://qutebrowser.org', + title='qutebrowser', + last_atime=datetime(2015, 9, 5).timestamp()) + web_history_stub.insert(url='https://python.org', + title='Welcome to Python.org', + last_atime=datetime(2016, 3, 8).timestamp()) + web_history_stub.insert(url='https://github.com', + title='https://github.com', + last_atime=datetime(2016, 5, 1).timestamp()) return web_history_stub @@ -304,9 +303,7 @@ def test_url_completion(qtmodeltester, config_stub, web_history, quickmarks, "History": [ ('https://github.com', 'https://github.com', '2016-05-01'), ('https://python.org', 'Welcome to Python.org', '2016-03-08'), - ('https://python.org', 'Welcome to Python.org', '2016-02-08'), ('http://qutebrowser.org', 'qutebrowser', '2015-09-05'), - ('https://python.org', 'Welcome to Python.org', '2014-03-08'), ], }) @@ -334,7 +331,7 @@ def test_url_completion_pattern(config_stub, web_history_stub, url, title, pattern, rowcount): """Test that url completion filters by url and title.""" config_stub.data['completion'] = {'timestamp-format': '%Y-%m-%d'} - web_history_stub.insert([url, title, 0]) + web_history_stub.insert(url=url, title=title, last_atime=0) model = urlmodel.url() model.set_pattern(pattern) # 2, 0 is History diff --git a/tests/unit/completion/test_sqlcategory.py b/tests/unit/completion/test_sqlcategory.py index cef17c964..d81fa8cf0 100644 --- a/tests/unit/completion/test_sqlcategory.py +++ b/tests/unit/completion/test_sqlcategory.py @@ -126,7 +126,7 @@ def test_set_pattern(pattern, filter_cols, before, after): def test_select(): table = sql.SqlTable('Foo', ['a', 'b', 'c']) - table.insert({'a': 'foo', 'b': 'bar', 'c': 'baz'}) + table.insert(a='foo', b='bar', c='baz') cat = sqlcategory.SqlCategory('Foo', filter_fields=['a'], select='b, c, a') cat.set_pattern('') utils.validate_model(cat, [('bar', 'baz', 'foo')]) @@ -134,8 +134,8 @@ def test_select(): def test_where(): table = sql.SqlTable('Foo', ['a', 'b', 'c']) - table.insert({'a': 'foo', 'b': 'bar', 'c': False}) - table.insert({'a': 'baz', 'b': 'biz', 'c': True}) + table.insert(a='foo', b='bar', c=False) + table.insert(a='baz', b='biz', c=True) cat = sqlcategory.SqlCategory('Foo', filter_fields=['a'], where='not c') cat.set_pattern('') utils.validate_model(cat, [('foo', 'bar', False)]) @@ -143,10 +143,10 @@ def test_where(): def test_group(): table = sql.SqlTable('Foo', ['a', 'b']) - table.insert({'a': 'foo', 'b': 1}) - table.insert({'a': 'bar', 'b': 3}) - table.insert({'a': 'foo', 'b': 2}) - table.insert({'a': 'bar', 'b': 0}) + table.insert(a='foo', b=1) + table.insert(a='bar', b=3) + table.insert(a='foo', b=2) + table.insert(a='bar', b=0) cat = sqlcategory.SqlCategory('Foo', filter_fields=['a'], select='a, max(b)', group_by='a') cat.set_pattern('')