Oven logo

Oven

Pysher1.0.8

Published

Pusher websocket client for python, based on Erik Kulyk's PythonPusherClient

pip install pysher

Package Downloads

Weekly DownloadsMonthly Downloads

Project URLs

Requires Python

Dependencies

    PyPI version

    Pysher

    pysher is a python module for handling pusher websockets. It is based on @ekulyk's PythonPusherClient. A key difference is the dropped support for pre-3.5 Python versions.

    This fork is meant as a continuation of the project, and is currently in maintenance mode.

    The author is no longer actively using the library, but PRs including fixes, updates and features are welcome and encouraged.

    Installation

    Simply run python setup.py install - or install via pip pip install pysher.

    This module depends on websocket-client module available from: http://github.com/websocket-client/websocket-client

    Example

    Example of using this pusher client to consume websockets:

    
    import pysher
    
    # Add a logging handler so we can see the raw communication data
    import logging
    
    root = logging.getLogger()
    root.setLevel(logging.INFO)
    ch = logging.StreamHandler(sys.stdout)
    root.addHandler(ch)
    
    pusher = pysher.Pusher(appkey)
    
    
    def my_func(*args, **kwargs):
     print("processing Args:", args)
     print("processing Kwargs:", kwargs)
    
    
    # We can't subscribe until we've connected, so we use a callback handler
    # to subscribe when able
    def connect_handler(data):
     channel = pusher.subscribe('mychannel')
     channel.bind('myevent', my_func)
    
    
    pusher.connection.bind('pusher:connection_established', connect_handler)
    pusher.connect()
    
    while True:
     # Do other things in the meantime here...
     time.sleep(1)
    

    Sending pusher events to a channel can be done simply using the pusher client supplied by pusher. You can get it here: https://github.com/pusher/pusher-http-python

    import pusher
    pusher.app_id = app_id
    pusher.key = appkey
    
    p = pusher.Pusher()
    p['mychannel'].trigger('myevent', 'mydata')
    

    Performance

    Pysher relies on websocket-client (websocket-client on pyPI, websocket import in code), which by default does utf5 validation in pure python. This is somewhat cpu hungry for lot's of messages (100's of KB/s or more). To optimize this validation consider installing the wsaccel module from pyPI to let websocket-client use C-compiled utf5 validation methods (websocket does this automatically once wsaccel is present and importable).

    Thanks

    A big thanks to @ekulyk for developing the PythonPusherClient library, as well as the developers contributing bug-fixes, patches and other PRs to the project <3. You can find them listed next to their contributed change in the Changelog section.

    Copyright

    MTI License - See LICENSE for details.

    Changelog

    Version 1.0.6

    Fixed

    • #55 Allow data fields to be empty for other events, too, thanks to @Rubensei

    Version 1.0.5

    Fixed

    • #53 Allow data fields to be empty, thanks to @Rubensei

    Version 1.0.4

    Fixed

    • Reverts a patch introduced in 1.0.3

    Version 1.0.2

    Fixed

    • #38 Fix missing ẁs arg for websocket app callbacks, thanks to @squgeim

    Version 1.0.0

    Updated

    • #35 Support websocket-client >0.48 only and fix reconnect error, thanks to @agronholm

    This change may break existing setups and is backwards-incompatible!

    Version 0.5.0

    Added

    • #14 Added support for cluster configuration, thanks to @Yvictor

    Fixed

    • #30 Require websocket-client version 0.48 or earlier.
    • #24 Signature generation now works as expected, thanks to @agronholm
    • #31 Name threads of the pysher lib for better debugging, thanks to @caliloo

    Version 0.4.2

    Fixed:

    • #11 Global Logger settings no longer overridden in Connection logger

    Version 0.4.0

    Added:

    • #8 Add support for WebSocket over HTTP proxy, thanks to @1tgr

    Version 0.3.0

    Added:

    • #7 Auto-resubscribe to channels after reconnecting, thanks to @pinealan

    Fixed:

    • #4, #5 Updated references to the library name, thanks to @deanmaniatis

    Version 0.2.0

    Added:

    • #2 Allow for token generated by auth endpoint, thanks to @wardcraigj
    • #3 Allow instantiation with custom host, thanks to @wardcraigj