Skip to main content
Join the official Python Developers Survey 2018 and win valuable prizes: Start the survey!

Provides an API that allows to interact with CDP applications

Project description

A simple python interface for the CDP Studio development platform that allows Python scripts to interact with CDP Applications - retrieve CDP Application structures and read-write object values. For more information about CDP Studio see https://cdpstudio.com/

The API makes heavy use of promise library for asynchronous operations. For more information see https://pypi.python.org/pypi/promise

Installation

$ pip install cdp-client

Usage

The example below shows how you subscribe to CDP signal value changes.

from cdp_client import cdp

def on_value_changed(value, timestamp):
    print(value)

def subscribe_to_value_changes(node):
    node.subscribe_to_value_changes(on_value_changed)

client = cdp.Client('127.0.0.1')
client.find_node('AppName.ComponentName.SignalName').then(subscribe_to_value_changes)
client.run_event_loop()

API

Before all examples, you need:

from cdp_client import cdp

Global API

Client(host, port, auto_reconnect)

  • Arguments

    host - String for hosts ip address

    port - Optional port number to connect to. If not specified default port 7689 is used.

    auto_reconnect - Optional argument to enable/disable automatic reconnect when connection is lost. Defaults to True if not specified.

  • Returns

    The connected client object.

  • Usage

    client = cdp.Client('127.0.0.1')
    

Instance Methods / Client

client.root_node()

Gets the application Node object of the connected application.

  • Returns

    Promise containing root Node object when fulfilled.

  • Usage

    client.root_node().then(on_success).catch(on_error)
    

client.find_node(path)

Searches for the node specified by full dot separated path. The requested node must reside in the application client was connected to. Root node is not considered part of the path.

  • Arguments

    path - Dot separated string to target node

  • Returns

    Promise containing requested Node object when fulfilled. Otherwise NotFoundError when rejected.

  • Usage

    client.find_node('AppName.ComponentName.SignalName').then(on_success).catch(on_error)
    

client.run_event_loop()

Runs the event loop that serves network communication layer for incoming/outgoing data. This is a blocking call that must be run for any communication to happen. The method can be cancelled by calling disconnect.

client.disconnect()

Stops the event loop and closes the connection to connected application. This method also releases the blocking run_event_loop call.

Instance Methods / Node

node.name()

  • Returns

    The name of the Node object. Names in a parent node are all unique.

node.path()

  • Returns

    A dot separated path of the Node object starting with application name.

node.parent()

  • Returns

    The parent Node object.

node.type()

  • Returns

    The type of the Node object returned as one of the cdp.NodeType values.

node.last_value()

  • Returns

    The last known value received by the Node object.

node.set_value(value, timestamp)

Sets a new value for the Node object. Timestamp will be ignored in current implementation.

  • Arguments

    value - New value

    timestamp - UTC time in nanoseconds since Epoch

node.is_read_only()

  • Returns

    False if nodes value cannot be set, otherwise True.

node.is_leaf()

  • Returns

    True if node doesn’t have any children, otherwise False.

node.child(name)

  • Arguments

    name - Child nodes name to search for

  • Returns

    Promise containing requested Node object when fulfilled.

  • Usage

    node.child('NodeName').then(on_success).catch(on_error)
    

node.children()

  • Returns

    Promise containing all children of this Node object when fulfilled.

  • Usage

    node.children().then(on_success).catch(on_error)
    

node.for_each_child(callback)

Loops through all children and calls callback function for each of them

  • Arguments

    callback - Function(node)

  • Returns

    Promise containing all children of this Node object when fulfilled.

  • Usage

    def on_callback(child):
        do something
    
    node.for_each_child(on_callback)
    

node.subscribe_to_structure_changes(callback)

Starts listening structure changes and passes the changes to provided callback funtion

  • Arguments

    callback - Function(added_nodes, removed_nodes) where added_nodes and removed_nodes is a list

  • Usage

    def on_change(added_nodes, removed_nodes):
        do something
    
    node.subscribe_to_structure_changes(on_change)
    

node.subscribe_to_value_changes(callback)

Starts listening value changes and passes the changes to provided callback function

  • Arguments

    callback - Function(value, timestamp)

  • Usage

    def on_change(value, timestamp):
        do something
    
    node.subscribe_to_value_changes(on_change)
    

node.unsubscribe_from_structure_changes(callback)

Stops listening previously subscribed structure changes

  • Arguments

    callback - Function(added_nodes, removed_nodes) where added_nodes and removed_nodes is a list

  • Usage

    def on_change(added_nodes, removed_nodes):
        do something
    
    node.unsubscribe_from_structure_changes(on_change)
    

node.unsubscribe_from_value_changes(callback)

Stops listening previously subscribed value changes

  • Arguments

    callback - Function(value, timestamp)

  • Usage

    def on_change(value, timestamp):
        do something
    
    node.unsubscribe_from_value_changes(on_change)
    

Tests

To run the test suite execute the following command in package root folder:

$ python setup.py test

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
cdp_client-1.1.0-py2-none-any.whl (19.4 kB) Copy SHA256 hash SHA256 Wheel py2 Aug 22, 2018
cdp-client-1.1.0.tar.gz (17.4 kB) Copy SHA256 hash SHA256 Source None Aug 22, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page