Skip to content

Commit e74e31c

Browse files
Add silent message update support
- Update Symphony APIs spec version - Add silent flag support according to the new spec. When silent is true, the new updated message is marked as read, otherwise is unread. True is the default value.
1 parent 6224c16 commit e74e31c

File tree

6 files changed

+43
-14
lines changed

6 files changed

+43
-14
lines changed

api_client_generation/generate.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ code_gen_dir=`pwd`
44
project_root=$code_gen_dir/..
55
echo $code_gen_dir
66

7-
commit_hash=136b530512eea112de73591906051871d034750a
7+
commit_hash=46abc03ad7225ebc32439c06920019c9d0fb0814
88
api_spec_base_url=https://raw.githubusercontent.com/symphonyoss/symphony-api-spec/${commit_hash}
99
echo $api_spec_base_url
1010

symphony/bdk/core/service/message/message_service.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ async def search_messages_one_page(skip, limit):
466466

467467
@retry
468468
async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None,
469-
version: str = "") -> V4Message:
469+
silent=True, version: str = "") -> V4Message:
470470
"""Update an existing message. The existing message must be a valid social message, that has not been deleted.
471471
See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
472472
@@ -476,12 +476,15 @@ async def update_message(self, stream_id: str, message_id: str, message: Union[s
476476
If it is a :py:class:`Message` instance, other parameters will be ignored.
477477
If it is a string, ``<messageML>`` tags can be omitted.
478478
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
479+
:param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
480+
which is default value) or unread (when false).
479481
:param version: Optional message version in the format "major.minor".
480482
If empty, defaults to the latest supported version.
481483
482484
:return: a V4Message object containing the details of the updated message.
483485
"""
484-
message_object = message if isinstance(message, Message) else Message(content=message, data=data, version=version)
486+
message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent,
487+
version=version)
485488

