Skip to content

Commit f444c6d

Browse files
committed
Added scheduled email endpoints
1 parent 162c0e2 commit f444c6d

25 files changed

+635
-61
lines changed

infobip_channels/email/channel.py

Lines changed: 124 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,49 @@
55

66
from infobip_channels.core.channel import Channel
77
from infobip_channels.core.models import PostHeaders, ResponseBase
8+
from infobip_channels.email.models.body.reschedule_messages import (
9+
RescheduleMessagesMessageBody,
10+
)
811
from infobip_channels.email.models.body.send_email import EmailMessageBody
12+
from infobip_channels.email.models.body.update_scheduled_status import (
13+
UpdateScheduledStatusMessageBody,
14+
)
915
from infobip_channels.email.models.query_parameters.delivery_reports import (
1016
DeliveryReportsQueryParameters,
1117
)
1218
from infobip_channels.email.models.query_parameters.get_logs import (
1319
GetLogsQueryParameters,
1420
)
21+
from infobip_channels.email.models.query_parameters.get_sent_bulks import (
22+
GetSentBulksQueryParameters,
23+
)
24+
from infobip_channels.email.models.query_parameters.get_sent_bulks_status import (
25+
GetSentBulksStatusQueryParameters,
26+
)
27+
from infobip_channels.email.models.query_parameters.reschedule_messages import (
28+
RescheduleMessagesQueryParameters,
29+
)
30+
from infobip_channels.email.models.query_parameters.update_scheduled_status import (
31+
UpdateScheduledStatusQueryParameters,
32+
)
1533
from infobip_channels.email.models.response.core import EmailResponseError
1634
from infobip_channels.email.models.response.delivery_reports import (
1735
DeliveryReportsResponse,
1836
)
1937
from infobip_channels.email.models.response.get_logs import GetLogsResponse
38+
from infobip_channels.email.models.response.get_sent_bulk_status import (
39+
GetSentEmailBulksStatusResponse,
40+
)
41+
from infobip_channels.email.models.response.get_sent_bulks import (
42+
GetSentEmailBulksResponse,
43+
)
44+
from infobip_channels.email.models.response.reschedule_messages import (
45+
RescheduleMessagesResponse,
46+
)
2047
from infobip_channels.email.models.response.send_email import SendEmailResponse
48+
from infobip_channels.email.models.response.update_scheduled_status import (
49+
UpdateScheduledStatusResponse,
50+
)
2151

2252

