11import asyncio
2- from concurrent .futures import ThreadPoolExecutor
32import json
43from typing import AsyncGenerator , List , Optional
54
6- from httpx import AsyncClient , HTTPStatusError
5+ import requests
76import structlog
8- from fastapi import APIRouter , Depends , FastAPI , HTTPException
7+ from fastapi import APIRouter , Depends , FastAPI
98from fastapi .responses import StreamingResponse
109from codegate import __version__
1110
@@ -27,25 +26,17 @@ def get_db_reader():
2726 db_reader = DbReader ()
2827 return db_reader
2928
30- def get_http_client () -> AsyncClient :
31- return AsyncClient ()
32-
33- async def fetch_latest_version (client : AsyncClient ) -> str :
29+ def fetch_latest_version () -> str :
3430 url = "https://api.github.com/repos/stacklok/codegate/releases/latest"
3531 headers = {
3632 "Accept" : "application/vnd.github+json" ,
3733 "X-GitHub-Api-Version" : "2022-11-28"
3834 }
39- response = await client .get (url , headers = headers )
35+ response = requests .get (url , headers = headers )
4036 response .raise_for_status ()
4137 data = response .json ()
4238 return data .get ("tag_name" , "unknown" )
4339
44- def fetch_latest_version_sync (client : AsyncClient ) -> str :
45- loop = asyncio .new_event_loop ()
46- asyncio .set_event_loop (loop )
47- return loop .run_until_complete (fetch_latest_version (client ))
48-
4940@dashboard_router .get ("/dashboard/messages" )
5041def get_messages (db_reader : DbReader = Depends (get_db_reader )) -> List [Conversation ]:
5142 """
@@ -82,10 +73,9 @@ async def stream_sse():
8273 return StreamingResponse (generate_sse_events (), media_type = "text/event-stream" )
8374
8475@dashboard_router .get ("/dashboard/version" )
85- def version_check (client : AsyncClient = Depends ( get_http_client ) ):
76+ def version_check ():
8677 try :
87- with ThreadPoolExecutor () as executor :
88- latest_version = executor .submit (fetch_latest_version_sync , client ).result ()
78+ latest_version = fetch_latest_version ()
8979
9080 # normalize the versions as github will return them with a 'v' prefix
9181 current_version = __version__ .lstrip ('v' )
@@ -99,13 +89,13 @@ def version_check(client: AsyncClient = Depends(get_http_client)):
9989 "is_latest" : is_latest ,
10090 "error" : None ,
10191 }
102- except HTTPException as e :
103- logger .error (f"HTTPException : { e . detail } " )
92+ except requests . RequestException as e :
93+ logger .error (f"RequestException : { str ( e ) } " )
10494 return {
10595 "current_version" : __version__ ,
10696 "latest_version" : "unknown" ,
10797 "is_latest" : None ,
108- "error" : "Failed to fetch the latest version"
98+ "error" : "An error occurred while fetching the latest version"
10999 }
110100 except Exception as e :
111101 logger .error (f"Unexpected error: { str (e )} " )
@@ -115,8 +105,6 @@ def version_check(client: AsyncClient = Depends(get_http_client)):
115105 "is_latest" : None ,
116106 "error" : "An unexpected error occurred"
117107 }
118- finally :
119- client .aclose ()
120108
121109
122110def generate_openapi ():
0 commit comments