486489
params = {
487490
"sid": stream_id,
@@ -490,7 +493,8 @@ async def update_message(self, stream_id: str, message_id: str, message: Union[s
490493
"key_manager_token": await self._auth_session.key_manager_token,
491494
"message": message_object.content,
492495
"data": message_object.data,
493-
"version": message_object.version
496+
"version": message_object.version,
497+
"silent": str(message_object.silent)
494498
}
495499
return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
496500

symphony/bdk/core/service/message/model.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ class Message:
1414
`Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_.
1515
"""
1616

17-
def __init__(self, content: str, data=None,
17+
def __init__(self, content: str, data=None, silent=True,
1818
attachments: List[Union[IO, Tuple[IO, IO]]] = None, version: str = ""):
1919
"""Builds a message.
2020
2121
:param content: the MessageML content to be sent. This is mandatory
2222
If there is no <messageML> tags, they will be added to the content.
23-
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``
23+
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
24+
:param silent: the bool flag determine if the updated message will be marked as read (when it
25+
is true and it s the default value) or unread (when it is false)
2426
:param attachments: list of attachments or list of (attachment, previews).
2527
These must be opened files either in binary or text mode.
2628
Previews are optional but if present, all attachments must have a preview.
@@ -32,6 +34,7 @@ def __init__(self, content: str, data=None,
3234
self._content = self._get_content(content)
3335
self._data = "" if data is None else json.dumps(data)
3436
self._version = version
37+
self._silent = silent
3538
self._attachments, self._previews = self._get_attachments_and_previews(attachments)
3639

3740
@property
@@ -58,6 +61,14 @@ def version(self) -> str:
5861
"""
5962
return self._version
6063

64+
@property
65+
def silent(self) -> str:
66+
"""Message silent flag
67+
68+
:return: the message silent value
69+
"""
70+
return self._silent
71+
6172
@property
6273
def attachments(self) -> List[IO]:
6374
"""List of attachments

tests/core/service/message/message_service_test.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -421,4 +421,5 @@ async def test_update_message(mocked_api_client, message_service):
421421
message = await message_service.update_message("stream_id", "message_id", "test_message")
422422

423423
assert message.message_id == "ikCBeVCgQT876veVzQzOV3___oNI6f8obQ"
424-
assert message.user.user_id == 11338713662703
424+
assert message.user.user_id == 11338713662703
425+
assert message.silent

tests/core/service/message/model_test.py

+19-7
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
from symphony.bdk.core.service.message.model import Message
77

88

9-
def assert_message_properties_equal(actual_message, expected_content, expected_data, expected_version,
9+
def assert_message_properties_equal(actual_message, expected_content, expected_data, expected_silent, expected_version,
1010
expected_attachments, expected_previews):
1111
assert actual_message.content == expected_content
1212
assert actual_message.data == expected_data
13+
assert actual_message.silent == expected_silent
1314
assert actual_message.version == expected_version
1415
assert actual_message.attachments == expected_attachments
1516
assert actual_message.previews == expected_previews
@@ -22,14 +23,14 @@ def test_create_message_with_no_content():
2223

2324
def test_create_message_content_only_without_tags():
2425
assert_message_properties_equal(Message(content="Hello world!"),
25-
"<messageML>Hello world!</messageML>", "", "", [], [])
26+
"<messageML>Hello world!</messageML>", "", True, "", [], [])
2627

2728

2829
def test_create_message_content_only():
2930
content = "<messageML>Hello world!</messageML>"
3031

3132
assert_message_properties_equal(Message(content=content),
32-
content, "", "", [], [])
33+
content, "", True, "", [], [])
3334

3435

3536
def test_create_message_content_data_version():
@@ -39,31 +40,31 @@ def test_create_message_content_data_version():
3940
json_data = json.dumps(data)
4041

4142
assert_message_properties_equal(Message(content=content, version=version, data=data),
42-
content, json_data, version, [], [])
43+
content, json_data, True, version, [], [])
4344

4445

4546
def test_create_message_with_attachment():
4647
content = "<messageML>Hello world!</messageML>"
4748
attachments = ["some attachment"]
4849

4950
assert_message_properties_equal(Message(content=content, attachments=attachments),
50-
content, "", "", attachments, [])
51+
content, "", True, "", attachments, [])
5152

5253

5354
def test_create_message_with_attachment_one_element_tuple():
5455
content = "<messageML>Hello world!</messageML>"
5556
attachment = "some attachment"
5657

5758
assert_message_properties_equal(Message(content=content, attachments=[(attachment,)]),
58-
content, "", "", [attachment], [])
59+
content, "", True, "", [attachment], [])
5960

6061

6162
def test_create_message_with_attachment_and_preview():
6263
content = "<messageML>Hello world!</messageML>"
6364
attachment = "some attachment"
6465
preview = "some preview"
6566
assert_message_properties_equal(Message(content=content, attachments=[(attachment, preview)]),
66-
content, "", "", [attachment], [preview])
67+
content, "", True, "", [attachment], [preview])
6768

6869

6970
def test_create_message_with_attachment_and_no_preview_for_second_attachment():
@@ -76,3 +77,14 @@ def test_create_message_with_attachment_and_no_preview_for_first_attachment():
7677
with pytest.raises(MessageCreationError):
7778
Message(content="<messageML>Hello world!</messageML>",
7879
attachments=["first attachment", ("second attachment", "second preview")])
80+
81+
82+
def test_create_message_content_data_version_silent():
83+
content = "<messageML>Hello world!</messageML>"
84+
version = "2.0"
85+
data = ["foo", {"bar": ("baz", 1.0, 2)}]
86+
silent = False
87+
json_data = json.dumps(data)
88+
89+
assert_message_properties_equal(Message(content=content, version=version, data=data, silent=silent),
90+
content, json_data, silent, version, [], [])

tests/resources/message_response/update_message.json

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"userAgent": "Agent-20.13.0-SNAPSHOT-Linux-4.14.243-185.433.amzn2.x86_64",
1616
"originalFormat": "com.symphony.messageml.v2",
1717
"sid": "b10d692f-899e-4601-b946-879da15c0462",
18+
"silent": "true",
1819
"replacing": "PUQj2xA0eniBOfeNTbTu8X___oNdE9uDbQ",
1920
"initialTimestamp": 1634820957308,
2021
"initialMessageId": "PUQj2xA0eniBOfeNTbTu8X___oNdE9uDbQ"

0 commit comments

Comments
 (0)