diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/bbg_helpers.py | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py index 92d5a57c..818cee60 100644 --- a/python/bbg_helpers.py +++ b/python/bbg_helpers.py @@ -50,20 +50,36 @@ def retreive_data(session, securities, fields, settle_date=None): session.stop() return data -def process_msgs(data, fields): - newdata = [] +def process_msgs(data): + # return a dict whose keys are the bloomberg securities + # and whose values are a dict of bloomberg fields -> values + # the values can either be a scalar or a dataframe + newdata = {} for msg in data: if msg.messageType() == blpapi.Name("ReferenceDataResponse"): securityDataArray = msg.getElement("securityData") for securityData in securityDataArray.values(): securityName = securityData.getElementValue("security") + row = {} 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) + for field in fieldData.elements(): + if not field.isValid(): + print "Invalid field: {0}".format(str(field)) + elif field.isArray(): + df = pd.DataFrame.from_dict( + [{str(e.name()): e.getValue() for e in f.elements()} \ + for f in field.values()]) + row[str(field.name())] = df.convert_objects(convert_dates='coerce') #to convert dates to timestamps + else: + row[str(field.name())] = field.getValue() + newdata[securityName] = row + return newdata + + +if __name__=="__main__": + session = init_bbg_session('192.168.0.4', 8194) + fields = ['HIST_PRINCIPAL_DISTRIBUTED', 'HIST_LOSSES', 'MTG_HIST_FACT', + 'MTG_HIST_CPN', 'HIST_INTEREST_DISTRIBUTED'] + sec = ['45254NMV6 Mtge'] + data = retreive_data(session, sec, fields) + test = process_msgs(data) |
