Refinitiv Data Library for Python

Callback functions

The on_state and on_event session methods take callback functions.
In general, a callback function is a function passed into another function as an argument, which is then invoked to complete a routine or action.

In this case, on_state and on_event methods allow function to be passed as argument.

The main purpose of callbacks is to catch a change of state or an event, depending on which method calls it, and then do something according to the event or state that is caught.

For on_state, the callback function definition should follow the arguments in the order described below:

def on_state_callback(session, state_code, state_msg):
    print(f"Session State:{state_code} | {state_msg}")

For on_event, the order is:

def on_event_callback(session, event_code, event_msg):
    print(f"Session event:{event_code} | {event_msg}")

As mentioned before, the main purpose is to catch session events or states changes, but you are able to use callbacks for whatever you want.

For on_event, let us take a look at the following code:

import os

import refinitiv.data as rd

# session creation
DESKTOP_APP_KEY = os.getenv("DESKTOP_APP_KEY")
session = rd.session.desktop.Definition(app_key=DESKTOP_APP_KEY).get_session()
rd.session.set_default(session)


# callback definition
def check_state(state, message, session):
    print(f"State: {state}")
    print(f"Message: {message}")
    print("\n")


# add callback to session
session.on_event(check_state)

# open session
session.open()

# request something
response = rd.content.fundamental_and_reference.Definition(
    universe=["IBM"],
    fields=["TR.RevenueMean", "TR.Revenue.date"],
    row_headers="date"
).get_data()
print(response.data.df.to_string())

# close session
session.close()

In this case, the callback function catches all states during the code execution:

# Session is opening
State: OpenState.Pending
Message: Session opening in progress

# Authentication passed, session is opening, session status changed respectively
State: OpenState.Opened
Message: Session is opened

# Request to fundamental and reference returned data.
# Note: it isn't caught by the callback function, it's a separate print response.
IBM        Revenue - Mean       Date
Date                                
2022-07-27    60031219190        NaT
2021-12-31                2021-12-31

# Session successfully closed
State: OpenState.Closed
Message: Session is closed

Catching events is similar:

import os

import refinitiv.data as rd

# session creation
DESKTOP_APP_KEY = os.getenv("DESKTOP_APP_KEY")
session = rd.session.desktop.Definition(app_key=DESKTOP_APP_KEY).get_session()
rd.session.set_default(session)


# callback definition
def check_event(event, message, session):
    print(f"Event: {event}")
    print(f"Message: {message}")
    print("\n")


# add callbacks to session
session.on_event(check_event)

# open session
session.open()

# define stream
stream = rd.open_pricing_stream(
    universe=['GBP=', 'EUR='],
    fields=['BID', 'ASK'],
)

# open and then close stream to catch session events
stream.open()
stream.close()

# close session
session.close()

In this example, the callback function catches all event changes during code execution:

# stream is connecting
Event: EventCode.StreamConnecting
Message: None

# stream successfully connected
Event: EventCode.StreamConnected
Message: None