Skip to content

harshit158/notipi

Repository files navigation

PyPI - Downloads PyPI - Version

Logo

Introduction

notipi is a python library to send custom notifications on Telegram and MacOS

Use cases include:

  • Getting notified whenever a long running scripts finishes execution
  • Knowing whenever a milestone is reached during ML / DL trainings

Installation

$ pip install notipi 

Setup

If you wish to use just the MacOS notifications and not Telegram - you don't need anymore steps and start using the library right away. Refer the Usage examples below.

To use Telegram - you would be needing two environment variables: BOT_API_TOKEN and CHAT_ID

To get BOT_API_TOKEN:

  • In the telegram app, initiate conversation with @BotFather (you can also click here).
  • Send /newbot as the message to @BotFather and provide a new name and username for your bot account as per the instructions.
  • @BotFather will reply with a unique api token - this is your BOT_API_TOKEN
    (Note: Detailed instructions to create a new bot can be found at Telegram website)

Logo

To get CHAT_ID:

  • Once a new bot is created, send a dummy message to the bot via Telegram app so that your chat gets assigned an ID.
  • Run the following script with your BOT_API_TOKEN to get your CHAT_ID
from notipi.notipi import get_chat_id
get_chat_id(BOT_API_TOKEN)

This will give the following output:

Your CHAT ID: 1234567890

Once the BOT_API_TOKEN and CHAT_ID are obtained, set the environment variables

export BOT_API_TOKEN=<bot_api_token>
export CHAT_ID=<chat_id>

Usage

Once the required environment variables are in place, you can use notipi in the following ways to send messages via Telegram.
(NOTE: If the environment variables are not set - the messages will be sent only via MacOS notifications by default)

(1) As a regular function

from notipi.notipi import notify

def func():
    for i in range(1000):
        if i%100==0:
            notify(f"Currently at {i}")

(2) As a decorator

from notipi.notipi import notify

@notify
def func():
    for i in range(1000):
        pass

When func() is invoked - you will be notified once it finishes execution

NOTE: Both Approaches (1) and (2) are compatible inside Jupyter Notebook as well

Once func3() is invoked - you will receive two notifications - first one after func1() is processed and second one after func2() is executed.

(3) As a command line tool

$ noticli -c python example.py

A notification will be sent once example.py finishes execution

Roadmap

  • Extend compatibility to Windows platforms