diff options
Diffstat (limited to 'python/bbg_helpers.py')
| -rw-r--r-- | python/bbg_helpers.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py new file mode 100644 index 00000000..ea23cb3a --- /dev/null +++ b/python/bbg_helpers.py @@ -0,0 +1,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) |
