Message parsing fixes
This commit is contained in:
@@ -43,8 +43,10 @@ class Mention:
|
||||
|
||||
@classmethod
|
||||
def _from_range(cls, data):
|
||||
# TODO: Parse data["entity"]["__typename"]
|
||||
return cls(
|
||||
thread_id=data["entity"]["id"],
|
||||
# Can be missing
|
||||
thread_id=data["entity"].get("id"),
|
||||
offset=data["offset"],
|
||||
length=data["length"],
|
||||
)
|
||||
@@ -234,7 +236,7 @@ class MessageData(Message):
|
||||
|
||||
attachments = [
|
||||
_file.graphql_to_attachment(attachment)
|
||||
for attachment in data["blob_attachments"] or ()
|
||||
for attachment in data.get("blob_attachments") or ()
|
||||
]
|
||||
unsent = False
|
||||
if data.get("extensible_attachment") is not None:
|
||||
@@ -245,8 +247,11 @@ class MessageData(Message):
|
||||
attachments.append(attachment)
|
||||
|
||||
replied_to = None
|
||||
if data.get("replied_to_message"):
|
||||
replied_to = cls._from_graphql(data["replied_to_message"]["message"])
|
||||
if data.get("replied_to_message") and data["replied_to_message"]["message"]:
|
||||
# data["replied_to_message"]["message"] is None if the message is deleted
|
||||
replied_to = cls._from_graphql(
|
||||
thread, data["replied_to_message"]["message"]
|
||||
)
|
||||
|
||||
return cls(
|
||||
thread=thread,
|
||||
|
@@ -47,6 +47,23 @@ def test_graphql_to_extensible_attachment_dispatch(monkeypatch, obj, type_):
|
||||
assert graphql_to_extensible_attachment(data)
|
||||
|
||||
|
||||
def test_mention_from_range():
|
||||
data = {"length": 17, "offset": 0, "entity": {"__typename": "User", "id": "1234"}}
|
||||
assert Mention(thread_id="1234", offset=0, length=17) == Mention._from_range(data)
|
||||
data = {
|
||||
"length": 2,
|
||||
"offset": 10,
|
||||
"entity": {"__typename": "MessengerViewer1To1Thread"},
|
||||
}
|
||||
assert Mention(thread_id=None, offset=10, length=2) == Mention._from_range(data)
|
||||
data = {
|
||||
"length": 5,
|
||||
"offset": 21,
|
||||
"entity": {"__typename": "MessengerViewerGroupThread"},
|
||||
}
|
||||
assert Mention(thread_id=None, offset=21, length=5) == Mention._from_range(data)
|
||||
|
||||
|
||||
def test_mention_to_send_data():
|
||||
assert {
|
||||
"profile_xmd[0][id]": "1234",
|
||||
|
Reference in New Issue
Block a user