1+ from __future__ import annotations
2+
13import threading
4+ from typing import Callable
5+
26from .packages .special .main import COMMANDS
37from collections import OrderedDict
48
711
812
913class CompletionRefresher (object ):
10- refreshers = OrderedDict ()
14+ refreshers : dict [ str , Callable ] = OrderedDict ()
1115
12- def __init__ (self ):
13- self ._completer_thread = None
16+ def __init__ (self ) -> None :
17+ self ._completer_thread : threading . Thread | None = None
1418 self ._restart_refresh = threading .Event ()
1519
16- def refresh (self , executor , callbacks , completer_options = None ):
20+ def refresh (
21+ self ,
22+ executor : SQLExecute ,
23+ callbacks : Callable | list [Callable ],
24+ completer_options : dict | None = None ,
25+ ) -> list [tuple ]:
1726 """Creates a SQLCompleter object and populates it with the relevant
1827 completion suggestions in a background thread.
1928
@@ -36,6 +45,7 @@ def refresh(self, executor, callbacks, completer_options=None):
3645 # if DB is memory, needed to use same connection
3746 # So can't use same connection with different thread
3847 self ._bg_refresh (executor , callbacks , completer_options )
48+ return [(None , None , None , "Auto-completion refresh started in the background." )]
3949 else :
4050 self ._completer_thread = threading .Thread (
4151 target = self ._bg_refresh ,
@@ -44,19 +54,17 @@ def refresh(self, executor, callbacks, completer_options=None):
4454 )
4555 self ._completer_thread .daemon = True
4656 self ._completer_thread .start ()
47- return [
48- (
49- None ,
50- None ,
51- None ,
52- "Auto-completion refresh started in the background." ,
53- )
54- ]
55-
56- def is_refreshing (self ):
57- return self ._completer_thread and self ._completer_thread .is_alive ()
58-
59- def _bg_refresh (self , sqlexecute , callbacks , completer_options ):
57+ return [(None , None , None , "Auto-completion refresh started in the background." )]
58+
59+ def is_refreshing (self ) -> bool :
60+ return bool (self ._completer_thread and self ._completer_thread .is_alive ())
61+
62+ def _bg_refresh (
63+ self ,
64+ sqlexecute : SQLExecute ,
65+ callbacks : Callable | list [Callable ],
66+ completer_options : dict ,
67+ ) -> None :
6068 completer = SQLCompleter (** completer_options )
6169
6270 e = sqlexecute
@@ -90,41 +98,42 @@ def _bg_refresh(self, sqlexecute, callbacks, completer_options):
9098 callback (completer )
9199
92100
93- def refresher (name , refreshers = CompletionRefresher .refreshers ):
101+ def refresher (name : str , refreshers : dict [ str , Callable ] = CompletionRefresher .refreshers ) -> Callable :
94102 """Decorator to add the decorated function to the dictionary of
95103 refreshers. Any function decorated with a @refresher will be executed as
96104 part of the completion refresh routine."""
97105
98- def wrapper (wrapped ) :
106+ def wrapper (wrapped : Callable ) -> Callable :
99107 refreshers [name ] = wrapped
100108 return wrapped
101109
102110 return wrapper
103111
104112
105113@refresher ("databases" )
106- def refresh_databases (completer , executor ) :
114+ def refresh_databases (completer : SQLCompleter , executor : SQLExecute ) -> None :
107115 completer .extend_database_names (executor .databases ())
108116
109117
110118@refresher ("schemata" )
111- def refresh_schemata (completer , executor ) :
119+ def refresh_schemata (completer : SQLCompleter , executor : SQLExecute ) -> None :
112120 # name of the current database.
113121 completer .extend_schemata (executor .dbname )
114122 completer .set_dbname (executor .dbname )
115123
116124
117125@refresher ("tables" )
118- def refresh_tables (completer , executor ):
119- completer .extend_relations (executor .tables (), kind = "tables" )
120- completer .extend_columns (executor .table_columns (), kind = "tables" )
126+ def refresh_tables (completer : SQLCompleter , executor : SQLExecute ) -> None :
127+ table_cols = list (executor .table_columns ())
128+ completer .extend_relations (table_cols , kind = "tables" )
129+ completer .extend_columns (table_cols , kind = "tables" )
121130
122131
123132@refresher ("functions" )
124- def refresh_functions (completer , executor ) :
133+ def refresh_functions (completer : SQLCompleter , executor : SQLExecute ) -> None :
125134 completer .extend_functions (executor .functions ())
126135
127136
128137@refresher ("special_commands" )
129- def refresh_special (completer , executor ) :
130- completer .extend_special_commands (COMMANDS .keys ())
138+ def refresh_special (completer : SQLCompleter , executor : SQLExecute ) -> None :
139+ completer .extend_special_commands (list ( COMMANDS .keys () ))
0 commit comments