from cowboy_sdk import Actor, OWNER, callable_by, public, pure
from cowboy_sdk.routes import Access, get, post
from cowboy_sdk.std import mail
class Digest(Actor):
@callable_by(OWNER)
def add(self, payload):
email = mail.address(payload["email"])
mail.enroll(self.storage, email, override=payload.get("override", False))
...
def _message(self, email, body):
url = mail.link(self.storage, "canyon", email)
return {"to": email, "text": body + "\n\nUnsubscribe: " + url,
"headers": mail.headers(url)}
@public
@get("/unsubscribe/{token}", access=Access.PUBLIC)
@pure
def unsubscribe_page(self, request):
return mail.page(request)
@public
@post("/unsubscribe/{token}", access=Access.PUBLIC)
def unsubscribe_confirm(self, request):
email, response = mail.confirm(self.storage, request)
if email:
# Drop it from the actor's own list. Return True only when every
# message already queued for it is confirmed cancelled (or none was).
cancelled = self._remove(email)
response = mail.stopped(cancelled)
return response