2353
class EmailChannel(Channel):
@@ -51,7 +81,8 @@ def _get_custom_response_class(
5181
def send_email_message(
5282
self, message: Union[EmailMessageBody, Dict]
5383
) -> Union[ResponseBase, requests.Response, Any]:
54-
"""Send an email or multiple emails to a recipient or multiple recipients
84+
"""
85+
Send an email or multiple emails to a recipient or multiple recipients
5586
with CC/BCC enabled.
5687
5788
:param message: Body of the message to send
@@ -75,7 +106,7 @@ def email_delivery_reports(
75106
"""
76107
Get one-time delivery reports for all sent emails.
77108
78-
:param query_parameters: Body of the message to send
109+
:param query_parameters: Query parameters to send with the request
79110
:return: Received response
80111
"""
81112

@@ -96,7 +127,7 @@ def get_email_logs(
96127
This method allows you to get email logs of sent Email messagesId for
97128
request. Email logs are available for the last 48 hours.
98129
99-
:param query_parameters: Body of the message to send
130+
:param query_parameters: Query parameters to send with the request
100131
:return: Received response
101132
"""
102133

@@ -109,3 +140,93 @@ def get_email_logs(
109140
params=query_parameters.dict(by_alias=True),
110141
)
111142
return self._construct_response(response, GetLogsResponse)
143+
144+
def get_sent_email_bulks(
145+
self, query_parameters: Union[GetSentBulksQueryParameters, Dict]
146+
) -> Union[ResponseBase, requests.Response, Any]:
147+
"""
148+
See the scheduled time of your Email messages.
149+
150+
:param query_parameters: Query parameters to send with the request
151+
:return: Received response
152+
"""
153+
154+
query_parameters = self.validate_query_parameter(
155+
query_parameters, GetSentBulksQueryParameters
156+
)
157+
158+
response = self._client.get(
159+
self.EMAIL_URL_TEMPLATE_V1 + "bulks",
160+
params=query_parameters.dict(by_alias=True),
161+
)
162+
return self._construct_response(response, GetSentEmailBulksResponse)
163+
164+
def get_sent_email_bulks_status(
165+
self, query_parameters: Union[GetSentBulksStatusQueryParameters, Dict]
166+
) -> Union[ResponseBase, requests.Response, Any]:
167+
"""
168+
See the status of scheduled email messages.
169+
170+
:param query_parameters: Query parameters to send with the request
171+
:return: Received response
172+
"""
173+
174+
query_parameters = self.validate_query_parameter(
175+
query_parameters, GetSentBulksStatusQueryParameters
176+
)
177+
178+
response = self._client.get(
179+
self.EMAIL_URL_TEMPLATE_V1 + "bulks/status",
180+
params=query_parameters.dict(by_alias=True),
181+
)
182+
return self._construct_response(response, GetSentEmailBulksStatusResponse)
183+
184+
def reschedule_email_messages(
185+
self,
186+
query_parameters: Union[RescheduleMessagesQueryParameters, Dict],
187+
message: Union[RescheduleMessagesMessageBody, Dict],
188+
) -> Union[ResponseBase, requests.Response, Any]:
189+
"""
190+
Change the date and time for sending scheduled Email messages.
191+
192+
:param query_parameters: Query parameters to send with the request
193+
:param message: Body of the message to send
194+
:return: Received response
195+
"""
196+
query_parameters = self.validate_query_parameter(
197+
query_parameters, RescheduleMessagesQueryParameters
198+
)
199+
200+
message = self.validate_message_body(message, RescheduleMessagesMessageBody)
201+
202+
response = self._client.put(
203+
self.EMAIL_URL_TEMPLATE_V1 + "bulks",
204+
message.dict(by_alias=True),
205+
params=query_parameters.dict(by_alias=True),
206+
)
207+
return self._construct_response(response, RescheduleMessagesResponse)
208+
209+
def update_scheduled_email_messages(
210+
self,
211+
query_parameters: Union[UpdateScheduledStatusQueryParameters, Dict],
212+
message: Union[UpdateScheduledStatusMessageBody, Dict],
213+
) -> Union[ResponseBase, requests.Response, Any]:
214+
"""
215+
Change status or completely cancel sending of scheduled Email messages.
216+
217+
:param query_parameters: Query parameters to send with the request
218+
:param message: Body of the message to send
219+
:return: Received response
220+
"""
221+
query_parameters = self.validate_query_parameter(
222+
query_parameters, UpdateScheduledStatusQueryParameters
223+
)
224+
225+
message = self.validate_message_body(message, UpdateScheduledStatusMessageBody)
226+
227+
response = self._client.put(
228+
self.EMAIL_URL_TEMPLATE_V1 + "bulks/status",
229+
message.dict(by_alias=True),
230+
params=query_parameters.dict(by_alias=True),
231+
)
232+
return self._construct_response(response, UpdateScheduledStatusResponse)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.core.models import MessageBodyBase
2+
3+
4+
class RescheduleMessagesMessageBody(MessageBodyBase):
5+
send_at: str

infobip_channels/email/models/body/send_email.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
from datetime import datetime
21
from io import IOBase
3-
from typing import Optional, Union
2+
from typing import Optional
43

5-
from pydantic import AnyHttpUrl, Field, StrictBool, constr, validator
4+
from pydantic import AnyHttpUrl, Field, StrictBool, constr
65

76
from infobip_channels.core.models import (
87
CamelCaseModel,
@@ -37,13 +36,9 @@ class EmailMessageBody(MultipartMixin, MessageBodyBase, DateTimeValidator):
3736
intermediateReport: Optional[StrictBool] = False
3837
notify_url: Optional[AnyHttpUrl] = None
3938
notify_content_type: Optional[ContentTypeEnum] = None
40-
send_at: Optional[Union[datetime, str]] = None
39+
send_at: Optional[str] = None
4140
landing_page_placeholders: Optional[str] = None
4241
landing_page_id: Optional[str] = None
4342

4443
class Config(CamelCaseModel.Config):
4544
arbitrary_types_allowed = True
46-
47-
@validator("send_at")
48-
def convert_send_at_to_correct_format(cls, value):
49-
return super().convert_time_to_correct_format(value)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.core.models import MessageBodyBase, MessageStatus
2+
3+
4+
class UpdateScheduledStatusMessageBody(MessageBodyBase):
5+
status: MessageStatus
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.core.models import QueryParameter
2+
3+
4+
class BulksQueryParameters(QueryParameter):
5+
bulk_id: str
Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
from datetime import datetime
2-
from typing import Optional, Union
1+
from typing import Optional
32

4-
from pydantic import Field, validator
3+
from pydantic import Field
54

65
from infobip_channels.core.models import (
76
DateTimeValidator,
@@ -16,14 +15,6 @@ class GetLogsQueryParameters(QueryParameter, DateTimeValidator):
1615
to: Optional[str] = None
1716
bulk_id: Optional[str] = None
1817
general_status: Optional[GeneralStatus] = None
19-
sent_since: Optional[Union[datetime, str]] = None
20-
sent_until: Optional[Union[datetime, str]] = None
18+
sent_since: Optional[str] = None
19+
sent_until: Optional[str] = None
2120
limit: Optional[int] = None
22-
23-
@validator("sent_since")
24-
def convert_sent_since_to_correct_format(cls, value):
25-
return super().convert_time_to_correct_format(value)
26-
27-
@validator("sent_until")
28-
def convert_sent_until_to_correct_format(cls, value):
29-
return super().convert_time_to_correct_format(value)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.email.models.query_parameters.core import BulksQueryParameters
2+
3+
4+
class GetSentBulksQueryParameters(BulksQueryParameters):
5+
pass
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.email.models.query_parameters.core import BulksQueryParameters
2+
3+
4+
class GetSentBulksStatusQueryParameters(BulksQueryParameters):
5+
pass
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.email.models.query_parameters.core import BulksQueryParameters
2+
3+
4+
class RescheduleMessagesQueryParameters(BulksQueryParameters):
5+
pass
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from infobip_channels.email.models.query_parameters.core import BulksQueryParameters
2+
3+
4+
class UpdateScheduledStatusQueryParameters(BulksQueryParameters):
5+
pass

0 commit comments

Comments
 (0)