From 87a4b1d6627e01b377c1e18afaddea101dc430ba Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 2 Sep 2018 18:26:43 +0200 Subject: [PATCH] Reduce code duplication --- qutebrowser/browser/history.py | 24 +++++++++++++----------- qutebrowser/misc/sql.py | 16 ++++++++-------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/qutebrowser/browser/history.py b/qutebrowser/browser/history.py index 1cdf40849..10d3ec35f 100644 --- a/qutebrowser/browser/history.py +++ b/qutebrowser/browser/history.py @@ -51,22 +51,23 @@ class CompletionMetaInfo(sql.SqlTable): if key not in self: self[key] = default - def __contains__(self, key): + def _check_key(self, key): if key not in self.KEYS: raise KeyError(key) + + def __contains__(self, key): + self._check_key(key) query = self.contains_query('key') return query.run(val=key).value() def __getitem__(self, key): - if key not in self.KEYS: - raise KeyError(key) + self._check_key(key) query = sql.Query('SELECT value FROM CompletionMetaInfo ' 'WHERE key = :key') return query.run(key=key).value() def __setitem__(self, key, value): - if key not in self.KEYS: - raise KeyError(key) + self._check_key(key) self.insert({'key': key, 'value': value}, replace=True) @@ -148,6 +149,11 @@ class WebHistory(sql.SqlTable): except sql.SqlEnvironmentError as e: message.error("Failed to write history: {}".format(e.text())) + def _is_excluded(self, url): + """Check if the given URL is excluded from the completion.""" + return any(pattern.matches(url) + for pattern in config.val.completion.web_history.exclude) + def _rebuild_completion(self): data = {'url': [], 'title': [], 'last_atime': []} # select the latest entry for each url @@ -156,8 +162,7 @@ class WebHistory(sql.SqlTable): 'GROUP BY url ORDER BY atime asc') for entry in q.run(): url = QUrl(entry.url) - if any(pattern.matches(url) - for pattern in config.val.completion.web_history.exclude): + if self._is_excluded(url): continue data['url'].append(self._format_completion_url(url)) data['title'].append(entry.title) @@ -269,10 +274,7 @@ class WebHistory(sql.SqlTable): 'atime': atime, 'redirect': redirect}) - if redirect: - return - if any(pattern.matches(url) - for pattern in config.val.completion.web_history.exclude): + if redirect or self._is_excluded(url): return self.completion.insert({ diff --git a/qutebrowser/misc/sql.py b/qutebrowser/misc/sql.py index 24b3bda5c..8053e5151 100644 --- a/qutebrowser/misc/sql.py +++ b/qutebrowser/misc/sql.py @@ -191,16 +191,19 @@ class Query: error.text()) raise_sqlite_error(msg, error) + def _bind_values(self, values): + for key, val in values.items(): + self.query.bindValue(':{}'.format(key), val) + if any(val is None for val in self.bound_values().values()): + raise SqlBugError("Missing bound values!") + def run(self, **values): """Execute the prepared query.""" log.sql.debug('Running SQL query: "{}"'.format( self.query.lastQuery())) - for key, val in values.items(): - self.query.bindValue(':{}'.format(key), val) + self._bind_values(values) log.sql.debug('query bindings: {}'.format(self.bound_values())) - if any(val is None for val in self.bound_values().values()): - raise SqlBugError("Missing bound values!") ok = self.query.exec_() self._check_ok('exec', ok) @@ -212,10 +215,7 @@ class Query: log.sql.debug('Running SQL query (batch): "{}"'.format( self.query.lastQuery())) - for key, val in values.items(): - self.query.bindValue(':{}'.format(key), val) - if any(val is None for val in self.bound_values().values()): - raise SqlBugError("Missing bound values!") + self._bind_values(values) db = QSqlDatabase.database() ok = db.transaction()