Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
pyobservable is a minimalist event system for python. It provides you an easy-to-use interface to trigger arbitrary functions when specific events occur.
from observable import Observable
obs = Observable()
@obs.on("error")
def error_handler(message):
# do some fancy error handling
logging.error(f"An error occured: {message}")
...
def do_time_travel():
# do some time traveling
...
if year != 1291:
obs.trigger("error", "Time travel to 1291 didn't work")
Note: We are Python 3 only! Only Python Versions >= 3.5 are supported. Use v0.3.2 for older Python Versions.
Use a pip
to install it from PyPI:
pip install observable
After completion you can start using observable
:
from observable import Observable
obs = Observable()
on
: Register event handler with on
There are two ways to register a function to an event.
The first way is to register the event with a decorator like this:
@obs.on("error")
def error_func(message):
print("Error: %s" % message)
The second way is to register it with a method call:
def error_func(message):
print("Error: %s" % message)
obs.on("error", error_func)
once
: Register event handler with once
once
works like on
, but once the event handler is triggered it will be removed and cannot be triggered again.
trigger
: trigger eventYou can trigger a registered event with the trigger
method:
obs.trigger("error", "This is my error message")
If no handler for the event error
could be found an Observable.NoHandlerFound
-Exception will be raised.
off
: remove handler and eventsRemove a handler from a specified event:
obs.off("error", error_func)
obs.off("error", [error_func, second_error_func])
Remove all handlers from a specified event:
obs.off("error")
Clear all events:
obs.off()
get_all_handlers
, get_handlers
and is_registered
: Check which handlers are registeredImagine you registered the following handlers:
@obs.on("success")
def success_func():
print("Success!")
@obs.on("error")
def error_func(message):
print("Error: %s" % message)
Then you can do the following to inspect the registered handlers:
>>> obs.get_all_handlers()
{'success': [<function success_func at 0x7f7f32d0a1e0>], 'error': [<function error_func at 0x7f7f32d0a268>]}
>>> obs.get_handlers("success")
[<function success_func at 0x7f7f32d0a1e0>]
>>> obs.get_handlers("other_event")
[]
This project is published under MIT.
A Timo Furrer project.
- :tada: -
FAQs
minimalist event system
We found that observable demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.