1
1
import asyncio
2
- from concurrent .futures import ThreadPoolExecutor
3
2
import json
4
3
from typing import AsyncGenerator , List , Optional
5
4
6
- from httpx import AsyncClient , HTTPStatusError
5
+ import requests
7
6
import structlog
8
- from fastapi import APIRouter , Depends , FastAPI , HTTPException
7
+ from fastapi import APIRouter , Depends , FastAPI
9
8
from fastapi .responses import StreamingResponse
10
9
from codegate import __version__
11
10
@@ -27,25 +26,17 @@ def get_db_reader():
27
26
db_reader = DbReader ()
28
27
return db_reader
29
28
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 :
34
30
url = "https://api.github.com/repos/stacklok/codegate/releases/latest"
35
31
headers = {
36
32
"Accept" : "application/vnd.github+json" ,
37
33
"X-GitHub-Api-Version" : "2022-11-28"
38
34
}
39
- response = await client .get (url , headers = headers )
35
+ response = requests .get (url , headers = headers )
40
36
response .raise_for_status ()
41
37
data = response .json ()
42
38
return data .get ("tag_name" , "unknown" )
43
39
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
-
49
40
@dashboard_router .get ("/dashboard/messages" )
50
41
def get_messages (db_reader : DbReader = Depends (get_db_reader )) -> List [Conversation ]:
51
42
"""
@@ -82,10 +73,9 @@ async def stream_sse():
82
73
return StreamingResponse (generate_sse_events (), media_type = "text/event-stream" )
83
74
84
75
@dashboard_router .get ("/dashboard/version" )
85
- def version_check (client : AsyncClient = Depends ( get_http_client ) ):
76
+ def version_check ():
86
77
try :
87
- with ThreadPoolExecutor () as executor :
88
- latest_version = executor .submit (fetch_latest_version_sync , client ).result ()
78
+ latest_version = fetch_latest_version ()
89
79
90
80
# normalize the versions as github will return them with a 'v' prefix
91
81
current_version = __version__ .lstrip ('v' )
@@ -99,13 +89,13 @@ def version_check(client: AsyncClient = Depends(get_http_client)):
99
89
"is_latest" : is_latest ,
100
90
"error" : None ,
101
91
}
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 ) } " )
104
94
return {
105
95
"current_version" : __version__ ,
106
96
"latest_version" : "unknown" ,
107
97
"is_latest" : None ,
108
- "error" : "Failed to fetch the latest version"
98
+ "error" : "An error occurred while fetching the latest version"
109
99
}
110
100
except Exception as e :
111
101
logger .error (f"Unexpected error: { str (e )} " )
@@ -115,8 +105,6 @@ def version_check(client: AsyncClient = Depends(get_http_client)):
115
105
"is_latest" : None ,
116
106
"error" : "An unexpected error occurred"
117
107
}
118
- finally :
119
- client .aclose ()
120
108
121
109
122
110
def generate_openapi ():
0 commit comments