From 78e21c4702c99bd047d8dc4c8f30e359c0db954d Mon Sep 17 00:00:00 2001 From: thec0sm0s Date: Sun, 10 May 2020 17:47:31 +0530 Subject: [PATCH] Internally handle JSONDecodeError --- flask_discord/_http.py | 14 ++++++++++---- flask_discord/models/user.py | 9 +++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/flask_discord/_http.py b/flask_discord/_http.py index 6385d4f..29ed6de 100644 --- a/flask_discord/_http.py +++ b/flask_discord/_http.py @@ -1,4 +1,6 @@ import requests +import typing +import json import os import abc @@ -74,7 +76,7 @@ class DiscordOAuth2HttpClient(abc.ABC): auto_refresh_url=configs.DISCORD_TOKEN_URL, token_updater=self._token_updater) - def request(self, route: str, method="GET", data=None, oauth=True, **kwargs) -> dict: + def request(self, route: str, method="GET", data=None, oauth=True, **kwargs) -> typing.Union[dict, str]: """Sends HTTP request to provided route or discord endpoint. Note @@ -94,8 +96,9 @@ class DiscordOAuth2HttpClient(abc.ABC): Returns ------- - dict - Dictionary containing received from sent HTTP GET request. + dict, str + Dictionary containing received from sent HTTP GET request if content-type is ``application/json`` + otherwise returns raw text content of the response. Raises ------ @@ -112,4 +115,7 @@ class DiscordOAuth2HttpClient(abc.ABC): if response.status_code == 401: raise exceptions.Unauthorized - return response.json() + try: + return response.json() + except json.JSONDecodeError: + return response.text diff --git a/flask_discord/models/user.py b/flask_discord/models/user.py index ee5c69c..a35a87c 100644 --- a/flask_discord/models/user.py +++ b/flask_discord/models/user.py @@ -1,6 +1,5 @@ from .. import configs -from json import JSONDecodeError from .base import DiscordModelsBase from flask import current_app, session @@ -93,11 +92,9 @@ class User(DiscordModelsBase): """ data = {"access_token": session["DISCORD_OAUTH2_TOKEN"]["access_token"]} headers = {"Authorization": f"Bot {current_app.config['DISCORD_BOT_TOKEN']}"} - try: - return current_app.discord.request( - f"/guilds/{guild_id}/members/{self.id}", method="PUT", oauth=False, json=data, headers=headers) - except JSONDecodeError: - return dict() + return current_app.discord.request( + f"/guilds/{guild_id}/members/{self.id}", method="PUT", oauth=False, json=data, headers=headers + ) or dict() class Bot(User):