From 93d79ede84d4eb3583bb3cc4ed0cc3837973db4f Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Wed, 3 Jul 2019 16:41:11 +0100 Subject: [PATCH 01/10] Add origin_server_ts and sender fields to m.replace --- synapse/events/utils.py | 6 +++++- synapse/storage/relations.py | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/synapse/events/utils.py b/synapse/events/utils.py index f24f0c16f001..987de5cab7a3 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -392,7 +392,11 @@ def serialize_event(self, event, time_now, bundle_aggregations=True, **kwargs): serialized_event["content"].pop("m.relates_to", None) r = serialized_event["unsigned"].setdefault("m.relations", {}) - r[RelationTypes.REPLACE] = {"event_id": edit.event_id} + r[RelationTypes.REPLACE] = { + "event_id": edit.event_id, + "origin_server_ts": edit.origin_server_ts, + "sender": edit.sender, + } defer.returnValue(serialized_event) diff --git a/synapse/storage/relations.py b/synapse/storage/relations.py index 1b01934c19e8..f1048507e487 100644 --- a/synapse/storage/relations.py +++ b/synapse/storage/relations.py @@ -335,7 +335,8 @@ def get_applicable_edit(self, event_id): # Fetches latest edit that has the same type and sender as the # original, and is an `m.room.message`. sql = """ - SELECT edit.event_id FROM events AS edit + SELECT edit.event_id, edit.origin_server_ts, edit.sender + FROM events AS edit INNER JOIN event_relations USING (event_id) INNER JOIN events AS original ON original.event_id = relates_to_id From 4f329ee895bf43058c455be749586068dc0b135c Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Wed, 3 Jul 2019 16:53:31 +0100 Subject: [PATCH 02/10] Fix tests --- tests/rest/client/v2_alpha/test_relations.py | 26 +++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index 3deeed3a70f6..c5394536ea78 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -466,9 +466,16 @@ def test_edit(self): self.assertEquals(channel.json_body["content"], new_body) - self.assertEquals( - channel.json_body["unsigned"].get("m.relations"), - {RelationTypes.REPLACE: {"event_id": edit_event_id}}, + relations_dict = channel.json_body["unsigned"].get("m.relations") + + self.assertEquals(RelationTypes.REPLACE in relations_dict) + + for key in ["event_id", "sender", "origin_server_ts"]: + self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) + + self.assert_dict( + {"event_id": relations_dict["event_id"], "sender": relations_dict["sender"]}, + {RelationTypes.REPLACE: {"event_id": edit_event_id, "sender": self.user_id}}, ) def test_multi_edit(self): @@ -518,9 +525,16 @@ def test_multi_edit(self): self.assertEquals(channel.json_body["content"], new_body) - self.assertEquals( - channel.json_body["unsigned"].get("m.relations"), - {RelationTypes.REPLACE: {"event_id": edit_event_id}}, + relations_dict = channel.json_body["unsigned"].get("m.relations") + + self.assertEquals(RelationTypes.REPLACE in relations_dict) + + for key in ["event_id", "sender", "origin_server_ts"]: + self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) + + self.assert_dict( + {"event_id": relations_dict["event_id"], "sender": relations_dict["sender"]}, + {RelationTypes.REPLACE: {"event_id": edit_event_id, "sender": self.user_id}}, ) def _send_relation( From 3f8178b1845a8adcaaf99c0d4e10ffc737c3e9b9 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Wed, 3 Jul 2019 16:55:22 +0100 Subject: [PATCH 03/10] changelog --- changelog.d/5613.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/5613.feature diff --git a/changelog.d/5613.feature b/changelog.d/5613.feature new file mode 100644 index 000000000000..4b7bb2745c19 --- /dev/null +++ b/changelog.d/5613.feature @@ -0,0 +1 @@ +Add `sender` and `origin_server_ts` fields to `m.replace`. From e438a43927612f59a0722b469708b5f55a05f27c Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 4 Jul 2019 10:18:25 +0100 Subject: [PATCH 04/10] lint --- tests/rest/client/v2_alpha/test_relations.py | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index c5394536ea78..62bf35ff6926 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -474,8 +474,16 @@ def test_edit(self): self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) self.assert_dict( - {"event_id": relations_dict["event_id"], "sender": relations_dict["sender"]}, - {RelationTypes.REPLACE: {"event_id": edit_event_id, "sender": self.user_id}}, + { + "event_id": relations_dict["event_id"], + "sender": relations_dict["sender"], + }, + { + RelationTypes.REPLACE: { + "event_id": edit_event_id, + "sender": self.user_id, + } + }, ) def test_multi_edit(self): @@ -533,8 +541,16 @@ def test_multi_edit(self): self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) self.assert_dict( - {"event_id": relations_dict["event_id"], "sender": relations_dict["sender"]}, - {RelationTypes.REPLACE: {"event_id": edit_event_id, "sender": self.user_id}}, + { + "event_id": relations_dict["event_id"], + "sender": relations_dict["sender"], + }, + { + RelationTypes.REPLACE: { + "event_id": edit_event_id, + "sender": self.user_id, + } + }, ) def _send_relation( From fef646e6bd2ec3acd552fc8f28952ac293672636 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 4 Jul 2019 10:38:52 +0100 Subject: [PATCH 05/10] Remove unnecessary changes --- synapse/storage/relations.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/synapse/storage/relations.py b/synapse/storage/relations.py index f1048507e487..1b01934c19e8 100644 --- a/synapse/storage/relations.py +++ b/synapse/storage/relations.py @@ -335,8 +335,7 @@ def get_applicable_edit(self, event_id): # Fetches latest edit that has the same type and sender as the # original, and is an `m.room.message`. sql = """ - SELECT edit.event_id, edit.origin_server_ts, edit.sender - FROM events AS edit + SELECT edit.event_id FROM events AS edit INNER JOIN event_relations USING (event_id) INNER JOIN events AS original ON original.event_id = relates_to_id From c12d4cb516a168c60cf8f4dd3cafffbafbda81c6 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 4 Jul 2019 10:57:08 +0100 Subject: [PATCH 06/10] Assert True --- tests/rest/client/v2_alpha/test_relations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index 62bf35ff6926..bd47887ec750 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -468,7 +468,7 @@ def test_edit(self): relations_dict = channel.json_body["unsigned"].get("m.relations") - self.assertEquals(RelationTypes.REPLACE in relations_dict) + self.assertEquals(RelationTypes.REPLACE in relations_dict, True) for key in ["event_id", "sender", "origin_server_ts"]: self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) @@ -535,7 +535,7 @@ def test_multi_edit(self): relations_dict = channel.json_body["unsigned"].get("m.relations") - self.assertEquals(RelationTypes.REPLACE in relations_dict) + self.assertEquals(RelationTypes.REPLACE in relations_dict, True) for key in ["event_id", "sender", "origin_server_ts"]: self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) From 123e069e6e8f99b91f0dfd04957e55f7b00c1d78 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 4 Jul 2019 13:41:08 +0100 Subject: [PATCH 07/10] more asserting --- tests/rest/client/v2_alpha/test_relations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index bd47887ec750..77aa3e1a8092 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -471,7 +471,7 @@ def test_edit(self): self.assertEquals(RelationTypes.REPLACE in relations_dict, True) for key in ["event_id", "sender", "origin_server_ts"]: - self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) + self.assertEquals(key in relations_dict[RelationTypes.REPLACE], True) self.assert_dict( { @@ -538,7 +538,7 @@ def test_multi_edit(self): self.assertEquals(RelationTypes.REPLACE in relations_dict, True) for key in ["event_id", "sender", "origin_server_ts"]: - self.assertEquals(key in relations_dict[RelationTypes.REPLACE]) + self.assertEquals(key in relations_dict[RelationTypes.REPLACE], True) self.assert_dict( { From d74b85307447578455502592f64adad6717cd932 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 4 Jul 2019 13:43:47 +0100 Subject: [PATCH 08/10] assertIn --- tests/rest/client/v2_alpha/test_relations.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index 77aa3e1a8092..b928ecc7c7a3 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -468,10 +468,10 @@ def test_edit(self): relations_dict = channel.json_body["unsigned"].get("m.relations") - self.assertEquals(RelationTypes.REPLACE in relations_dict, True) + self.assertIn(RelationTypes.REPLACE, relations_dict) for key in ["event_id", "sender", "origin_server_ts"]: - self.assertEquals(key in relations_dict[RelationTypes.REPLACE], True) + self.assertIn(key, relations_dict[RelationTypes.REPLACE]) self.assert_dict( { @@ -535,10 +535,10 @@ def test_multi_edit(self): relations_dict = channel.json_body["unsigned"].get("m.relations") - self.assertEquals(RelationTypes.REPLACE in relations_dict, True) + self.assertIn(RelationTypes.REPLACE, relations_dict) for key in ["event_id", "sender", "origin_server_ts"]: - self.assertEquals(key in relations_dict[RelationTypes.REPLACE], True) + self.assertIn(key, relations_dict[RelationTypes.REPLACE]) self.assert_dict( { From c0adf72ab18200e5a29c55b2ce1206c3fb1a22ea Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Fri, 5 Jul 2019 10:49:34 +0100 Subject: [PATCH 09/10] Cleaner asserting --- tests/rest/client/v2_alpha/test_relations.py | 30 ++++++++------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index b928ecc7c7a3..963105710e70 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -470,20 +470,17 @@ def test_edit(self): self.assertIn(RelationTypes.REPLACE, relations_dict) + m_replace_dict = relations_dict[RelationTypes.REPLACE] + for key in ["event_id", "sender", "origin_server_ts"]: - self.assertIn(key, relations_dict[RelationTypes.REPLACE]) + self.assertIn(key, m_replace_dict) self.assert_dict( { - "event_id": relations_dict["event_id"], - "sender": relations_dict["sender"], - }, - { - RelationTypes.REPLACE: { - "event_id": edit_event_id, - "sender": self.user_id, - } + "event_id": edit_event_id, + "sender": self.user_id, }, + m_replace_dict, ) def test_multi_edit(self): @@ -537,20 +534,17 @@ def test_multi_edit(self): self.assertIn(RelationTypes.REPLACE, relations_dict) + m_replace_dict = relations_dict[RelationTypes.REPLACE] + for key in ["event_id", "sender", "origin_server_ts"]: - self.assertIn(key, relations_dict[RelationTypes.REPLACE]) + self.assertIn(key, m_replace_dict) self.assert_dict( { - "event_id": relations_dict["event_id"], - "sender": relations_dict["sender"], - }, - { - RelationTypes.REPLACE: { - "event_id": edit_event_id, - "sender": self.user_id, - } + "event_id": edit_event_id, + "sender": self.user_id, }, + m_replace_dict, ) def _send_relation( From c2dcf5dd57a5fbca7f0cc1569da4de56c344f822 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Fri, 5 Jul 2019 10:53:27 +0100 Subject: [PATCH 10/10] lint --- tests/rest/client/v2_alpha/test_relations.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/tests/rest/client/v2_alpha/test_relations.py b/tests/rest/client/v2_alpha/test_relations.py index 963105710e70..6bb7d926385e 100644 --- a/tests/rest/client/v2_alpha/test_relations.py +++ b/tests/rest/client/v2_alpha/test_relations.py @@ -467,20 +467,14 @@ def test_edit(self): self.assertEquals(channel.json_body["content"], new_body) relations_dict = channel.json_body["unsigned"].get("m.relations") - self.assertIn(RelationTypes.REPLACE, relations_dict) m_replace_dict = relations_dict[RelationTypes.REPLACE] - for key in ["event_id", "sender", "origin_server_ts"]: self.assertIn(key, m_replace_dict) self.assert_dict( - { - "event_id": edit_event_id, - "sender": self.user_id, - }, - m_replace_dict, + {"event_id": edit_event_id, "sender": self.user_id}, m_replace_dict ) def test_multi_edit(self): @@ -531,20 +525,14 @@ def test_multi_edit(self): self.assertEquals(channel.json_body["content"], new_body) relations_dict = channel.json_body["unsigned"].get("m.relations") - self.assertIn(RelationTypes.REPLACE, relations_dict) m_replace_dict = relations_dict[RelationTypes.REPLACE] - for key in ["event_id", "sender", "origin_server_ts"]: self.assertIn(key, m_replace_dict) self.assert_dict( - { - "event_id": edit_event_id, - "sender": self.user_id, - }, - m_replace_dict, + {"event_id": edit_event_id, "sender": self.user_id}, m_replace_dict ) def _send_relation(