Skip to content
Snippets Groups Projects

Fix API.request_url() with Py3.13 (#208)

Merged Moul requested to merge 208_fix_request_url into main
+ 21
30
@@ -13,10 +13,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import copy
import json
import logging
from http.client import HTTPResponse
from typing import Any, Callable, Dict, Optional, Union
from urllib import parse, request
@@ -252,39 +250,32 @@ class API:
self.connection_handler.proxy, self.connection_handler.http_scheme
)
with request.urlopen(
response = request.urlopen( # pylint: disable=consider-using-with
duniter_request, timeout=15
) as response: # type: HTTPResponse
if response.status != 200:
content = response.read().decode("utf-8")
if bma_errors:
try:
error_data = parse_error(content)
raise DuniterError(error_data)
except (TypeError, jsonschema.ValidationError) as exception:
raise ValueError(
f"status code != 200 => {response.status} ({content})"
) from exception
raise ValueError(f"status code != 200 => {response.status} ({content})")
# get response content
return_response = copy.copy(response)
)
if response.status != 200:
content = response.read().decode("utf-8")
# if schema supplied...
if schema is not None:
if bma_errors:
try:
error_data = parse_error(content)
raise DuniterError(error_data)
except (TypeError, jsonschema.ValidationError) as exception:
raise ValueError(
f"status code != 200 => {response.status} ({content})"
) from exception
raise ValueError(f"status code != 200 => {response.status} ({content})")
if rtype == RESPONSE_HTTP:
return response
# if schema supplied…
content = response.read().decode("utf-8")
if schema:
# validate response
parse_response(content, schema)
# return the chosen type
result = return_response # type: Any
if rtype == RESPONSE_TEXT:
result = content
elif rtype == RESPONSE_JSON:
result = json.loads(content)
return result
return content
return json.loads(content)
def connect_ws(self, path: str) -> WSConnection:
"""
Loading