88
99from pygls import uris
1010
11- from codeflash .api .cfapi import get_user_id
11+ from codeflash .api .cfapi import get_codeflash_api_key , get_user_id
1212from codeflash .code_utils .shell_utils import save_api_key_to_rc
1313from codeflash .either import is_successful
1414from codeflash .lsp .server import CodeflashLanguageServer , CodeflashLanguageServerProtocol
@@ -125,17 +125,21 @@ def discover_function_tests(server: CodeflashLanguageServer, params: FunctionOpt
125125 return {"functionName" : params .functionName , "status" : "success" , "discovered_tests" : num_discovered_tests }
126126
127127
128- @server .feature ("apiKeyExistsAndValid" )
129- def check_api_key (_server : CodeflashLanguageServer , _params : any ) -> dict [str , str ]:
130- try :
131- user_id = get_user_id ()
132- if user_id is None :
133- return {"status" : "error" , "message" : "api key not found or invalid" }
128+ def _initialize_optimizer_if_valid (server : CodeflashLanguageServer ) -> dict [str , str ]:
129+ user_id = get_user_id ()
130+ if user_id is None :
131+ return {"status" : "error" , "message" : "api key not found or invalid" }
132+
133+ from codeflash .optimization .optimizer import Optimizer
134+
135+ server .optimizer = Optimizer (server .args )
136+ return {"status" : "success" , "user_id" : user_id }
134137
135- from codeflash .optimization .optimizer import Optimizer
136138
137- server .optimizer = Optimizer (server .args )
138- return {"status" : "success" , "user_id" : user_id } # noqa
139+ @server .feature ("apiKeyExistsAndValid" )
140+ def check_api_key (server : CodeflashLanguageServer , _params : any ) -> dict [str , str ]:
141+ try :
142+ return _initialize_optimizer_if_valid (server )
139143 except Exception :
140144 return {"status" : "error" , "message" : "something went wrong while validating the api key" }
141145
@@ -144,17 +148,22 @@ def check_api_key(_server: CodeflashLanguageServer, _params: any) -> dict[str, s
144148def provide_api_key (server : CodeflashLanguageServer , params : ProvideApiKeyParams ) -> dict [str , str ]:
145149 try :
146150 api_key = params .api_key
151+ if not api_key .startswith ("cf-" ):
152+ return {"status" : "error" , "message" : "Api key is not valid" }
153+
147154 result = save_api_key_to_rc (api_key )
148155 if not is_successful (result ):
149156 return {"status" : "error" , "message" : result .failure ()}
150- user_id = get_user_id ()
151- if user_id is None :
152- return {"status" : "error" , "message" : "api key is not valid" }
153157
154- from codeflash .optimization .optimizer import Optimizer
158+ # clear cache to ensure the new api key is used
159+ get_codeflash_api_key .cache_clear ()
160+ get_user_id .cache_clear ()
161+
162+ init_result = _initialize_optimizer_if_valid (server )
163+ if init_result ["status" ] == "error" :
164+ return {"status" : "error" , "message" : "Api key is not valid" }
155165
156- server .optimizer = Optimizer (server .args )
157- return {"status" : "success" , "message" : "Api key saved successfully" , "user_id" : user_id } # noqa: TRY300
166+ return {"status" : "success" , "message" : "Api key saved successfully" , "user_id" : init_result ["user_id" ]}
158167 except Exception :
159168 return {"status" : "error" , "message" : "something went wrong while saving the api key" }
160169
0 commit comments