Explorar el Código

Use the proper Request in type hints. (#9515)

This also pins the Twisted version in the mypy job for CI until
proper type hints are fixed throughout Synapse.
tags/v1.29.0rc1
Patrick Cloke hace 3 años
committed by GitHub
padre
commit
a0bc9d387e
No se encontró ninguna clave conocida en la base de datos para esta firma ID de clave GPG: 4AEE18F83AFDEB23
Se han modificado 18 ficheros con 38 adiciones y 31 borrados
  1. +1
    -0
      changelog.d/9515.misc
  2. +2
    -2
      synapse/handlers/auth.py
  3. +1
    -1
      synapse/handlers/sso.py
  4. +4
    -5
      synapse/replication/http/membership.py
  5. +1
    -1
      synapse/rest/admin/media.py
  6. +1
    -1
      synapse/rest/client/v2_alpha/groups.py
  7. +10
    -8
      synapse/rest/media/v1/_base.py
  8. +1
    -1
      synapse/rest/media/v1/config_resource.py
  9. +1
    -1
      synapse/rest/media/v1/download_resource.py
  10. +1
    -1
      synapse/rest/media/v1/media_repository.py
  11. +1
    -1
      synapse/rest/media/v1/preview_url_resource.py
  12. +1
    -1
      synapse/rest/media/v1/thumbnail_resource.py
  13. +7
    -4
      synapse/rest/media/v1/upload_resource.py
  14. +1
    -1
      synapse/rest/synapse/client/new_user_consent.py
  15. +1
    -1
      synapse/rest/synapse/client/password_reset.py
  16. +1
    -1
      synapse/rest/synapse/client/pick_username.py
  17. +1
    -1
      synapse/rest/synapse/client/sso_register.py
  18. +2
    -0
      tox.ini

+ 1
- 0
changelog.d/9515.misc Ver fichero

@@ -0,0 +1 @@
Fix incorrect type hints.

+ 2
- 2
synapse/handlers/auth.py Ver fichero

@@ -36,7 +36,7 @@ import attr
import bcrypt
import pymacaroons

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.constants import LoginType
from synapse.api.errors import (
@@ -481,7 +481,7 @@ class AuthHandler(BaseHandler):
sid = authdict["session"]

# Convert the URI and method to strings.
uri = request.uri.decode("utf-8")
uri = request.uri.decode("utf-8") # type: ignore
method = request.method.decode("utf-8")

# If there's no session ID, create a new session.


+ 1
- 1
synapse/handlers/sso.py Ver fichero

@@ -31,8 +31,8 @@ from urllib.parse import urlencode
import attr
from typing_extensions import NoReturn, Protocol

from twisted.web.http import Request
from twisted.web.iweb import IRequest
from twisted.web.server import Request

from synapse.api.constants import LoginType
from synapse.api.errors import Codes, NotFoundError, RedirectException, SynapseError


+ 4
- 5
synapse/replication/http/membership.py Ver fichero

@@ -15,9 +15,10 @@
import logging
from typing import TYPE_CHECKING, List, Optional, Tuple

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.http.servlet import parse_json_object_from_request
from synapse.http.site import SynapseRequest
from synapse.replication.http._base import ReplicationEndpoint
from synapse.types import JsonDict, Requester, UserID
from synapse.util.distributor import user_left_room
@@ -78,7 +79,7 @@ class ReplicationRemoteJoinRestServlet(ReplicationEndpoint):
}

async def _handle_request( # type: ignore
self, request: Request, room_id: str, user_id: str
self, request: SynapseRequest, room_id: str, user_id: str
) -> Tuple[int, JsonDict]:
content = parse_json_object_from_request(request)

@@ -86,7 +87,6 @@ class ReplicationRemoteJoinRestServlet(ReplicationEndpoint):
event_content = content["content"]

requester = Requester.deserialize(self.store, content["requester"])

request.requester = requester

logger.info("remote_join: %s into room: %s", user_id, room_id)
@@ -147,7 +147,7 @@ class ReplicationRemoteRejectInviteRestServlet(ReplicationEndpoint):
}

async def _handle_request( # type: ignore
self, request: Request, invite_event_id: str
self, request: SynapseRequest, invite_event_id: str
) -> Tuple[int, JsonDict]:
content = parse_json_object_from_request(request)

@@ -155,7 +155,6 @@ class ReplicationRemoteRejectInviteRestServlet(ReplicationEndpoint):
event_content = content["content"]

requester = Requester.deserialize(self.store, content["requester"])

request.requester = requester

# hopefully we're now on the master, so this won't recurse!


+ 1
- 1
synapse/rest/admin/media.py Ver fichero

@@ -17,7 +17,7 @@
import logging
from typing import TYPE_CHECKING, Tuple

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
from synapse.http.servlet import RestServlet, parse_boolean, parse_integer


+ 1
- 1
synapse/rest/client/v2_alpha/groups.py Ver fichero

