Skip to content

Commit

Permalink
Bump mypy from 1.8.0 to 1.9.0 (#17297)
Browse files Browse the repository at this point in the history
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
  • Loading branch information
anoadragon453 and dependabot[bot] authored Jun 13, 2024
1 parent 5db3eec commit c6eb99c
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 40 deletions.
1 change: 1 addition & 0 deletions changelog.d/17297.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Bump `mypy` from 1.8.0 to 1.9.0.
56 changes: 28 additions & 28 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 29 additions & 8 deletions tests/push/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,24 @@ def test_unsubscribe(self, use_post: bool) -> None:

# Multipart: plain text, base 64 encoded; html, base 64 encoded
multipart_msg = email.message_from_bytes(msg)
txt = multipart_msg.get_payload()[0].get_payload(decode=True).decode()
html = multipart_msg.get_payload()[1].get_payload(decode=True).decode()

# Extract the text (non-HTML) portion of the multipart Message,
# as a Message.
txt_message = multipart_msg.get_payload(i=0)
assert isinstance(txt_message, email.message.Message)

# Extract the actual bytes from the Message object, and decode them to a `str`.
txt_bytes = txt_message.get_payload(decode=True)
assert isinstance(txt_bytes, bytes)
txt = txt_bytes.decode()

# Do the same for the HTML portion of the multipart Message.
html_message = multipart_msg.get_payload(i=1)
assert isinstance(html_message, email.message.Message)
html_bytes = html_message.get_payload(decode=True)
assert isinstance(html_bytes, bytes)
html = html_bytes.decode()

self.assertIn("/_synapse/client/unsubscribe", txt)
self.assertIn("/_synapse/client/unsubscribe", html)

Expand Down Expand Up @@ -347,12 +363,17 @@ def test_room_notifications_include_avatar(self) -> None:
# That email should contain the room's avatar
msg: bytes = args[5]
# Multipart: plain text, base 64 encoded; html, base 64 encoded
html = (
email.message_from_bytes(msg)
.get_payload()[1]
.get_payload(decode=True)
.decode()
)

# Extract the html Message object from the Multipart Message.
# We need the asserts to convince mypy that this is OK.
html_message = email.message_from_bytes(msg).get_payload(i=1)
assert isinstance(html_message, email.message.Message)

# Extract the `bytes` from the html Message object, and decode to a `str`.
html = html_message.get_payload(decode=True)
assert isinstance(html, bytes)
html = html.decode()

self.assertIn("_matrix/media/v1/thumbnail/DUMMY_MEDIA_ID", html)

def test_empty_room(self) -> None:
Expand Down
28 changes: 24 additions & 4 deletions tests/rest/client/test_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -427,13 +427,23 @@ def _get_link_from_email(self) -> str:
text = None
for part in mail.walk():
if part.get_content_type() == "text/plain":
text = part.get_payload(decode=True).decode("UTF-8")
text = part.get_payload(decode=True)
if text is not None:
# According to the logic table in `get_payload`, we know that
# the result of `get_payload` will be `bytes`, but mypy doesn't
# know this and complains. Thus, we assert the type.
assert isinstance(text, bytes)
text = text.decode("UTF-8")

break

if not text:
self.fail("Could not find text portion of email to parse")

assert text is not None
# `text` must be a `str`, after being decoded and determined just above
# to not be `None` or an empty `str`.
assert isinstance(text, str)

match = re.search(r"https://example.com\S+", text)
assert match, "Could not find link in email"

Expand Down Expand Up @@ -1209,13 +1219,23 @@ def _get_link_from_email(self) -> str:
text = None
for part in mail.walk():
if part.get_content_type() == "text/plain":
text = part.get_payload(decode=True).decode("UTF-8")
text = part.get_payload(decode=True)
if text is not None:
# According to the logic table in `get_payload`, we know that
# the result of `get_payload` will be `bytes`, but mypy doesn't
# know this and complains. Thus, we assert the type.
assert isinstance(text, bytes)
text = text.decode("UTF-8")

break

if not text:
self.fail("Could not find text portion of email to parse")

assert text is not None
# `text` must be a `str`, after being decoded and determined just above
# to not be `None` or an empty `str`.
assert isinstance(text, str)

match = re.search(r"https://example.com\S+", text)
assert match, "Could not find link in email"

Expand Down

0 comments on commit c6eb99c

Please sign in to comment.