Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 941ebe4

Browse files
authored
Use HTTPStatus constants in place of literals in synapse.http (#11543)
1 parent b47d10d commit 941ebe4

File tree

4 files changed

+47
-19
lines changed

4 files changed

+47
-19
lines changed

changelog.d/11543.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Use HTTPStatus constants in place of literals in `synapse.http`.

synapse/http/client.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# limitations under the License.
1515
import logging
1616
import urllib.parse
17+
from http import HTTPStatus
1718
from io import BytesIO
1819
from typing import (
1920
TYPE_CHECKING,
@@ -280,7 +281,9 @@ def request(
280281
ip_address, self._ip_whitelist, self._ip_blacklist
281282
):
282283
logger.info("Blocking access to %s due to blacklist" % (ip_address,))
283-
e = SynapseError(403, "IP address blocked by IP blacklist entry")
284+
e = SynapseError(
285+
HTTPStatus.FORBIDDEN, "IP address blocked by IP blacklist entry"
286+
)
284287
return defer.fail(Failure(e))
285288

286289
return self._agent.request(
@@ -719,7 +722,9 @@ async def get_file(
719722

720723
if response.code > 299:
721724
logger.warning("Got %d when downloading %s" % (response.code, url))
722-
raise SynapseError(502, "Got error %d" % (response.code,), Codes.UNKNOWN)
725+
raise SynapseError(
726+
HTTPStatus.BAD_GATEWAY, "Got error %d" % (response.code,), Codes.UNKNOWN
727+
)
723728

724729
# TODO: if our Content-Type is HTML or something, just read the first
725730
# N bytes into RAM rather than saving it all to disk only to read it
@@ -731,12 +736,14 @@ async def get_file(
731736
)
732737
except BodyExceededMaxSize:
733738
raise SynapseError(
734-
502,
739+
HTTPStatus.BAD_GATEWAY,
735740
"Requested file is too large > %r bytes" % (max_size,),
736741
Codes.TOO_LARGE,
737742
)
738743
except Exception as e:
739-
raise SynapseError(502, ("Failed to download remote body: %s" % e)) from e
744+
raise SynapseError(
745+
HTTPStatus.BAD_GATEWAY, ("Failed to download remote body: %s" % e)
746+
) from e
740747

741748
return (
742749
length,

synapse/http/matrixfederationclient.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import sys
2020
import typing
2121
import urllib.parse
22+
from http import HTTPStatus
2223
from io import BytesIO, StringIO
2324
from typing import (
2425
TYPE_CHECKING,
@@ -1154,7 +1155,7 @@ async def get_file(
11541155
request.destination,
11551156
msg,
11561157
)
1157-
raise SynapseError(502, msg, Codes.TOO_LARGE)
1158+
raise SynapseError(HTTPStatus.BAD_GATEWAY, msg, Codes.TOO_LARGE)
11581159
except defer.TimeoutError as e:
11591160
logger.warning(
11601161
"{%s} [%s] Timed out reading response - %s %s",

synapse/http/servlet.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
""" This module contains base REST classes for constructing REST servlets. """
1616
import logging
17+
from http import HTTPStatus
1718
from typing import (
1819
TYPE_CHECKING,
1920
Iterable,
@@ -137,11 +138,15 @@ def parse_integer_from_args(
137138
return int(args[name_bytes][0])
138139
except Exception:
139140
message = "Query parameter %r must be an integer" % (name,)
140-
raise SynapseError(400, message, errcode=Codes.INVALID_PARAM)
141+
raise SynapseError(
142+
HTTPStatus.BAD_REQUEST, message, errcode=Codes.INVALID_PARAM
143+
)
141144
else:
142145
if required:
143146
message = "Missing integer query parameter %r" % (name,)
144-
raise SynapseError(400, message, errcode=Codes.MISSING_PARAM)
147+
raise SynapseError(
148+
HTTPStatus.BAD_REQUEST, message, errcode=Codes.MISSING_PARAM
149+
)
145150
else:
146151
return default
147152

@@ -246,11 +251,15 @@ def parse_boolean_from_args(
246251
message = (
247252
"Boolean query parameter %r must be one of ['true', 'false']"
248253
) % (name,)
249-
raise SynapseError(400, message, errcode=Codes.INVALID_PARAM)
254+
raise SynapseError(
255+
HTTPStatus.BAD_REQUEST, message, errcode=Codes.INVALID_PARAM
256+
)
250257
else:
251258
if required:
252259
message = "Missing boolean query parameter %r" % (name,)
253-
raise SynapseError(400, message, errcode=Codes.MISSING_PARAM)
260+
raise SynapseError(
261+
HTTPStatus.BAD_REQUEST, message, errcode=Codes.MISSING_PARAM
262+
)
254263
else:
255264
return default
256265

@@ -313,7 +322,7 @@ def parse_bytes_from_args(
313322
return args[name_bytes][0]
314323
elif required:
315324
message = "Missing string query parameter %s" % (name,)
316-
raise SynapseError(400, message, errcode=Codes.MISSING_PARAM)
325+
raise SynapseError(HTTPStatus.BAD_REQUEST, message, errcode=Codes.MISSING_PARAM)
317326

318327
return default
319328

@@ -407,14 +416,16 @@ def _parse_string_value(
407416
try:
408417
value_str = value.decode(encoding)
409418
except ValueError:
410-
raise SynapseError(400, "Query parameter %r must be %s" % (name, encoding))
419+
raise SynapseError(
420+
HTTPStatus.BAD_REQUEST, "Query parameter %r must be %s" % (name, encoding)
421+
)
411422

412423
if allowed_values is not None and value_str not in allowed_values:
413424
message = "Query parameter %r must be one of [%s]" % (
414425
name,
415426
", ".join(repr(v) for v in allowed_values),
416427
)
417-
raise SynapseError(400, message, errcode=Codes.INVALID_PARAM)
428+
raise SynapseError(HTTPStatus.BAD_REQUEST, message, errcode=Codes.INVALID_PARAM)
418429
else:
419430
return value_str
420431

@@ -510,7 +521,9 @@ def parse_strings_from_args(
510521
else:
511522
if required:
512523
message = "Missing string query parameter %r" % (name,)
513-
raise SynapseError(400, message, errcode=Codes.MISSING_PARAM)
524+
raise SynapseError(
525+
HTTPStatus.BAD_REQUEST, message, errcode=Codes.MISSING_PARAM
526+
)
514527

515528
return default
516529

@@ -638,7 +651,7 @@ def parse_json_value_from_request(
638651
try:
639652
content_bytes = request.content.read() # type: ignore
640653
except Exception:
641-
raise SynapseError(400, "Error reading JSON content.")
654+
raise SynapseError(HTTPStatus.BAD_REQUEST, "Error reading JSON content.")
642655

643656
if not content_bytes and allow_empty_body:
644657
return None
@@ -647,7 +660,9 @@ def parse_json_value_from_request(
647660
content = json_decoder.decode(content_bytes.decode("utf-8"))
648661
except Exception as e:
649662
logger.warning("Unable to parse JSON: %s (%s)", e, content_bytes)
650-
raise SynapseError(400, "Content not JSON.", errcode=Codes.NOT_JSON)
663+
raise SynapseError(
664+
HTTPStatus.BAD_REQUEST, "Content not JSON.", errcode=Codes.NOT_JSON
665+
)
651666

652667
return content
653668

@@ -673,7 +688,7 @@ def parse_json_object_from_request(
673688

674689
if not isinstance(content, dict):
675690
message = "Content must be a JSON object."
676-
raise SynapseError(400, message, errcode=Codes.BAD_JSON)
691+
raise SynapseError(HTTPStatus.BAD_REQUEST, message, errcode=Codes.BAD_JSON)
677692

678693
return content
679694

@@ -685,7 +700,9 @@ def assert_params_in_dict(body: JsonDict, required: Iterable[str]) -> None:
685700
absent.append(k)
686701

687702
if len(absent) > 0:
688-
raise SynapseError(400, "Missing params: %r" % absent, Codes.MISSING_PARAM)
703+
raise SynapseError(
704+
HTTPStatus.BAD_REQUEST, "Missing params: %r" % absent, Codes.MISSING_PARAM
705+
)
689706

690707

691708
class RestServlet:
@@ -758,10 +775,12 @@ async def resolve_room_id(
758775
resolved_room_id = room_id.to_string()
759776
else:
760777
raise SynapseError(
761-
400, "%s was not legal room ID or room alias" % (room_identifier,)
778+
HTTPStatus.BAD_REQUEST,
779+
"%s was not legal room ID or room alias" % (room_identifier,),
762780
)
763781
if not resolved_room_id:
764782
raise SynapseError(
765-
400, "Unknown room ID or room alias %s" % room_identifier
783+
HTTPStatus.BAD_REQUEST,
784+
"Unknown room ID or room alias %s" % room_identifier,
766785
)
767786
return resolved_room_id, remote_room_hosts

0 commit comments

Comments
 (0)