aboutsummaryrefslogtreecommitdiffstats
path: root/python/bbg_helpers.py
blob: ea23cb3a4e7e642a82786518814b03cc2c08bab2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import blpapi
import sys
import pandas as pd

# Fill SessionOptions
def init_bbg_session(ipaddr, port=8184):
    sessionOptions = blpapi.SessionOptions()
    sessionOptions.setServerHost(ipaddr)
    sessionOptions.setServerPort(port)
    session = blpapi.Session(sessionOptions)

    # Start a Session
    if not session.start():
        print "Failed to start session."
        sys.exit(0)

    if not session.openService("//blp/refdata"):
        print "Failed to open //blp/refdata"
        sys.exit(0)
    return session

def retreive_data(session, securities, fields):
    refDataService = session.getService("//blp/refdata")
    request = refDataService.createRequest("ReferenceDataRequest")
    for security in securities:
        request.append("securities", security)
    for field in fields:
        request.append("fields", field)
    session.sendRequest(request)
    data = []
    try:
        # Process received events
        while(True):
            # We provide timeout to give the chance to Ctrl+C handling:
            ev = session.nextEvent(500)
            if ev.eventType() in [blpapi.Event.PARTIAL_RESPONSE, blpapi.Event.RESPONSE]:
                for msg in ev:
                    data.append(msg)
                # Response completely received, so we could exit
            if ev.eventType() == blpapi.Event.RESPONSE:
                break
    finally:
        # Stop the session
        session.stop()
    return data

def process_msgs(data, fields):
    newdata = []
    for msg in data:
        if msg.messageType() == blpapi.Name("ReferenceDataResponse"):
            securityDataArray = msg.getElement("securityData")
            for securityData in securityDataArray.values():
                securityName = securityData.getElementValue("security")
                fieldData = securityData.getElement("fieldData")
                row = {'security': securityName}
                for fieldName in fields:
                    try:
                        fieldValue = fieldData.getElementValue(fieldName)
                        row[fieldName] = fieldValue
                    except blpapi.NotFoundException:
                        row[fieldName] = None
                newdata.append(row)
    return pd.DataFrame.from_dict(newdata)