Pymitter integration in Morepath
Project description
more.emit: pymitter integration in Morepath
This package provides Morepath integration for pymitter.
pymitter is a Python port of the extended Node.js EventEmitter 2 approach providing namespaces, wildcards and TTL.
Quick start
Install more.emit:
$ pip install -U more.emit
Extend your App class from EmitApp:
from more.pony import EmitApp
class App(EmitApp):
pass
Now you can define signals:
from .app import App
@App.signal.on('myevent')
def handler1(arg, request):
print(request)
print('handler1 called with', arg)
@App.signal.on('myevent')
def handler2(arg, request):
print('handler2 called with', arg)
You can emit the signals for example from the view:
@App.json(model=Root)
def root_view(self, request):
request.app.signal.emit('myevent', 'foo', request)
return {
'name': 'Root'
}
Example
An example for emitting signals on user creation and user update for sending a confirmation email. This example uses more.pony.
signal.py
from .app import App
@App.signal.on('user.email_updated')
def send_confirmation_email(user, request):
mailer = request.app.service(name='mailer')
mailer.send_confirmation_email(user, request)
view.py
@App.json(model=UserCollection, request_method='POST')
def user_collection_add(self, request):
email = request.json['email']
if not User.exists(email=email):
user = self.add(email=email)
@request.after
def after(response):
request.app.signal.emit('user.email_updated', user, request)
response.status = 201
else:
@request.after
def after(response):
response.status = 409
return {
'validationError': 'Email already exists'
}
@App.json(model=User, request_method='PUT')
def user_update(self, request):
if 'email' in request.json and User.exists(email=request.json['email']):
@request.after
def after(response):
response.status = 409
return {
'validationError': 'Email already exists'
}
else:
self.update(request.json)
if 'email' in request.json:
self.email_confirmed = False
@request.after
def after(response):
request.app.signal.emit('user.email_updated', self, request)
CHANGES
0.2 (2020-04-26)
Removed: Removed support for Python 2.
You have to upgrade to Python 3 if you want to use this version.
Added support for Python 3.6, 3.7 and 3.8 and PyPy 3.6.
Make Python 3.7 the default testing environment.
Add integration for the Black code formatter.
0.1 (2017-04-22)
Initial public release.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for more.emit-0.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 516bb67b9d698ff4f71e4b1381cef1671502390ed5a04dde8346d34eab4b8ca9 |
|
MD5 | c884c9ab224448ad0e5dbc06c3611e99 |
|
BLAKE2b-256 | dc8a3b181c47809f988f8d8a5bdee7a35d4b5bc4e93568c063d58c6c69a66723 |