8000 Merge branch 'master' into trboehre/Teams-FileUpload · guptarohan41/botbuilder-python@0d77f3b · GitHub
[go: up one dir, main page]

Skip to content

Commit 0d77f3b

Browse files
authored
Merge branch 'master' into trboehre/Teams-FileUpload
2 parents fcd26a1 + 9d0fef1 commit 0d77f3b

File tree

7 files changed

+222
-12
lines changed

7 files changed

+222
-12
lines changed

libraries/botbuilder-core/botbuilder/core/teams/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,16 @@
77

88
from .teams_activity_handler import TeamsActivityHandler
99
from .teams_info import TeamsInfo
10+
from .teams_activity_extensions import (
11+
teams_get_channel_id,
12+
teams_get_team_info,
13+
teams_notify_user,
14+
)
1015

1116
__all__ = [
1217
"TeamsActivityHandler",
1318
"TeamsInfo",
19+
"teams_get_channel_id",
20+
"teams_get_team_info",
21+
"teams_notify_user",
1422
]
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from botbuilder.schema import Activity
2+
from botbuilder.schema.teams import NotificationInfo, TeamsChannelData, TeamInfo
3+
4+
5+
def dummy():
6+
return 1
7+
8+
9+
def teams_get_channel_id(activity: Activity) -> str:
10+
if not activity:
11+
return None
12+
13+
if activity.channel_data:
14+
channel_data = TeamsChannelData().deserialize(activity.channel_data)
15+
return channel_data.channel.id if channel_data.channel else None
16+
17+
return None
18+
19+
20+
def teams_get_team_info(activity: Activity) -> TeamInfo:
21+
if not activity:
22+
return None
23+
24+
if activity.channel_data:
25+
channel_data = TeamsChannelData().deserialize(activity.channel_data)
26+
return channel_data.team
27+
28+
return 6D40 None
29+
30+
31+
def teams_notify_user(activity: Activity):
32+
if not activity:
33+
return
34+
35+
if not activity.channel_data:
36+
activity.channel_data = {}
37+
38+
channel_data = TeamsChannelData().deserialize(activity.channel_data)
39+
channel_data.notification = NotificationInfo(alert=True)
40+
activity.channel_data = channel_data

libraries/botbuilder-core/botbuilder/core/teams/teams_activity_handler.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,28 +61,34 @@ async def on_invoke_activity(self, turn_context: TurnContext):
6161

6262
if turn_context.activity.name == "fileConsent/invoke":
6363
return await self.on_teams_file_consent(
64-
turn_context, FileConsentCardResponse(**turn_context.activity.value)
64+
turn_context,
65+
FileConsentCardResponse().deserialize(turn_context.activity.value),
6566
)
6667

6768
if turn_context.activity.name == "actionableMessage/executeAction":
6869
await self.on_teams_o365_connector_card_action(
6970
turn_context,
70-
O365ConnectorCardActionQuery(**turn_context.activity.value),
71+
O365ConnectorCardActionQuery().deserialize(
72+
turn_context.activity.value
73+
),
7174
)
7275
return self._create_invoke_response()
7376

7477
if turn_context.activity.name == "composeExtension/queryLink":
7578
return self._create_invoke_response(
7679
await self.on_teams_app_based_link_query(
77-
turn_context, AppBasedLinkQuery(**turn_context.activity.value)
80+
turn_context,
81+
AppBasedLinkQuery().deserialize(turn_context.activity.value),
7882
)
7983
)
8084

8185
if turn_context.activity.name == "composeExtension/query":
8286
return self._create_invoke_response(
8387
await self.on_teams_messaging_extension_query(
8488
turn_context,
85-
MessagingExtensionQuery(**turn_context.activity.value),
89+
MessagingExtensionQuery().deserialize(
90+
turn_context.activity.value
91+
),
8692
)
8793
)
8894

@@ -113,7 +119,9 @@ async def on_invoke_activity(self, turn_context: TurnContext):
113119
return self._create_invoke_response(
114120
await self.on_teams_messaging_extension_configuration_query_settings_url(
115121
turn_context,
116-
MessagingExtensionQuery(**turn_context.activity.value),
122+
MessagingExtensionQuery().deserialize(
123+
turn_context.activity.value
124+
),
117125
)
118126
)
119127

