11# mypy: ignore-errors
22
3+ from __future__ import annotations
4+
35import threading
6+ from typing import Callable , Dict , List , Optional , Tuple
7+
48from .packages .special .main import COMMANDS
59from collections import OrderedDict
610
913
1014
1115class CompletionRefresher (object ):
12- refreshers = OrderedDict ()
16+ refreshers : Dict [ str , Callable ] = OrderedDict ()
1317
14- def __init__ (self ):
15- self ._completer_thread = None
18+ def __init__ (self ) -> None :
19+ self ._completer_thread : Optional [ threading . Thread ] = None
1620 self ._restart_refresh = threading .Event ()
1721
18- def refresh (self , executor , callbacks , completer_options = None ):
22+ def refresh (
23+ self ,
24+ executor : SQLExecute ,
25+ callbacks : Callable | List [Callable ],
26+ completer_options : Optional [dict ] = None ,
27+ ) -> List [Tuple ]:
1928 """Creates a SQLCompleter object and populates it with the relevant
2029 completion suggestions in a background thread.
2130
@@ -34,7 +43,7 @@ def refresh(self, executor, callbacks, completer_options=None):
3443 self ._restart_refresh .set ()
3544 return [(None , None , None , "Auto-completion refresh restarted." )]
3645 else :
37- if executor .dbname == ":memory: " :
46+ if executor .dbname == ":memory" :
3847 # if DB is memory, needed to use same connection
3948 # So can't use same connection with different thread
4049 self ._bg_refresh (executor , callbacks , completer_options )
@@ -46,19 +55,17 @@ def refresh(self, executor, callbacks, completer_options=None):
4655 )
4756 self ._completer_thread .daemon = True
4857 self ._completer_thread .start ()
49- return [
50- (
51- None ,
52- None ,
53- None ,
54- "Auto-completion refresh started in the background." ,
55- )
56- ]
57-
58- def is_refreshing (self ):
59- return self ._completer_thread and self ._completer_thread .is_alive ()
60-
61- def _bg_refresh (self , sqlexecute , callbacks , completer_options ):
58+ return [(None , None , None , "Auto-completion refresh started in the background." )]
59+
60+ def is_refreshing (self ) -> bool :
61+ return bool (self ._completer_thread and self ._completer_thread .is_alive ())
62+
63+ def _bg_refresh (
64+ self ,
65+ sqlexecute : SQLExecute ,
66+ callbacks : Callable | List [Callable ],
67+ completer_options : dict ,
68+ ) -> None :
6269 completer = SQLCompleter (** completer_options )
6370
6471 e = sqlexecute
@@ -92,41 +99,42 @@ def _bg_refresh(self, sqlexecute, callbacks, completer_options):
9299 callback (completer )
93100
94101
95- def refresher (name , refreshers = CompletionRefresher .refreshers ):
102+ def refresher (name : str , refreshers : Dict [ str , Callable ] = CompletionRefresher .refreshers ):
96103 """Decorator to add the decorated function to the dictionary of
97104 refreshers. Any function decorated with a @refresher will be executed as
98105 part of the completion refresh routine."""
99106
100- def wrapper (wrapped ) :
107+ def wrapper (wrapped : Callable ) -> Callable :
101108 refreshers [name ] = wrapped
102109 return wrapped
103110
104111 return wrapper
105112
106113
107114@refresher ("databases" )
108- def refresh_databases (completer , executor ) :
115+ def refresh_databases (completer : SQLCompleter , executor : SQLExecute ) -> None :
109116 completer .extend_database_names (executor .databases ())
110117
111118
112119@refresher ("schemata" )
113- def refresh_schemata (completer , executor ) :
120+ def refresh_schemata (completer : SQLCompleter , executor : SQLExecute ) -> None :
114121 # name of the current database.
115122 completer .extend_schemata (executor .dbname )
116123 completer .set_dbname (executor .dbname )
117124
118125
119126@refresher ("tables" )
120- def refresh_tables (completer , executor ):
121- completer .extend_relations (executor .tables (), kind = "tables" )
122- completer .extend_columns (executor .table_columns (), kind = "tables" )
127+ def refresh_tables (completer : SQLCompleter , executor : SQLExecute ) -> None :
128+ table_cols = list (executor .table_columns ())
129+ completer .extend_relations (table_cols , kind = "tables" )
130+ completer .extend_columns (table_cols , kind = "tables" )
123131
124132
125133@refresher ("functions" )
126- def refresh_functions (completer , executor ) :
134+ def refresh_functions (completer : SQLCompleter , executor : SQLExecute ) -> None :
127135 completer .extend_functions (executor .functions ())
128136
129137
130138@refresher ("special_commands" )
131- def refresh_special (completer , executor ) :
132- completer .extend_special_commands (COMMANDS .keys ())
139+ def refresh_special (completer : SQLCompleter , executor : SQLExecute ) -> None :
140+ completer .extend_special_commands (list ( COMMANDS .keys () ))
0 commit comments