State of the World

AMPS State of the World (SOW) allows you to automatically keep and query the latest information about a topic on the AMPS server, without building a separate database. Using SOW lets you build impressively high-performance applications that provide rich experiences to users. The AMPS Python client lets you query SOW topics and subscribe to changes with ease.

Performing SOW Queries

To begin, we will look at a simple example of issuing a SOW query.

for message in client.sow("orders", "/symbol='ROL'"):
    if message.get_command() == AMPS.Message.Command.GroupBegin:
        print("--- Begin SOW Results ---")
    if message.get_command() == AMPS.Message.Command.SOW:
        print(message.get_data())
    if message.get_command() == AMPS.Message.Command.GroupEnd:
        print("--- End SOW Results ---")

In the example above, the Client.sow() convenience method is used to execute a SOW query on the orders topic, for all entries that have a symbol of 'ROL'.

As the query executes, messages containing the data of matching entries have a Command of value "sow" (provided as a constant value, AMPS.Message.Command.SOW), so as those arrive, we write them to the console.

As with subscribe, the sow command also provides an asynchronous mode, where you provide a message handler.

def on_message_handler(message):
    if message.get_command() == AMPS.Message.Command.GroupBegin:
        print("--- Begin SOW Results ---")
    if message.get_command() == AMPS.Message.Command.SOW:
        print(message.get_data())
    if message.get_command() == AMPS.Message.Command.GroupEnd:
        print("--- End SOW Results ---")

def execute_sow_query(client):
    return client.execute_async(             \
            AMPS.Command("sow")              \
                .set_topic("orders")         \
                .set_filter("/symbol='ROL'"),\
            on_message_handler)

execute_sow_query(client)

In the example above, the execute_sow_query() function invokes Client.execute_async() to initiate a SOW query on the orders topic, for all entries that have a symbol of 'ROL'.

As the query executes, the on_message_handler() function is invoked for each matching entry in the topic. Messages containing the data of matching entries have a Command of value sow, so as those arrive, we write them to the console.

Last updated