Skip to content
4 changes: 2 additions & 2 deletions packages/api/src/microsoft_teams/api/activities/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from pydantic import Field, TypeAdapter

from . import event, install_update, invoke, message
from .activity_params import ActivityParams
from .sendable_activity import SendableActivity
from .command import CommandActivity, CommandResultActivity, CommandResultValue, CommandSendActivity, CommandSendValue
from .conversation import (
ConversationActivity,
Expand Down Expand Up @@ -68,7 +68,7 @@
"ConversationEventType",
"InvokeActivity",
"TraceActivity",
"ActivityParams",
"SendableActivity",
"SentActivity",
]
__all__.extend(event.__all__)
Expand Down
40 changes: 0 additions & 40 deletions packages/api/src/microsoft_teams/api/activities/activity_params.py

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,15 @@

from pydantic import Field

from .command_result import CommandResultActivity, CommandResultActivityInput, CommandResultValue
from .command_send import CommandSendActivity, CommandSendActivityInput, CommandSendValue
from .command_result import CommandResultActivity, CommandResultValue
from .command_send import CommandSendActivity, CommandSendValue

CommandActivity = Annotated[Union[CommandSendActivity, CommandResultActivity], Field(discriminator="type")]

__all__ = [
"CommandResultValue",
"CommandResultActivity",
"CommandResultActivityInput",
"CommandSendValue",
"CommandSendActivity",
"CommandSendActivityInput",
"CommandActivity",
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from typing import Any, Literal, Optional

from ...models import ActivityBase, ActivityInputBase, CustomBaseModel
from ...models import ActivityBase, CustomBaseModel


class CommandResultValue(CustomBaseModel):
Expand Down Expand Up @@ -47,7 +47,3 @@ class CommandResultActivity(_CommandResultBase, ActivityBase):
"""The name of the event."""


class CommandResultActivityInput(_CommandResultBase, ActivityInputBase):
"""Input model for creating command result activities with builder methods."""

pass
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from typing import Any, Literal, Optional

from ...models import ActivityBase, ActivityInputBase, CustomBaseModel
from ...models import ActivityBase, CustomBaseModel


class CommandSendValue(CustomBaseModel):
Expand Down Expand Up @@ -43,7 +43,3 @@ class CommandSendActivity(_CommandSendBase, ActivityBase):
"""The name of the event."""


class CommandSendActivityInput(_CommandSendBase, ActivityInputBase):
"""Input model for creating command send activities with builder methods."""

pass
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
ConversationChannelData,
ConversationEventType,
ConversationUpdateActivity,
ConversationUpdateActivityInput,
)

ConversationActivity = ConversationUpdateActivity
Expand All @@ -16,6 +15,5 @@
"ConversationEventType",
"ConversationChannelData",
"ConversationUpdateActivity",
"ConversationUpdateActivityInput",
"ConversationActivity",
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from typing import List, Literal, Optional

from ...models import Account, ActivityBase, ActivityInputBase, ChannelData, CustomBaseModel
from ...models import Account, ActivityBase, ChannelData, CustomBaseModel

