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
- handle exceptions
-
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)
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3fa691a450c60c65af5f3ec8edcc19e4afaa144d74a1858645fa1d5d416abe52 |
|
MD5 | 5d599632b2da6c29fb03a2634f0d5b07 |
|
BLAKE2b-256 | 59dbe02dc09ff767897d3bc7390a5ba56df5fcdbc563486b477504115ae8b4d4 |