@@ -132,14 +140,16 @@ async def on_invoke_activity(self, turn_context: TurnContext):
132140
if turn_context.activity.name == "task/fetch":
133141
return self._create_invoke_response(
134142
await self.on_teams_task_module_fetch(
135-
turn_context, TaskModuleRequest(**turn_context.activity.value)
143+
turn_context,
144+
TaskModuleRequest().deserialize(turn_context.activity.value),
136145
)
137146
)
138147

139148
if turn_context.activity.name == "task/submit":
140149
return self._create_invoke_response(
141150
await self.on_teams_task_module_submit(
142-
turn_context, TaskModuleRequest(**turn_context.activity.value)
151+
turn_context,
152+
TaskModuleRequest().deserialize(turn_context.activity.value),
143153
)
144154
)
145155

@@ -280,7 +290,9 @@ async def on_teams_task_module_submit( # pylint: disable=unused-argument
280290
async def on_conversation_update_activity(self, turn_context: TurnContext):
281291

282292
if turn_context.activity.channel_id == Channels.ms_teams:
283-
channel_data = TeamsChannelData(**turn_context.activity.channel_data)
293+
channel_data = TeamsChannelData().deserialize(
294+
turn_context.activity.channel_data
295+
)
284296
if turn_context.activity.members_added:
285297
return await self.on_teams_members_added_dispatch_activity(
286298
turn_context.activity.members_added, channel_data.team, turn_context
@@ -296,7 +308,7 @@ async def on_conversation_update_activity(self, turn_context: TurnContext):
296308
if channel_data:
297309
if channel_data.event_type == "channelCreated":
298310
return await self.on_teams_channel_created_activity(
299-
ChannelInfo(**channel_data.channel),
311+
ChannelInfo().deserialize(channel_data.channel),
300312
channel_data.team,
301313
turn_context,
302314
)

libraries/botbuilder-core/tests/teams/test_teams_activity_handler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ async def test_on_app_based_link_query(self):
510510

511511
async def test_on_teams_messaging_extension_bot_message_preview_edit_activity(self):
512512
# Arrange
513+
513514
activity = Activity(
514515
type=ActivityTypes.invoke,
515516
name="composeExtension/submitAction",
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
import aiounittest
2+
3+
from botbuilder.schema import Activity
4+
from botbuilder.schema.teams import TeamInfo
5+
from botbuilder.core.teams import (
6+
teams_get_channel_id,
7+
teams_get_team_info,
8+
teams_notify_user,
9+
)
10+
11+
12+
class TestTeamsActivityHandler(aiounittest.AsyncTestCase):
13+
def test_teams_get_channel_id(self):
14+
# Arrange
15+
activity = Activity(
16+
channel_data={"channel": {"id": "id123", "name": "channel_name"}}
17+
)
18+
19+
# Act
20+
result = teams_get_channel_id(activity)
21+
22+
# Assert
23+
assert result == "id123"
24+
25+
def test_teams_get_channel_id_with_no_channel(self):
26+
# Arrange
27+
activity = Activity(
28+
channel_data={"team": {"id": "id123", "name": "channel_name"}}
29+
)
30+
31+
# Act
32+
result = teams_get_channel_id(activity)
33+
34+
# Assert
35+
assert result is None
36+
37+
def test_teams_get_channel_id_with_no_channel_id(self):
38+
# Arrange
39+
activity = Activity(channel_data={"team": {"name": "channel_name"}})
40+
41+
# Act
42+
result = teams_get_channel_id(activity)
43+
44+
# Assert
45+
assert result is None
46+
47+
def test_teams_get_channel_id_with_no_channel_data(self):
48+
# Arrange
49+
activity = Activity(type="type")
50+
51+
# Act
52+
result = teams_get_channel_id(activity)
53+
54+
# Assert
55+
assert result is None
56+
57+
def test_teams_get_channel_id_with_none_activity(self):
58+
# Arrange
59+
activity = None
60+
61+
# Act
62+
result = teams_get_channel_id(activity)
63+
64+
# Assert
65+
assert result is None
66+
67+
def test_teams_get_team_info(self):
68+
# Arrange
69+
activity = Activity(
70+
channel_data={"team": {"id": "id123", "name": "channel_name"}}
71+
)
72+
73+
# Act
74+
result = teams_get_team_info(activity)
75+
76+
# Assert
77+
assert result == TeamInfo(id="id123", name="channel_name")
78+
79+
def test_teams_get_team_info_with_no_channel_data(self):
80+
# Arrange
81+
activity = Activity(type="type")
82+
83+
# Act
84+
result = teams_get_team_info(activity)
85+
86+
# Assert
87+
assert result is None
88+
89+
def test_teams_get_team_info_with_no_team_info(self):
90+
# Arrange
91+
activity = Activity(channel_data={"eventType": "eventType"})
92+
93+
# Act
94+
result = teams_get_team_info(activity)
95+
96+
# Assert
97+
assert result is None
98+
99+
def test_teams_get_team_info_with_none_activity(self):
100+
# Arrange
101+
activity = None
102+< 10000 /span>
103+
# Act
104+
result = teams_get_team_info(activity)
105+
106+
# Assert
107+
assert result is None
108+
109+
def test_teams_notify_user(self):
110+
# Arrange
111+
activity = Activity(channel_data={"eventType": "eventType"})
112+
113+
# Act
114+
teams_notify_user(activity)
115+
116+
# Assert
117+
assert activity.channel_data.notification.alert
118+
119+
def test_teams_notify_user_with_no_activity(self):
120+
# Arrange
121+
activity = None
122+
123+
# Act
124+
teams_notify_user(activity)
125+
126+
# Assert
127+
assert activity is None
128+
129+
def test_teams_notify_user_with_preexisting_notification(self):
130+
# Arrange
131+
activity = Activity(channel_data={"notification": {"alert": False}})
132+
133+
# Act
134+
teams_notify_user(activity)
135+
136+
# Assert
137+
assert activity.channel_data.notification.alert
138+
139+
def test_teams_notify_user_with_no_channel_data(self):
140+
# Arrange
141+
activity = Activity(id="id123")
142+
143+
# Act
144+
teams_notify_user(activity)
145+
146+
# Assert
147+
assert activity.channel_data.notification.alert
148+
assert activity.id == "id123"

libraries/botbuilder-schema/botbuilder/schema/teams/_models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# --------------------------------------------------------------------------
1111

1212
from msrest.serialization import Model
13+
from botbuilder.schema import Activity
1314

1415

1516
class AppBasedLinkQuery(Model):
@@ -1575,7 +1576,7 @@ def __init__(self, **kwargs):
15751576
super(TeamsChannelData, self).__init__(**kwargs)
15761577
self.channel = kwargs.get("channel", None)
15771578
# doing camel case here since that's how the data comes in
1578-
self.event_type = kwargs.get("eventType", None)
1579+
self.event_type = kwargs.get("event_type", None)
15791580
self.team = kwargs.get("team", None)
15801581
self.notification = kwargs.get("notification", None)
15811582
self.tenant = kwargs.get("tenant", None)

libraries/botbuilder-schema/botbuilder/schema/teams/_models_py3.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
# --------------------------------------------------------------------------
1111

1212
from msrest.serialization import Model
13-
from botbuilder.schema import Attachment, ChannelAccount
13+
from botbuilder.schema import Activity, Attachment, ChannelAccount
1414

1515

1616
class TaskModuleRequest(Model):
@@ -646,7 +646,7 @@ class MessagingExtensionAction(TaskModuleRequest):
646646
~botframework.connector.teams.models.enum
647647
:param bot_activity_preview:
648648
:type bot_activity_preview:
649-
list[~botframework.connector.teams.models.Activity]
649+
list[~botframework.schema.models.Activity]
650650
:param message_payload: Message content sent as part of the command
651651
request.
652652
:type message_payload:

0 commit comments

Comments
 (0)
0