Package FuncNotify
FuncNotify ⏰
Get notified when your code finishes/crashes with one line of code
Documentation | GitHub | PyPI
Installation:
$ pip install FuncNotify
Guide:
"""Add more as projects grow!"""
from FuncNotify import time_func, time_text, time_slack
@time_func(NotifyMethod="Text", use_env=True, env_path".env", update_env=True, phone="8001234567")
def wait_func():
"""This function will use the text method and pull env varaibles from
`.env`, it will update the already determined env variables too!"""
do_something()
@time_Text()
def wait_func2():
"""All parameters are optional and each method has a personal decorator, even the
function call is optional see below"""
do_something()
@time_Text
def wait_func3():
"""Auto pull from `.env` is enabled by default with Method specific time decorators"""
do_something()
@time_func(multi_target=[{...}, {...}], multi_env=["1.env", "2.env"])
def wait_func4():
"""Send to multiple sources either through specifying multiple dictionaries of kwargs
or multiple .env paths, or both in pairs!"""
do_something()
custom_message("HELLO WORLD", NotifyMethod="Text", multi_target=[{...}, {...}], multi_env=["1.env", "2.env"])
"""Custom messaging is here, pass the same arguments in as time_func and you
can mass send messages in many methods"""
if __name__ == "__main__":
"""You don't even need to use the timer as a decorator, use it as a normal function
This is how we do testing 😊 """
time_func(function=wait_func5)(*func5_args, **func5_kwargs)
CLI arguments:
$ FuncNotify [command here] --kwargs NotifyMethod=Text phone=8001234567
$ FuncNotify go run main.go --kwargs NotifyMethod=Email multi_env=1.env multi_env=2.env
$ FuncNotify sleep 5 --kwargs NotifyMethod=Text multi_target="[{'NotifyMethod': 'Print', 'verbose': True}, {'phone': '8001234567'}]"
Anything after --kwargs
with an equal sign will automatically be parsesd as a key word argument for FuncNotify. The remainder without =
will be executed. Wrap lists, dicts, and tuples in "
so they get read properly. This allows you to time any script.
Demo:
$ pip install FuncNotify
$ FuncNotify sleep 5 --kwargs NotifyMethod=Print
To expand, create a .env
file and a twilio account according to these instructions (it's free!). Instead of hard coding variables or exporting them to your env, just put them in the twilio alerts section of your .env
, skip installing twilio as it's already installed. Then try:
$ FuncNotify sleep 5 --kwargs NotifyMethod=Text
Contributing:
Click above for instructions on how to contribute
Supported Methods:
Platform |
---|
Console Print |
Email Twilio |
Email Yagmail |
Text |
Slack |
Microsoft Teams |
Create following .env in CWD
.env
Expand source code
"""
.. include:: ../README.md
""" # For pdoc3
from os.path import dirname, basename, isfile, join
import glob
import importlib
module_list = glob.glob(join(dirname(__file__), "*Method.py"))
MODULES = [basename(f)[:-3] for f in module_list if isfile(f)]
def _import_all(modules: list):
"""Dynamic import of a module, similar to `from package import *` but specifically for this package
Args:
modules (list[str]): A file name in `FuncNotify` directory/package
"""
for mod in modules:
try:
module = importlib.import_module(f'FuncNotify.{mod}')
globals().update({k: v for (k, v) in module.__dict__.items() if not k.startswith('_')})
except Exception as ex:
print(f"Unable to import {mod} due to the following error\n " \
f"[ERROR] Exception: {ex}")
_import_all(MODULES)
from FuncNotify.NotifyDecorators import *
from FuncNotify.NotifyMethods import *
NotifyTypes=NotifyMethods.get_cls_registry()
import pkg_resources # part of setuptools
__version__ = pkg_resources.require("FuncNotify")[0].version
__pdoc__={'FuncNotify.__main__': True}
"""Used only for pdoc documentation to inclue main for CLI documentation"""
Sub-modules
FuncNotify.EmailMethod
-
Send messages with sendgrid API (non-gmail) …
FuncNotify.NotifyDecorators
-
Main decoratory for FuncNotify with all env variables …
FuncNotify.NotifyMethods
-
Parent class for all of FuncNotify useability All NotifyMethods are child of this and use send_start_message, send_end_message, and …
FuncNotify.PrintMethod
-
Print messages to console …
FuncNotify.SlackMethod
-
Sends messages to a given slack server, currently only notifies a user as slack channel support not currently supported …
FuncNotify.TeamsMethod
-
Sends a message to any teams channel via the requests library …
FuncNotify.TextMethod
-
Sends text messages to users via a purchased number and twilio …
FuncNotify.__main__
-
Call this module
FuncNotify
to be able to time scripts as well as functions …