Email Notifications
The hello service generated by daeploy init
will send a notification if someone
tries to greet “World” and you would be able to view the notification on the manager
dashboard. In this tutorial we will see how the same notification can be send as
an email. As a reminder, here is service.py for the hello service:
import logging
from daeploy import service
from daeploy.communication import notify, Severity
logger = logging.getLogger(__name__)
service.add_parameter("greeting_phrase", "Hello")
@service.entrypoint
def hello(name: str) -> str:
greeting_phrase = service.get_parameter("greeting_phrase")
if name == "World":
notify(
msg="Someone is trying to greet the World, too time consuming. Skipping!",
severity=Severity.WARNING,
)
return "Greeting failed"
logger.info(f"Greeting someone with the name: {name}")
return f"{greeting_phrase} {name}"
if __name__ == '__main__':
service.run()
Manager Configuration
For the manager to be able to send emails you must configure it with an email and an SMTP server. Please refer to this page on the manager configuration: Email notifications
SDK Syntax
By default, notify()
with not send any emails. For a notification to
become an email notification, you have to pass a list of email addresses to the emails
keyword argument of notify()
import logging
from daeploy import service
from daeploy.communication import notify, Severity
logger = logging.getLogger(__name__)
service.add_parameter("greeting_phrase", "Hello")
@service.entrypoint
def hello(name: str) -> str:
greeting_phrase = service.get_parameter("greeting_phrase")
if name == "World":
notify(
msg="Someone is trying to greet the World, too time consuming. Skipping!",
severity=Severity.WARNING,
emails=["your@email.com"],
)
return "Greeting failed"
logger.info(f"Greeting someone with the name: {name}")
return f"{greeting_phrase} {name}"
if __name__ == '__main__':
service.run()
To make the email recipients dynamically changeable, we can use this in conjunction with
add_parameter()
like so
import logging
from daeploy import service
from daeploy.communication import notify, Severity
logger = logging.getLogger(__name__)
service.add_parameter("greeting_phrase", "Hello")
service.add_parameter("emails", ["your@email.com"])
@service.entrypoint
def hello(name: str) -> str:
greeting_phrase = service.get_parameter("greeting_phrase")
emails = service.get_parameter("emails")
if name == "World":
notify(
msg="Someone is trying to greet the World, too time consuming. Skipping!",
severity=Severity.WARNING,
emails=emails,
)
return "Greeting failed"
logger.info(f"Greeting someone with the name: {name}")
return f"{greeting_phrase} {name}"
if __name__ == '__main__':
service.run()
This way, email addresses can be added and removed. You could of course use different emails for different notifications, so different stakeholders get notified of different things.