Initial commit: Email alerts application
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import sys
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class TwilioException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class TwilioRestException(TwilioException):
|
||||
"""A generic 400 or 500 level exception from the Twilio API
|
||||
|
||||
:param int status: the HTTP status that was returned for the exception
|
||||
:param str uri: The URI that caused the exception
|
||||
:param str msg: A human-readable message for the error
|
||||
:param int|None code: A Twilio-specific error code for the error. This is
|
||||
not available for all errors.
|
||||
:param method: The HTTP method used to make the request
|
||||
:param details: Additional error details returned for the exception
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
status: int,
|
||||
uri: str,
|
||||
msg: str = "",
|
||||
code: Optional[int] = None,
|
||||
method: str = "GET",
|
||||
details: Optional[object] = None,
|
||||
):
|
||||
self.uri = uri
|
||||
self.status = status
|
||||
self.msg = msg
|
||||
self.code = code
|
||||
self.method = method
|
||||
self.details = details
|
||||
|
||||
def __str__(self) -> str:
|
||||
"""Try to pretty-print the exception, if this is going on screen."""
|
||||
|
||||
def red(words: str) -> str:
|
||||
return "\033[31m\033[49m%s\033[0m" % words
|
||||
|
||||
def white(words: str) -> str:
|
||||
return "\033[37m\033[49m%s\033[0m" % words
|
||||
|
||||
def blue(words: str) -> str:
|
||||
return "\033[34m\033[49m%s\033[0m" % words
|
||||
|
||||
def teal(words: str) -> str:
|
||||
return "\033[36m\033[49m%s\033[0m" % words
|
||||
|
||||
def get_uri(code: int) -> str:
|
||||
return "https://www.twilio.com/docs/errors/{0}".format(code)
|
||||
|
||||
# If it makes sense to print a human readable error message, try to
|
||||
# do it. The one problem is that someone might catch this error and
|
||||
# try to display the message from it to an end user.
|
||||
if hasattr(sys.stderr, "isatty") and sys.stderr.isatty():
|
||||
msg = (
|
||||
"\n{red_error} {request_was}\n\n{http_line}"
|
||||
"\n\n{twilio_returned}\n\n{message}\n".format(
|
||||
red_error=red("HTTP Error"),
|
||||
request_was=white("Your request was:"),
|
||||
http_line=teal("%s %s" % (self.method, self.uri)),
|
||||
twilio_returned=white("Twilio returned the following information:"),
|
||||
message=blue(str(self.msg)),
|
||||
)
|
||||
)
|
||||
if self.code:
|
||||
msg = "".join(
|
||||
[
|
||||
msg,
|
||||
"\n{more_info}\n\n{uri}\n\n".format(
|
||||
more_info=white("More information may be available here:"),
|
||||
uri=blue(get_uri(self.code)),
|
||||
),
|
||||
]
|
||||
)
|
||||
return msg
|
||||
else:
|
||||
return "HTTP {0} error: {1}".format(self.status, self.msg)
|
||||
Reference in New Issue
Block a user