in ossdbtoolsservice/language/completion_refresher.py [0:0]
def _bg_refresh(self, callbacks, history=None, settings=None):
settings = settings or {}
completer: PGCompleter or MySQLCompleter = COMPLETER_MAP[self.connection._provider_name](smart_completion=True, settings=settings)
self.server.refresh()
metadata_executor = MetadataExecutor(self.server)
# If callbacks is a single function then push it into a list.
if callable(callbacks):
callbacks = [callbacks]
try:
while True:
for do_refresh in self.refreshers.values():
do_refresh(completer, metadata_executor)
if self._restart_refresh.is_set():
self._restart_refresh.clear()
break
else:
# Break out of while loop if the for loop finishes natually
# without hitting the break statement.
break
# Start over the refresh from the beginning if the for loop hit the
# break statement.
continue
# Load history into completer so it can learn user preferences
n_recent = 100
if history:
for recent in history[-n_recent:]:
completer.extend_query_history(recent, is_init=True)
except Exception as e:
if self.logger:
self.logger.exception('Error during metadata refresh: {0}', e)
for callback in callbacks:
callback(completer)
if self._restart_refresh.is_set():
self._restart_refresh.clear()