Mini Shell
"""
Module for notifications via Twilio
.. versionadded:: 2014.7.0
:depends: - twilio python module
:configuration: Configure this module by specifying the name of a configuration
profile in the minion config, minion pillar, or master config (with :conf_master:`pillar_opts` set to True).
.. warning: Setting pillar_opts to True in the master config may be considered
unsafe as it copies the master config to pillar
For example:
.. code-block:: yaml
my-twilio-account:
twilio.account_sid: AC32a3c83990934481addd5ce1659f04d2
twilio.auth_token: mytoken
"""
import logging
HAS_LIBS = False
try:
import twilio
# Grab version, ensure elements are ints
twilio_version = tuple(int(x) for x in twilio.__version_info__)
TWILIO_LT_5 = False
if twilio_version > (6,):
from twilio.base.exceptions import TwilioRestException
from twilio.rest import Client as TwilioRestClient
elif twilio_version > (5,):
# pylint: disable=no-name-in-module
from twilio.rest import Client as TwilioRestClient
from twilio.rest import TwilioException as TwilioRestException
# pylint: enable=no-name-in-module
else:
TWILIO_LT_5 = True
from twilio import TwilioRestException # pylint: disable=no-name-in-module
from twilio.rest import TwilioRestClient # pylint: disable=no-name-in-module
HAS_LIBS = True
except ImportError:
pass
log = logging.getLogger(__name__)
__virtualname__ = "twilio"
def __virtual__():
"""
Only load this module if twilio is installed on this minion.
"""
if HAS_LIBS:
return __virtualname__
return (
False,
"The twilio_notify execution module failed to load: the twilio python library"
" is not installed.",
)
def _get_twilio(profile):
"""
Return the twilio connection
"""
creds = __salt__["config.option"](profile)
client = TwilioRestClient(
creds.get("twilio.account_sid"),
creds.get("twilio.auth_token"),
)
return client
def send_sms(profile, body, to, from_):
"""
Send an sms
CLI Example:
twilio.send_sms my-twilio-account 'Test sms' '+18019999999' '+18011111111'
"""
ret = {}
ret["message"] = {}
ret["message"]["sid"] = None
client = _get_twilio(profile)
try:
if TWILIO_LT_5:
message = client.sms.messages.create(body=body, to=to, from_=from_)
else:
message = client.messages.create(body=body, to=to, from_=from_)
except TwilioRestException as exc:
ret["_error"] = {}
ret["_error"]["code"] = exc.code
ret["_error"]["msg"] = exc.msg
ret["_error"]["status"] = exc.status
log.debug("Could not send sms. Error: %s", ret)
return ret
ret["message"] = {}
ret["message"]["sid"] = message.sid
ret["message"]["price"] = message.price
ret["message"]["price_unit"] = message.price_unit
ret["message"]["status"] = message.status
ret["message"]["num_segments"] = message.num_segments
ret["message"]["body"] = message.body
ret["message"]["date_sent"] = str(message.date_sent)
ret["message"]["date_created"] = str(message.date_created)
log.info(ret)
return ret
Zerion Mini Shell 1.0