Reduce code duplication

This commit is contained in:
Florian Bruhin 2018-09-02 18:26:43 +02:00
parent ed67263a64
commit 87a4b1d662
2 changed files with 21 additions and 19 deletions

View File

@ -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({

View File

@ -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()