diff --git a/qf_lib/data_providers/bloomberg/reference_data_provider.py b/qf_lib/data_providers/bloomberg/reference_data_provider.py index a421c6e5..9c072303 100644 --- a/qf_lib/data_providers/bloomberg/reference_data_provider.py +++ b/qf_lib/data_providers/bloomberg/reference_data_provider.py @@ -34,7 +34,7 @@ def __init__(self, session): self._session = session self.logger = qf_logger.getChild(self.__class__.__name__) - def get(self, tickers: Sequence[BloombergTicker], fields, override_name: str = None, override_value: Any = None): + def get(self, tickers: Sequence[BloombergTicker], fields, override_name: str = None, override_value: Any = None): ref_data_service = self._session.getService(REF_DATA_SERVICE_URI) request = ref_data_service.createRequest("ReferenceDataRequest") @@ -101,8 +101,10 @@ def _parse_value(field_data_array, field_name): value = field_element.getValueAsInteger() elif element_data_type is DataType.BOOL: value = field_element.getValueAsBool() - elif element_data_type in (DataType.DATETIME, DataType.TIME, DataType.DATE): + elif element_data_type in (DataType.DATETIME, DataType.DATE): value = to_datetime(field_element.getValueAsDatetime()) + elif element_data_type is DataType.TIME: + value = field_element.getValueAsDatetime() else: value = field_element.getValueAsString() except blpapi.exception.NotFoundException: diff --git a/qf_lib/tests/integration_tests/data_providers/bloomberg/test_bloomberg.py b/qf_lib/tests/integration_tests/data_providers/bloomberg/test_bloomberg.py index e9e4cf73..4cd503fe 100644 --- a/qf_lib/tests/integration_tests/data_providers/bloomberg/test_bloomberg.py +++ b/qf_lib/tests/integration_tests/data_providers/bloomberg/test_bloomberg.py @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - +import datetime import unittest import numpy as np @@ -290,6 +290,33 @@ def test_qf_dataarray_dtype_for_nan_volume(self): Frequency.DAILY) self.assertEqual(data_array.dtype, np.float64) + # =========================== Test Value Parser ==================================================== + + def test_get_string_values(self): + string_field = "NAME" + result = self.bbg_provider.get_current_values(self.SINGLE_TICKER, string_field) + self.assertIsInstance(result, str) + + def test_get_float_values(self): + float_field = "PX_LAST" + result = self.bbg_provider.get_current_values(self.SINGLE_TICKER, float_field) + self.assertIsInstance(result, float) + + def test_get_date_values(self): + date_field = "LAST_UPDATE" + result = self.bbg_provider.get_current_values(self.SINGLE_TICKER, date_field) + self.assertIsInstance(result, datetime.datetime) + + def test_get_time_values(self): + time_field = "VWAP_END_TIME" + result = self.bbg_provider.get_current_values(self.SINGLE_TICKER, time_field) + self.assertIsInstance(result, datetime.time) + + def test_get_none_values(self): + none_field = "BN_SURVEY_MEDIAN" + result = self.bbg_provider.get_current_values(self.SINGLE_TICKER, none_field) + self.assertIsNone(result) + if __name__ == '__main__': unittest.main()