ConversationEventType = Literal[
"channelCreated",
Expand Down Expand Up @@ -55,7 +55,3 @@ class ConversationUpdateActivity(_ConversationUpdateBase, ActivityBase):
"""Channel data with event type information."""


class ConversationUpdateActivityInput(_ConversationUpdateBase, ActivityInputBase):
"""Input model for creating conversation update activities with builder methods."""

pass
4 changes: 1 addition & 3 deletions packages/api/src/microsoft_teams/api/activities/handoff.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from typing import Literal

from ..models import ActivityBase, ActivityInputBase, CustomBaseModel
from ..models import ActivityBase, CustomBaseModel


class _HandoffBase(CustomBaseModel):
Expand All @@ -18,5 +18,3 @@ class HandoffActivity(_HandoffBase, ActivityBase):
"""Output model for received handoff activities with required fields and read-only properties."""


class HandoffActivityInput(_HandoffBase, ActivityInputBase):
"""Input model for creating handoff activities with builder methods."""
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@
from pydantic import Field

from .message import MessageActivity, MessageActivityInput
from .message_delete import MessageDeleteActivity, MessageDeleteActivityInput, MessageDeleteChannelData
from .message_delete import MessageDeleteActivity, MessageDeleteChannelData
from .message_reaction import MessageReactionActivity, MessageReactionActivityInput
from .message_update import (
MessageEventType,
MessageUpdateActivity,
MessageUpdateActivityInput,
MessageUpdateChannelData,
)

Expand All @@ -32,12 +31,10 @@
"MessageActivity",
"MessageActivityInput",
"MessageDeleteActivity",
"MessageDeleteActivityInput",
"MessageDeleteChannelData",
"MessageReactionActivity",
"MessageReactionActivityInput",
"MessageUpdateActivity",
"MessageUpdateActivityInput",
"MessageUpdateChannelData",
"MessageEventType",
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from typing import Literal, Optional

from ...models import ActivityBase, ActivityInputBase, ChannelData
from ...models import ActivityBase, ChannelData
from ...models.custom_base_model import CustomBaseModel


Expand All @@ -30,7 +30,3 @@ class MessageDeleteActivity(_MessageDeleteBase, ActivityBase):

channel_data: MessageDeleteChannelData # pyright: ignore [reportGeneralTypeIssues]
"""Channel-specific data for message delete events."""


class MessageDeleteActivityInput(_MessageDeleteBase, ActivityInputBase):
"""Input model for creating message delete activities with builder methods."""
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
"""

from datetime import datetime
from typing import Any, Literal, Optional, Self
from typing import Any, Literal, Optional

from ...models import ActivityBase, ActivityInputBase, ChannelData
from ...models import ActivityBase, ChannelData
from ...models.custom_base_model import CustomBaseModel

MessageEventType = Literal["undeleteMessage", "editMessage"]
Expand Down Expand Up @@ -56,57 +56,3 @@ class MessageUpdateActivity(_MessageUpdateBase, ActivityBase):
"""Channel-specific data for message update events."""


class MessageUpdateActivityInput(_MessageUpdateBase, ActivityInputBase):
"""Input model for creating message update activities with builder methods."""

def with_text(self, text: str) -> Self:
"""
Set the text content of the message.

Args:
text: The text content to set

Returns:
Self for method chaining
"""
self.text = text
return self

def with_speak(self, speak: str) -> Self:
"""
Set the text to speak.

Args:
speak: The text to speak

Returns:
Self for method chaining
"""
self.speak = speak
return self

def with_summary(self, summary: str) -> Self:
"""
Set the summary text.

Args:
summary: The summary text to set

Returns:
Self for method chaining
"""
self.summary = summary
return self

def with_expiration(self, expiration: datetime) -> Self:
"""
Set the expiration time for the activity.

Args:
expiration: The expiration datetime to set

Returns:
Self for method chaining
"""
self.expiration = expiration
return self
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License.
"""

# Union of activity input types that can be sent via the
# /v3/conversations/{id}/activities create/update endpoints.
# Other *ActivityInput classes exist for model symmetry but represent
# inbound-only event notifications (messageDelete, messageUpdate, etc.).
# NOTE: MessageReactionActivityInput is temporarily included here even
# though reactions have a dedicated /activities/{id}/reactions endpoint
# exposed via ReactionClient.
from typing import Annotated, Union

from pydantic import Field

from .message import (
MessageActivityInput,
MessageReactionActivityInput,
)
from .typing import TypingActivityInput

SendableActivity = Annotated[
Union[
MessageActivityInput,
MessageReactionActivityInput,
TypingActivityInput,
],
Field(discriminator="type"),
]
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"""

from ..models import CustomBaseModel
from . import ActivityParams
from . import SendableActivity


class SentActivity(CustomBaseModel):
Expand All @@ -13,10 +13,10 @@ class SentActivity(CustomBaseModel):
id: str
"""Id of the activity."""

activity_params: ActivityParams
activity_params: SendableActivity
"""Additional parameters for the activity."""

@classmethod
def merge(cls, activity_params: ActivityParams, curr_activity: "SentActivity") -> "SentActivity":
def merge(cls, activity_params: SendableActivity, curr_activity: "SentActivity") -> "SentActivity":
merged_data = {**activity_params.model_dump(), **curr_activity.model_dump()}
return cls(**merged_data)
4 changes: 1 addition & 3 deletions packages/api/src/microsoft_teams/api/activities/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from typing import Any, Literal, Optional

from ..models import ActivityBase, ActivityInputBase, CustomBaseModel
from ..models import ActivityBase, CustomBaseModel


class _TraceBase(CustomBaseModel):
Expand Down Expand Up @@ -48,5 +48,3 @@ class TraceActivity(_TraceBase, ActivityBase):
"""


class TraceActivityInput(_TraceBase, ActivityInputBase):
"""Input model for creating trace activities with builder methods."""
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from microsoft_teams.common.experimental import experimental
from microsoft_teams.common.http import Client

from ...activities import ActivityParams, SentActivity
from ...activities import SendableActivity, SentActivity
from ...models import TeamsChannelAccount
from ..api_client_settings import ApiClientSettings
from ..base_client import BaseClient
Expand Down Expand Up @@ -38,7 +38,7 @@ def __init__(
super().__init__(http_client, api_client_settings)
self.service_url = service_url.rstrip("/")

async def create(self, conversation_id: str, activity: ActivityParams) -> SentActivity:
async def create(self, conversation_id: str, activity: SendableActivity) -> SentActivity:
"""
Create a new activity in a conversation.

Expand All @@ -61,7 +61,7 @@ async def create(self, conversation_id: str, activity: ActivityParams) -> SentAc
id = response.json().get("id", _PLACEHOLDER_ACTIVITY_ID)
return SentActivity(id=id, activity_params=activity)

async def update(self, conversation_id: str, activity_id: str, activity: ActivityParams) -> SentActivity:
async def update(self, conversation_id: str, activity_id: str, activity: SendableActivity) -> SentActivity:
"""
Update an existing activity in a conversation.

Expand All @@ -80,7 +80,7 @@ async def update(self, conversation_id: str, activity_id: str, activity: Activit
id = response.json()["id"]
return SentActivity(id=id, activity_params=activity)

async def reply(self, conversation_id: str, activity_id: str, activity: ActivityParams) -> SentActivity:
async def reply(self, conversation_id: str, activity_id: str, activity: SendableActivity) -> SentActivity:
"""
Reply to an activity in a conversation.

Expand Down Expand Up @@ -128,7 +128,7 @@ async def get_members(self, conversation_id: str, activity_id: str) -> List[Team
return [TeamsChannelAccount.model_validate(member) for member in response.json()]

@experimental("ExperimentalTeamsTargeted")
async def create_targeted(self, conversation_id: str, activity: ActivityParams) -> SentActivity:
async def create_targeted(self, conversation_id: str, activity: SendableActivity) -> SentActivity:
"""
Create a new targeted activity in a conversation.

Expand All @@ -153,7 +153,7 @@ async def create_targeted(self, conversation_id: str, activity: ActivityParams)
return SentActivity(id=id, activity_params=activity)

@experimental("ExperimentalTeamsTargeted")
async def update_targeted(self, conversation_id: str, activity_id: str, activity: ActivityParams) -> SentActivity:
async def update_targeted(self, conversation_id: str, activity_id: str, activity: SendableActivity) -> SentActivity:
"""
Update an existing targeted activity in a conversation.

Expand Down
Loading
Loading