Skip to main content

global exception handler with notification and timing features

Project description

exceptionalpy

features

  • exception handling decorator (ex)

  • timing decorator (ti)

  • exception handling and timing decorator (exti)

  • Handler

    • handle exceptions
      • print stacktrace
      • forward stacktrace to notifier
    • handle timing results of functions
      • forward to notifier
  • BaseNotifier

    • provide interface for extensions
  • HTTPNotifier

    • send stacktrace via POST to specified url
  • SMTPNotifier

    • send stacktrace via Mail to specified email addresses
  • Rescuer

    • Manager like interface for threads / processes
    • Capture exceptions

usage

import time
from exceptionalpy import ex, exceptionalpy_handler as handler

# lets be verbose
handler.verbose = True
# you can either just catch all exceptions with
handler.init()
# and then stop again with
handler.deinit()


# or you can decorate the functions of which you want the exceptions to be caught
@ex()
def i_will_throw():
  raise BaseException


# there is also a timing decorator that catches the exception
from exceptionalpy import exti


@exti()
def i_take_a_moment_to_throw():
  time.sleep(0.6)
  print("Heyyyyy")
  raise ArithmeticError


# if you still want to time your functions and 
# have the result be forwarded to the notifier
from exceptionalpy import ti


@ti()
def i_take_a_moment():
  time.sleep(0.4)
  print("Slow function here, hi")
  
  
i_take_a_moment()
# upon successful execution, if you set the handlers verbose option to True,
# you will see something like this
# i_take_a_moment completed in 400432710 ns | 400.43271 ms | 0.40043270999999997 s
# and that result will be jsonified and forwarded to the notifier

# before any exceptions happen, you can also attach a notifier
from exceptionalpy.HTTP import HTTPNotifier

handler.notifier = HTTPNotifier("https://my-server:1337/api/exceptional", "POST")

# or just use a completely different handler
from exceptionalpy.SMTP import SMTPSHandler

handler = SMTPSHandler(("127.0.0.1", 25),  # which SMTP server to use
                       "exceptionalpy@locahost",  # the sender address
                       "dev@localhost",  # the receiver address
                       "There was an exception in your program")  # the subject
#  nothing bad will happen if you don't call
handler.deinit()
# beforehand. you can do it, but it's a waste of cpu cycles.

i_will_throw()
print("I will still be printed")
i_take_a_moment_to_throw()
print("I get printed as well since the program does not exit")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exceptionalpy-0.3.tar.gz (4.9 kB view details)

Uploaded Source

File details

Details for the file exceptionalpy-0.3.tar.gz.

File metadata

  • Download URL: exceptionalpy-0.3.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for exceptionalpy-0.3.tar.gz
Algorithm Hash digest
SHA256 3fa691a450c60c65af5f3ec8edcc19e4afaa144d74a1858645fa1d5d416abe52
MD5 5d599632b2da6c29fb03a2634f0d5b07
BLAKE2b-256 59dbe02dc09ff767897d3bc7390a5ba56df5fcdbc563486b477504115ae8b4d4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page