Metadata-Version: 2.1
Name: more.emit
Version: 0.2
Summary: Pymitter integration in Morepath
Home-page: https://github.com/morepath/more.emit
Author: Henri Hulski
Author-email: henri.hulski@gazeta.pl
License: BSD
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``:
        
        .. code-block:: console
        
          $ pip install -U more.emit
        
        Extend your App class from EmitApp:
        
        .. code-block:: python
        
            from more.pony import EmitApp
        
            class App(EmitApp):
                pass
        
        Now you can define signals:
        
        .. code-block:: python
        
          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:
        
        .. code-block:: python
        
          @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
        
        .. code-block:: python
        
          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
        
        .. code-block:: python
        
          @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)
        
        
        .. _pymitter: https://github.com/riga/pymitter
        .. _EventEmitter 2: https://github.com/asyncly/EventEmitter2
        .. _more.pony: https://github.com/morepath/more.pony
        
        
        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.
        
Keywords: morepath pymitter EventEmitter
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: PyPy
Provides-Extra: test
Provides-Extra: coverage
Provides-Extra: pep8
