This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

A Python library to write Data Adapters and Metadata Adapters for Lightstreamer Server. The adapters will run in a separate process, communicating with the Server through the Adapter Remoting Infrastructure.

Use

Install the package:

$ pip install lightstreamer-adapter

Configure Lightstreamer

  1. Download and install Lightstreamer

  2. Go to the adapters folder of your Lightstreamer Server installation. Create a new folder to deploy the remote adapters in, let’s call it PythonAdapter

  3. Create an adapters.xml file inside the PythonAdapter folder and use the following contents (this is an example configuration, you can modify it to your liking by using the generic template, DOCS-SDKs/adapter_remoting_infrastructure/doc/adapter_conf_template/adapters.xml or DOCS-SDKs/adapter_remoting_infrastructure/doc/adapter_robust_conf_template/adapters.xml, as a reference):

    <?xml version="1.0"?>
    <adapters_conf id="PROXY_PYTHON">
       <metadata_provider>
          <adapter_class>ROBUST_PROXY_FOR_REMOTE_ADAPTER</adapter_class>
          <classloader>log-enabled</classloader>
          <param name="request_reply_port">8003</param>
          <param name="timeout">36000000</param>
       </metadata_provider>
       <data_provider>
          <adapter_class>ROBUST_PROXY_FOR_REMOTE_ADAPTER</adapter_class>
          <classloader>log-enabled</classloader>
          <param name="request_reply_port">8001</param>
          <param name="notify_port">8002</param>
          <param name="timeout">36000000</param>
       </data_provider>
    </adapters_conf>
    
  4. Take note of the ports configured in the adapters.xml file as those are needed to write the remote part of the adapters.

Write the Adapters

Create a new python module, let’s call it adapters.py, where we will put the minimal logic required to write a basic Adapter Set.

  1. Import the sever classes needed to setup the connection to the Lightstreamer server, and the adapter classes to be extended to write your own Remote Adapters:

    from lightstreamer_adapter.server import (DataProviderServer, MetadataProviderServer)
    from lightstreamer_adapter.interfaces.data import DataProvider
    from lightstreamer_adapter.interfaces.metadata import MetadataProvider
    
  2. Create a new Remote Data Adapter by subclassing the DataProvider abstract class:

    class MyDataAdapter(DataProvider):
        """This Remote Data Adapter sample class shows a simple implementation of
        the DataProvider abstract class."""
    
        def __init__(self):
            # Reference to the provided ItemEventListener instance
            self._listener = None
    
        def issnapshot_available(self, item_name):
            """Returns True if Snapshot information will be sent for the item_name
            item before the updates."""
            snapshot = False  # May be based on the item_name item
            return snapshot
    
        def set_listener(self, event_listener):
            """Caches the reference to the provided ItemEventListener instance."""
            self._listener = event_listener
    
        def subscribe(self, item_name):
            """Invoked to request data for an item. From now on you can start
            sending real time updates for item_name item, through invocations like
            the following:
    
            self._listener.update(item_name, {'field1': valField1,
                                              'field2': valField2}, False)
            """
    
        def unsubscribe(self, item_name):
            """Invoked to end a previous request of data for an item. From now on,
            you should stop sending updates for item_name item."""
    
  3. Create a new Remote Metadata Adapter by subclassing the MetadataProvider class, if the latter’s default behaviour does not meet your requirements, and override the methods for which you want to supply a custom implementation:

    class MyMetadataAdapter(MetadataProvider):
        """This Remote Metadata Adapter sample class shows a minimal custom
        implementation of the notify_user_message method.
        """
    
        def notify_user_message(self, user, session_id, message):
            """Invoked to forward a message received by a User"""
            print("Message {} arrived for user {} in the session {}"
                  .format(user, session_id, message))
    
  4. Run the adapters, by creating, configuring and starting the server class instances:

    if __name__ == "__main__":
        # The host of the Lightstreamer server, to be changed as required.
        LS_SERVER_HOST = 'localhost'
    
        # Creates a new MetadataProviderServer instance, passing a new
        # MyMetadataAdpater object and the remote address.
        metadata_provider_server = MetadataProviderServer(MyMetadataAdapter(),
                                                          (LS_SERVER_HOST, 8003))
    
        # Starts the server instance.
        metadata_provider_server.start()
    
        # Creates a new DataProviderServer instance, passing a new MyDataAdpater
        # object and the remote address
        data_provider_sever = DataProviderServer(MyDataAdapter(),
                                                 (LS_SERVER_HOST, 8001, 8002))
        # Starts the server instance.
        data_provider_sever.start()
    

Run

From the command line, execute:

$ python adapters.py

Connect a Client

var lsClient = new LightstreamerClient(LS_SERVER_HOST, "PROXY_PYTHON");
lsClient.connect();
// To be completed with other client side activities, like registration of subscriptions and handling of
// real time updates.
// ...

where LS_SERVER_HOST is the host of the Lightstreamer Server, and "PROXY_PYTHON" is the Adapter Set ID as specified in the adapters.xml file.

API Reference

API Reference is available at http://pythonhosted.org/lightstreamer_adapter.

You can generate it by executing the following command from the doc folder:

$ make html

The generated documentation will be available under the doc\_build\html folder.

Lightstreamer Compatibility Notes

Compatible with Adapter Remoting Infrastructure since 1.7

Release History

1.0.0.post1 (2016-11-22)

  • Finishing touches on the package documentation visible from the PyPi repository

1.0.0 (2016-11-22)

Improvements

  • Updated logging messages.

Bug Fixes

  • Fixed notification of End Of Snaphsot in case of not availability of the snapshot.
  • Fixed docstrings in modules lightstreamer_adapter/server.py and lightstreamer_adapter/subscription.py.
  • Fixed unit tests.

Lightstreamer Compatibility Notes

  • Compatible with Adapter Remoting Infrastructure since 1.7.

1.0.0b1 (2016-04-15)

Bug Fixes

  • Fixed docstrings.
  • Fixed typo in some Exceptions’ message.
  • Fixed unit tests.

Lightstreamer Compatibility Notes

  • Compatible with Adapter Remoting Infrastructure since 1.7.

1.0.0a2 (2016-04-08)

Bug Fixes

  • Fixed return values in lightstreamer_adapter.interfaces.metadata.MetadataProvider class.
  • Fixed default handling of I/O related errors.
  • Fixed docstrings in modules lightstreamer_adapter/data_protocol.py and lightstreamer_adapter/metadata_protocol.py.

Lightstreamer Compatibility Notes

  • Compatible with Adapter Remoting Infrastructure since 1.7.

1.0.0a1 (2016-04-08)

Initial release

Lightstreamer Compatibility Notes

  • Compatible with Adapter Remoting Infrastructure since 1.7.
Release History

Release History

1.0.0post1

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

1.0.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

1.0.0b1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

1.0.0a2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

1.0.0a1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
lightstreamer_adapter-1.0.0post1.zip (97.4 kB) Copy SHA256 Checksum SHA256 Source Nov 22, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting