bpsmith / tia

Toolkit for integration and analysis
BSD 3-Clause "New" or "Revised" License
404 stars 165 forks source link

INSIDER_HOLDING field fails to download. #6

Closed benlester closed 8 years ago

benlester commented 8 years ago

LocalTerminal.get_reference_data() fails to download the INSIDER_HOLDING field.

For example:

from tia.bbg import LocalTerminal
insider_holdings = LocalTerminal.get_reference_data('AAPL US Equity', 'INSIDER_HOLDING')

results in:

---------------------------------------------------------------------------
IndexOutOfRangeException                  Traceback (most recent call last)
<ipython-input-15-97d8edcd6c8a> in <module>()
----> 1 insider_holdings = LocalTerminal.get_reference_data('AAPL US Equity', 'INSIDER_HOLDING', ignore_field_error=True
)

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in get_reference_data(self, sids, flds, ignore_security_
error, ignore_field_error, **overrides)
    671         req = ReferenceDataRequest(sids, flds, ignore_security_error=ignore_security_error,
    672                                    ignore_field_error=ignore_field_error, **overrides)
--> 673         return self.execute(req)
    674
    675     def get_intraday_tick(self, sids, events=['TRADE'], start=None, end=None, include_condition_codes=None,

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in execute(self, request)
    649                 evt = session.nextEvent(500)
    650                 if evt.eventType() == blpapi.Event.RESPONSE:
--> 651                     request.on_event(evt, is_final=True)
    652                     break
    653                 elif evt.eventType() == blpapi.Event.PARTIAL_RESPONSE:

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in on_event(self, evt, is_final)
    454                     self.security_errors.append(error)
    455                 else:
--> 456                     self.on_security_node(node)
    457
    458

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in on_security_node(self, node)
    441         sid = XmlHelper.get_child_value(node, 'security')
    442         farr = node.getElement('fieldData')
--> 443         fdata = XmlHelper.get_child_values(farr, self.fields)
    444         assert len(fdata) == len(self.fields), 'field length must match data length'
    445         self.response.on_security_data(sid, dict(zip(self.fields, fdata)))

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in get_child_values(parent, names)
    116         for name in names:
    117             if parent.hasElement(name):
--> 118                 vals.append(XmlHelper.as_value(parent.getElement(name)))
    119             else:
    120                 vals.append(np.nan)

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in as_value(ele)
     95             raise NotImplementedError('CHOICE data type needs implemented')
     96         elif dtype == 15:  # SEQUENCE
---> 97             return XmlHelper.get_sequence_value(ele)
     98         else:
     99             raise NotImplementedError('Unexpected data type %s. Check documentation' % dtype)

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in get_sequence_value(node)
     61             for cidx in range(row.numElements()):
     62                 col = row.getElement(cidx)
---> 63                 data[str(col.name())].append(XmlHelper.as_value(col))
     64         return pd.DataFrame(data, columns=cols)
     65

C:\Users\Bloomberg\Anaconda\lib\site-packages\tia\bbg\v3api.pyc in as_value(ele)
     81             return str(val)
     82         elif dtype == 10:  # Date
---> 83             v = ele.getValue()
     84             return datetime(year=v.year, month=v.month, day=v.day) if v else np.nan
     85         elif dtype == 11:  # Time

C:\Users\Bloomberg\AppData\Roaming\Python\Python27\site-packages\blpapi\element.pyc in getValue(self, index)
    486         valueGetter = _ELEMENT_VALUE_GETTER.get(datatype,
    487                                                 Element.getValueAsString)
--> 488         return valueGetter(self, index)
    489
    490     def values(self):

C:\Users\Bloomberg\AppData\Roaming\Python\Python27\site-packages\blpapi\element.pyc in getValueAsDatetime(self, index)
    417         self.__assertIsValid()
    418         res = internals.blpapi_Element_getValueAsDatetime(self.__handle, index)
--> 419         _ExceptionUtil.raiseOnError(res[0])
    420         return _DatetimeUtil.convertToNative(res[1])
    421

C:\Users\Bloomberg\AppData\Roaming\Python\Python27\site-packages\blpapi\exception.pyc in raiseOnError(errorCode, descrip
tion)
     98     def raiseOnError(errorCode, description=None):
     99         if errorCode:
--> 100             _ExceptionUtil.raiseException(errorCode, description)
    101
    102 __copyright__ = """

C:\Users\Bloomberg\AppData\Roaming\Python\Python27\site-packages\blpapi\exception.pyc in raiseException(errorCode, descr
iption)
     93                 description = "Unknown"
     94         errorClass = _ExceptionUtil.__getErrorClass(errorCode)
---> 95         raise errorClass(description, errorCode)
     96
     97     @staticmethod

IndexOutOfRangeException: Attempt to access an empty scalar element 'Filing Date' (0x0005000b)

Any ideas?

bpsmith commented 8 years ago

This issue was fixed a while back but I never performed a release. I have released 0.3 to pypi now or replace tia/bbg/v3api.py with the latest version.