1
0
mirror of https://github.com/huggingface/knockknock.git synced 2021-08-28 00:30:42 +03:00

add sms sender

This commit is contained in:
abhishekkrthakur
2019-09-15 13:11:32 +02:00
committed by Victor SANH
parent d6af72eeba
commit cadce197c4
10 changed files with 156 additions and 1 deletions

3
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# Default ignored files
/workspace.xml

View File

@@ -0,0 +1,16 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="3">
<item index="0" class="java.lang.String" itemvalue="yagmail" />
<item index="1" class="java.lang.String" itemvalue="keyring" />
<item index="2" class="java.lang.String" itemvalue="python-telegram-bot" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>

View File

@@ -0,0 +1,5 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" />
</settings>
</component>

11
.idea/knockknock.iml generated Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.7 (knockknock)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (knockknock)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/knockknock.iml" filepath="$PROJECT_DIR$/.idea/knockknock.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@@ -1,4 +1,5 @@
from knockknock.email_sender import email_sender
from knockknock.slack_sender import slack_sender
from knockknock.sms_sender import sms_sender
from knockknock.telegram_sender import telegram_sender
from knockknock.teams_sender import teams_sender

View File

@@ -1,7 +1,7 @@
import argparse
import subprocess
from knockknock import email_sender, slack_sender, telegram_sender, teams_sender
from knockknock import email_sender, slack_sender, telegram_sender, teams_sender, sms_sender
def main():
@@ -58,6 +58,22 @@ def main():
help="Optional user ids to notify, as comma seperated list.")
teams_parser.set_defaults(sender_func=teams_sender)
twilio_parser = subparsers.add_parser(
name="twilio", description="Send SMS using the Twilio API")
twilio_parser.add_argument(
"--account-sid", type=str, required=True,
help="The account sid to access your Twilio account.")
twilio_parser.add_argument(
"--auth-token", type=str, required=True,
help="The auth token to access your Twilio account.")
twilio_parser.add_argument(
"--recipient-number", type=str, required=True,
help="Phone number of the recipient")
twilio_parser.add_argument(
"--sender-number", type=str, required=True,
help="Phone number of the sender")
teams_parser.set_defaults(sender_func=sms_sender)
args, remaining_args = parser.parse_known_args()
args = vars(args)

82
knockknock/sms_sender.py Normal file
View File

@@ -0,0 +1,82 @@
import os
import datetime
import traceback
import functools
import socket
import twilio
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
def sms_sender(account_sid: str, auth_token: str, recipient_number: str, sender_number: str):
client = twilio.rest.Client(account_sid, auth_token)
def decorator_sender(func):
@functools.wraps(func)
def wrapper_sender(*args, **kwargs):
start_time = datetime.datetime.now()
host_name = socket.gethostname()
func_name = func.__name__
# Handling distributed training edge case.
# In PyTorch, the launch of `torch.distributed.launch` sets up a RANK environment variable for each process.
# This can be used to detect the master process.
# See https://github.com/pytorch/pytorch/blob/master/torch/distributed/launch.py#L211
# Except for errors, only the master process will send notifications.
if 'RANK' in os.environ:
master_process = (int(os.environ['RANK']) == 0)
host_name += ' - RANK: %s' % os.environ['RANK']
else:
master_process = True
if master_process:
contents = ['Your training has started 🎬',
'Machine name: %s' % host_name,
'Main call: %s' % func_name,
'Starting date: %s' % start_time.strftime(DATE_FORMAT)]
text = '\n'.join(contents)
client.messages.create(body=text, from_=sender_number, to=recipient_number)
try:
value = func(*args, **kwargs)
if master_process:
end_time = datetime.datetime.now()
elapsed_time = end_time - start_time
contents = ["Your training is complete 🎉",
'Machine name: %s' % host_name,
'Main call: %s' % func_name,
'Starting date: %s' % start_time.strftime(DATE_FORMAT),
'End date: %s' % end_time.strftime(DATE_FORMAT),
'Training duration: %s' % str(elapsed_time)]
try:
str_value = str(value)
contents.append('Main call returned value: %s'% str_value)
except:
contents.append('Main call returned value: %s'% "ERROR - Couldn't str the returned value.")
text = '\n'.join(contents)
client.messages.create(body=text, from_=sender_number, to=recipient_number)
return value
except Exception as ex:
end_time = datetime.datetime.now()
elapsed_time = end_time - start_time
contents = ["Your training has crashed ☠️",
'Machine name: %s' % host_name,
'Main call: %s' % func_name,
'Starting date: %s' % start_time.strftime(DATE_FORMAT),
'Crash date: %s' % end_time.strftime(DATE_FORMAT),
'Crashed training duration: %s\n\n' % str(elapsed_time),
"Here's the error:",
'%s\n\n' % ex,
"Traceback:",
'%s' % traceback.format_exc()]
text = '\n'.join(contents)
client.messages.create(body=text, from_=sender_number, to=recipient_number)
raise ex
return wrapper_sender
return decorator_sender