@@ -18,7 +18,7 @@ import logging
from functools import wraps
from typing import TYPE_CHECKING, Optional, Tuple

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.constants import (
MAX_GROUP_CATEGORYID_LENGTH,


+ 10
- 8
synapse/rest/media/v1/_base.py Ver fichero

@@ -21,7 +21,7 @@ from typing import Awaitable, Dict, Generator, List, Optional, Tuple

from twisted.internet.interfaces import IConsumer
from twisted.protocols.basic import FileSender
from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import Codes, SynapseError, cs_error
from synapse.http.server import finish_request, respond_with_json
@@ -49,18 +49,20 @@ TEXT_CONTENT_TYPES = [

def parse_media_id(request: Request) -> Tuple[str, str, Optional[str]]:
try:
# The type on postpath seems incorrect in Twisted 21.2.0.
postpath = request.postpath # type: List[bytes] # type: ignore
assert postpath

# This allows users to append e.g. /test.png to the URL. Useful for
# clients that parse the URL to see content type.
server_name, media_id = request.postpath[:2]

if isinstance(server_name, bytes):
server_name = server_name.decode("utf-8")
media_id = media_id.decode("utf8")
server_name_bytes, media_id_bytes = postpath[:2]
server_name = server_name_bytes.decode("utf-8")
media_id = media_id_bytes.decode("utf8")

file_name = None
if len(request.postpath) > 2:
if len(postpath) > 2:
try:
file_name = urllib.parse.unquote(request.postpath[-1].decode("utf-8"))
file_name = urllib.parse.unquote(postpath[-1].decode("utf-8"))
except UnicodeDecodeError:
pass
return server_name, media_id, file_name


+ 1
- 1
synapse/rest/media/v1/config_resource.py Ver fichero

@@ -17,7 +17,7 @@

from typing import TYPE_CHECKING

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.http.server import DirectServeJsonResource, respond_with_json



+ 1
- 1
synapse/rest/media/v1/download_resource.py Ver fichero

@@ -16,7 +16,7 @@
import logging
from typing import TYPE_CHECKING

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.http.server import DirectServeJsonResource, set_cors_headers
from synapse.http.servlet import parse_boolean


+ 1
- 1
synapse/rest/media/v1/media_repository.py Ver fichero

@@ -22,8 +22,8 @@ from typing import IO, TYPE_CHECKING, Dict, List, Optional, Set, Tuple

import twisted.internet.error
import twisted.web.http
from twisted.web.http import Request
from twisted.web.resource import Resource
from twisted.web.server import Request

from synapse.api.errors import (
FederationDeniedError,


+ 1
- 1
synapse/rest/media/v1/preview_url_resource.py Ver fichero

@@ -29,7 +29,7 @@ from urllib import parse as urlparse
import attr

from twisted.internet.error import DNSLookupError
from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import Codes, SynapseError
from synapse.http.client import SimpleHttpClient


+ 1
- 1
synapse/rest/media/v1/thumbnail_resource.py Ver fichero

@@ -18,7 +18,7 @@
import logging
from typing import TYPE_CHECKING, Any, Dict, List, Optional

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import SynapseError
from synapse.http.server import DirectServeJsonResource, set_cors_headers


+ 7
- 4
synapse/rest/media/v1/upload_resource.py Ver fichero

@@ -15,9 +15,9 @@
# limitations under the License.

import logging
from typing import TYPE_CHECKING
from typing import IO, TYPE_CHECKING

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import Codes, SynapseError
from synapse.http.server import DirectServeJsonResource, respond_with_json
@@ -79,7 +79,9 @@ class UploadResource(DirectServeJsonResource):
headers = request.requestHeaders

if headers.hasHeader(b"Content-Type"):
media_type = headers.getRawHeaders(b"Content-Type")[0].decode("ascii")
content_type_headers = headers.getRawHeaders(b"Content-Type")
assert content_type_headers # for mypy
media_type = content_type_headers[0].decode("ascii")
else:
raise SynapseError(msg="Upload request missing 'Content-Type'", code=400)

@@ -88,8 +90,9 @@ class UploadResource(DirectServeJsonResource):
# TODO(markjh): parse content-dispostion

try:
content = request.content # type: IO # type: ignore
content_uri = await self.media_repo.create_content(
media_type, upload_name, request.content, content_length, requester.user
media_type, upload_name, content, content_length, requester.user
)
except SpamMediaException:
# For uploading of media we want to respond with a 400, instead of


+ 1
- 1
synapse/rest/synapse/client/new_user_consent.py Ver fichero

@@ -15,7 +15,7 @@
import logging
from typing import TYPE_CHECKING

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import SynapseError
from synapse.handlers.sso import get_username_mapping_session_cookie_from_request


+ 1
- 1
synapse/rest/synapse/client/password_reset.py Ver fichero

@@ -15,7 +15,7 @@
import logging
from typing import TYPE_CHECKING, Tuple

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import ThreepidValidationError
from synapse.config.emailconfig import ThreepidBehaviour


+ 1
- 1
synapse/rest/synapse/client/pick_username.py Ver fichero

@@ -16,8 +16,8 @@
import logging
from typing import TYPE_CHECKING, List

from twisted.web.http import Request
from twisted.web.resource import Resource
from twisted.web.server import Request

from synapse.api.errors import SynapseError
from synapse.handlers.sso import get_username_mapping_session_cookie_from_request


+ 1
- 1
synapse/rest/synapse/client/sso_register.py Ver fichero

@@ -16,7 +16,7 @@
import logging
from typing import TYPE_CHECKING

from twisted.web.http import Request
from twisted.web.server import Request

from synapse.api.errors import SynapseError
from synapse.handlers.sso import get_username_mapping_session_cookie_from_request


+ 2
- 0
tox.ini Ver fichero

@@ -189,5 +189,7 @@ commands=
[testenv:mypy]
deps =
{[base]deps}
# Type hints are broken with Twisted > 20.3.0, see https://github.com/matrix-org/synapse/issues/9513
twisted==20.3.0
extras = all,mypy
commands = mypy

Cargando…
Cancelar
Guardar