Reduce code duplication
This commit is contained in:
parent
ed67263a64
commit
87a4b1d662
@ -51,22 +51,23 @@ class CompletionMetaInfo(sql.SqlTable):
|
|||||||
if key not in self:
|
if key not in self:
|
||||||
self[key] = default
|
self[key] = default
|
||||||
|
|
||||||
def __contains__(self, key):
|
def _check_key(self, key):
|
||||||
if key not in self.KEYS:
|
if key not in self.KEYS:
|
||||||
raise KeyError(key)
|
raise KeyError(key)
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
self._check_key(key)
|
||||||
query = self.contains_query('key')
|
query = self.contains_query('key')
|
||||||
return query.run(val=key).value()
|
return query.run(val=key).value()
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
if key not in self.KEYS:
|
self._check_key(key)
|
||||||
raise KeyError(key)
|
|
||||||
query = sql.Query('SELECT value FROM CompletionMetaInfo '
|
query = sql.Query('SELECT value FROM CompletionMetaInfo '
|
||||||
'WHERE key = :key')
|
'WHERE key = :key')
|
||||||
return query.run(key=key).value()
|
return query.run(key=key).value()
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
if key not in self.KEYS:
|
self._check_key(key)
|
||||||
raise KeyError(key)
|
|
||||||
self.insert({'key': key, 'value': value}, replace=True)
|
self.insert({'key': key, 'value': value}, replace=True)
|
||||||
|
|
||||||
|
|
||||||
@ -148,6 +149,11 @@ class WebHistory(sql.SqlTable):
|
|||||||
except sql.SqlEnvironmentError as e:
|
except sql.SqlEnvironmentError as e:
|
||||||
message.error("Failed to write history: {}".format(e.text()))
|
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):
|
def _rebuild_completion(self):
|
||||||
data = {'url': [], 'title': [], 'last_atime': []}
|
data = {'url': [], 'title': [], 'last_atime': []}
|
||||||
# select the latest entry for each url
|
# select the latest entry for each url
|
||||||
@ -156,8 +162,7 @@ class WebHistory(sql.SqlTable):
|
|||||||
'GROUP BY url ORDER BY atime asc')
|
'GROUP BY url ORDER BY atime asc')
|
||||||
for entry in q.run():
|
for entry in q.run():
|
||||||
url = QUrl(entry.url)
|
url = QUrl(entry.url)
|
||||||
if any(pattern.matches(url)
|
if self._is_excluded(url):
|
||||||
for pattern in config.val.completion.web_history.exclude):
|
|
||||||
continue
|
continue
|
||||||
data['url'].append(self._format_completion_url(url))
|
data['url'].append(self._format_completion_url(url))
|
||||||
data['title'].append(entry.title)
|
data['title'].append(entry.title)
|
||||||
@ -269,10 +274,7 @@ class WebHistory(sql.SqlTable):
|
|||||||
'atime': atime,
|
'atime': atime,
|
||||||
'redirect': redirect})
|
'redirect': redirect})
|
||||||
|
|
||||||
if redirect:
|
if redirect or self._is_excluded(url):
|
||||||
return
|
|
||||||
if any(pattern.matches(url)
|
|
||||||
for pattern in config.val.completion.web_history.exclude):
|
|
||||||
return
|
return
|
||||||
|
|
||||||
self.completion.insert({
|
self.completion.insert({
|
||||||
|
@ -191,16 +191,19 @@ class Query:
|
|||||||
error.text())
|
error.text())
|
||||||
raise_sqlite_error(msg, error)
|
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):
|
def run(self, **values):
|
||||||
"""Execute the prepared query."""
|
"""Execute the prepared query."""
|
||||||
log.sql.debug('Running SQL query: "{}"'.format(
|
log.sql.debug('Running SQL query: "{}"'.format(
|
||||||
self.query.lastQuery()))
|
self.query.lastQuery()))
|
||||||
|
|
||||||
for key, val in values.items():
|
self._bind_values(values)
|
||||||
self.query.bindValue(':{}'.format(key), val)
|
|
||||||
log.sql.debug('query bindings: {}'.format(self.bound_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_()
|
ok = self.query.exec_()
|
||||||
self._check_ok('exec', ok)
|
self._check_ok('exec', ok)
|
||||||
@ -212,10 +215,7 @@ class Query:
|
|||||||
log.sql.debug('Running SQL query (batch): "{}"'.format(
|
log.sql.debug('Running SQL query (batch): "{}"'.format(
|
||||||
self.query.lastQuery()))
|
self.query.lastQuery()))
|
||||||
|
|
||||||
for key, val in values.items():
|
self._bind_values(values)
|
||||||
self.query.bindValue(':{}'.format(key), val)
|
|
||||||
if any(val is None for val in self.bound_values().values()):
|
|
||||||
raise SqlBugError("Missing bound values!")
|
|
||||||
|
|
||||||
db = QSqlDatabase.database()
|
db = QSqlDatabase.database()
|
||||||
ok = db.transaction()
|
ok = db.transaction()
|
||||||
|
Loading…
Reference in New Issue
Block a user