Răsfoiți Sursa

Retry on github auth failure (#4767)

Robert Brennan 1 an în urmă
părinte
comite
fa625fed70
1 a modificat fișierele cu 15 adăugiri și 7 ștergeri
  1. 15 7
      openhands/server/github.py

+ 15 - 7
openhands/server/github.py

@@ -1,6 +1,7 @@
 import os
 import os
 
 
 import httpx
 import httpx
+from tenacity import retry, stop_after_attempt, wait_exponential
 
 
 from openhands.core.logger import openhands_logger as logger
 from openhands.core.logger import openhands_logger as logger
 from openhands.server.sheets_client import GoogleSheetsClient
 from openhands.server.sheets_client import GoogleSheetsClient
@@ -101,6 +102,7 @@ async def authenticate_github_user(auth_token) -> bool:
     return True
     return True
 
 
 
 
+@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=1, max=5))
 async def get_github_user(token: str) -> str:
 async def get_github_user(token: str) -> str:
     """Get GitHub user info from token.
     """Get GitHub user info from token.
 
 
@@ -108,19 +110,25 @@ async def get_github_user(token: str) -> str:
         token: GitHub access token
         token: GitHub access token
 
 
     Returns:
     Returns:
-        Tuple of (login, error_message)
-        If successful, error_message is None
-        If failed, login is None and error_message contains the error
+        github handle of the user
     """
     """
     logger.info('Fetching GitHub user info from token')
     logger.info('Fetching GitHub user info from token')
     headers = {
     headers = {
         'Accept': 'application/vnd.github+json',
         'Accept': 'application/vnd.github+json',
         'Authorization': f'Bearer {token}',
         'Authorization': f'Bearer {token}',
-        'X-GitHub-Api-Version': '2022-11-28',
     }
     }
-    async with httpx.AsyncClient() as client:
-        logger.debug('Making request to GitHub API')
-        response = await client.get('https://api.github.com/user', headers=headers)
+    async with httpx.AsyncClient(
+        timeout=httpx.Timeout(connect=5.0, read=5.0, write=5.0, pool=5.0)
+    ) as client:
+        try:
+            response = await client.get('https://api.github.com/user', headers=headers)
+        except httpx.RequestError as e:
+            logger.error(f'Error making request to GitHub API: {str(e)}')
+            logger.error(e)
+            raise
+
+        logger.info('Received response from GitHub API')
+        logger.debug(f'Response status code: {response.status_code}')
         response.raise_for_status()
         response.raise_for_status()
         user_data = response.json()
         user_data = response.json()
         login = user_data.get('login')
         login = user_data.get('login')