Refactor API error handling in Leaderboard cog to improve JSON response validation and logging. Update authorization header format, streamline error message retrieval, and enhance exception handling for various API response statuses, ensuring better reliability and debugging capabilities.
Some checks are pending
Run pre-commit / Run pre-commit (push) Waiting to run
Some checks are pending
Run pre-commit / Run pre-commit (push) Waiting to run
This commit is contained in:
parent
963d9e3e73
commit
3794068ae5
1 changed files with 37 additions and 35 deletions
|
@ -107,14 +107,8 @@ class Leaderboard(commands.Cog):
|
|||
try:
|
||||
async with self.session.get(
|
||||
f"{self.api_base_url}/leaderboard",
|
||||
headers={"Authorization": f"Token {self.admin_secret['admin_secret']}"}
|
||||
headers={"Authorization": self.admin_secret["admin_secret"]}
|
||||
) as resp:
|
||||
try:
|
||||
data = await resp.json()
|
||||
except aiohttp.ContentTypeError:
|
||||
log.error("API returned invalid JSON response during initialization")
|
||||
return
|
||||
|
||||
if resp.status == 200:
|
||||
# Start auto-sync task if API connection successful
|
||||
self.auto_sync_task = self.bot.loop.create_task(self._auto_sync_task())
|
||||
|
@ -123,8 +117,12 @@ class Leaderboard(commands.Cog):
|
|||
log.error("Failed to initialize API: Invalid admin secret")
|
||||
else:
|
||||
log.error(f"Failed to initialize API: Status {resp.status}")
|
||||
if data.get("error"):
|
||||
log.error(f"Error message: {data['error']}")
|
||||
try:
|
||||
data = await resp.json()
|
||||
if data.get("error"):
|
||||
log.error(f"Error message: {data['error']}")
|
||||
except aiohttp.ContentTypeError:
|
||||
log.error("API returned invalid JSON response during initialization")
|
||||
except aiohttp.ClientError as e:
|
||||
log.error(f"Failed to connect to API: {str(e)}")
|
||||
except Exception as e:
|
||||
|
@ -264,7 +262,7 @@ class Leaderboard(commands.Cog):
|
|||
async with self.session.post(
|
||||
f"{self.api_base_url}/leaderboard",
|
||||
headers={
|
||||
"Authorization": f"Token {self.admin_secret['admin_secret']}",
|
||||
"Authorization": self.admin_secret["admin_secret"],
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
json={
|
||||
|
@ -274,24 +272,26 @@ class Leaderboard(commands.Cog):
|
|||
"optedOut": opted_out
|
||||
}
|
||||
) as resp:
|
||||
try:
|
||||
data = await resp.json()
|
||||
except aiohttp.ContentTypeError:
|
||||
log.error(f"API returned invalid JSON response with status {resp.status}")
|
||||
return False
|
||||
|
||||
if resp.status == 200:
|
||||
if data.get("success"):
|
||||
log.info(f"Updated leaderboard for {username}: {credits} credits (opted_out: {opted_out})")
|
||||
return True
|
||||
else:
|
||||
log.error(f"API update failed: {data.get('error', 'Unknown error')}")
|
||||
try:
|
||||
data = await resp.json()
|
||||
if data.get("success"):
|
||||
log.info(f"Updated leaderboard for {username}: {credits} credits (opted_out: {opted_out})")
|
||||
return True
|
||||
else:
|
||||
log.error(f"API update failed: {data.get('error', 'Unknown error')}")
|
||||
except aiohttp.ContentTypeError:
|
||||
log.error("API returned invalid JSON response")
|
||||
elif resp.status == 401:
|
||||
log.error("Unauthorized: Invalid admin secret")
|
||||
else:
|
||||
log.error(f"API update failed: Status {resp.status}")
|
||||
if data.get("error"):
|
||||
log.error(f"Error message: {data['error']}")
|
||||
try:
|
||||
data = await resp.json()
|
||||
if data.get("error"):
|
||||
log.error(f"Error message: {data['error']}")
|
||||
except aiohttp.ContentTypeError:
|
||||
pass
|
||||
return False
|
||||
except aiohttp.ClientError as e:
|
||||
log.error(f"API request failed: {str(e)}")
|
||||
|
@ -308,24 +308,26 @@ class Leaderboard(commands.Cog):
|
|||
try:
|
||||
async with self.session.get(
|
||||
f"{self.api_base_url}/leaderboard",
|
||||
headers={"Authorization": f"Token {self.admin_secret['admin_secret']}"}
|
||||
headers={"Authorization": self.admin_secret["admin_secret"]}
|
||||
) as resp:
|
||||
try:
|
||||
data = await resp.json()
|
||||
except aiohttp.ContentTypeError:
|
||||
log.error(f"API returned invalid JSON response with status {resp.status}")
|
||||
return None
|
||||
|
||||
if resp.status == 200:
|
||||
if "leaderboard" in data:
|
||||
return data["leaderboard"]
|
||||
log.error("Invalid API response format")
|
||||
try:
|
||||
data = await resp.json()
|
||||
if "leaderboard" in data:
|
||||
return data["leaderboard"]
|
||||
log.error("Invalid API response format")
|
||||
except aiohttp.ContentTypeError:
|
||||
log.error("API returned invalid JSON response")
|
||||
elif resp.status == 401:
|
||||
log.error("Unauthorized: Invalid admin secret")
|
||||
else:
|
||||
log.error(f"Failed to fetch leaderboard: Status {resp.status}")
|
||||
if data.get("error"):
|
||||
log.error(f"Error message: {data['error']}")
|
||||
try:
|
||||
data = await resp.json()
|
||||
if data.get("error"):
|
||||
log.error(f"Error message: {data['error']}")
|
||||
except aiohttp.ContentTypeError:
|
||||
pass
|
||||
return None
|
||||
except aiohttp.ClientError as e:
|
||||
log.error(f"Error fetching leaderboard: {str(e)}")
|
||||
|
|
Loading…
Add table
Reference in a new issue