def test_coordinate_last(mocker): as_of = dt.datetime(2019, 1, 2, 1, 10) data = { 'responses': [{ 'data': [{ 'mktType': 'Prime', 'mktAsset': '335320934', 'mktQuotingStyle': 'price', 'price': 1.0141, 'time': '2019-01-20T01:08:00Z' }] }, { 'data': [{ 'mktType': 'IR', 'mktAsset': 'USD', 'mktClass': 'Swap', 'mktPoint': ('2Y', ), 'mktQuotingStyle': 'ATMRate', 'ATMRate': 0.02592, 'time': '2019-01-20T01:09:45Z' }] }] } expected_result = pd.DataFrame( data={ 'time': ['2019-01-20T01:08:00Z', '2019-01-20T01:09:45Z'], 'mktType': ['Prime', 'IR'], 'mktAsset': ['335320934', 'USD'], 'mktClass': [None, 'Swap'], 'mktPoint': [None, ('2Y', )], 'mktQuotingStyle': ['price', None], 'value': [1.0141, 0.02592] }) # mock GsSession and data response mocker.patch.object(GsSession.__class__, 'default_value', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) GsSession.current._post = mocker.Mock(return_value=data) result = GsDataApi.coordinates_last(coordinates=test_coordinates, as_of=as_of, as_dataframe=True) assert result.equals(expected_result) GsSession.current._post.reset_mock() result_from_str = GsDataApi.coordinates_last( coordinates=test_str_coordinates, as_of=as_of, as_dataframe=True) assert result_from_str.equals(expected_result) GsSession.current._post.assert_called_once_with( '/data/coordinates/query/last', payload=MDAPIDataQuery(market_data_coordinates=test_coordinates, end_time=as_of, vendor=MarketDataVendor.Goldman_Sachs, format="MessagePack"))
def build_query( start: Optional[Union[dt.date, dt.datetime]] = None, end: Optional[Union[dt.date, dt.datetime]] = None, as_of: Optional[dt.datetime] = None, since: Optional[dt.datetime] = None, restrict_fields: bool = False, format: str = 'MessagePack', dates: List[dt.date] = None, **kwargs ): end_is_time = isinstance(end, dt.datetime) start_is_time = isinstance(start, dt.datetime) if kwargs.get('market_data_coordinates'): real_time = ((start is None or start_is_time) and (end is None or end_is_time)) query = MDAPIDataQuery( start_time=start if real_time else None, end_time=end if real_time else None, start_date=start if not real_time else None, end_date=end if not real_time else None, format=format, real_time=real_time, **kwargs ) else: if start_is_time and end is not None and not end_is_time: raise ValueError('If start is of type datetime, so must end be!') if isinstance(start, dt.date) and end is not None and not isinstance(end, dt.date): raise ValueError('If start is of type date, so must end be!') query = DataQuery( start_date=start if not start_is_time else None, start_time=start if start_is_time else None, end_date=end if not end_is_time else None, end_time=end if end_is_time else None, as_of_time=as_of, since=since, format=format, dates=dates ) query_properties = query.properties() query.where = dict() for field, value in kwargs.items(): snake_case_field = inflection.underscore(field) if snake_case_field in query_properties: setattr(query, snake_case_field, value) else: query.where[field] = value if getattr(query, 'fields', None) is not None: try: query.restrict_fields = restrict_fields except AttributeError as e: _logger.debug('unable to set restrict_fields', exc_info=e) return query
def test_coordinate_data_series(mocker): start = dt.datetime(2019, 1, 2, 1, 0) end = dt.datetime(2019, 1, 2, 1, 10) # mock GsSession and data response mocker.patch.object(GsSession.__class__, 'default_value', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) mocker.patch.object(GsSession.current, '_post', side_effect=[{'responses': [{'data': bond_data}]}, {'responses': [{'data': swap_data}]}, {'responses': [{'data': bond_data}, {'data': swap_data}]}, {'responses': [{'data': bond_data}, {'data': swap_data}]} ]) bond_expected_series = pd.Series(index=bond_expected_frame.index, data=bond_expected_frame.value.values) swap_expected_series = pd.Series(index=swap_expected_frame.index, data=swap_expected_frame.value.values) coord_data_result = GsDataApi.coordinates_data_series(coordinates=test_coordinates[0], start=start, end=end) assert_series_equal(coord_data_result, bond_expected_series) str_coord_data_result = GsDataApi.coordinates_data_series(coordinates=test_str_coordinates[1], start=start, end=end) assert_series_equal(str_coord_data_result, swap_expected_series) coords_data_result = GsDataApi.coordinates_data_series(coordinates=test_coordinates, start=start, end=end) assert len(coords_data_result) == 2 assert_series_equal(coords_data_result[0], bond_expected_series) assert_series_equal(coords_data_result[1], swap_expected_series) GsSession.current._post.reset_mock() str_coords_data_result = GsDataApi.coordinates_data_series(coordinates=test_str_coordinates, start=start, end=end) assert len(str_coords_data_result) == 2 assert_series_equal(str_coords_data_result[0], bond_expected_series) assert_series_equal(str_coords_data_result[1], swap_expected_series) GsSession.current._post.assert_called_with('/data/coordinates/query', payload=MDAPIDataQuery(market_data_coordinates=test_coordinates, start_time=start, end_time=end, vendor=MarketDataVendor.Goldman_Sachs, format="MessagePack"), request_headers={'Accept': 'application/msgpack'} )
def test_coordinates_data(mocker): start = dt.datetime(2019, 1, 2, 1, 0) end = dt.datetime(2019, 1, 2, 1, 10) # mock GsSession and data response mocker.patch.object(GsSession.__class__, 'default_value', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) mocker.patch.object(GsSession.current, '_post', side_effect=[{'responses': [{'data': bond_data}]}, {'responses': [{'data': swap_data}]}, {'responses': [{'data': bond_data}, {'data': swap_data}]}, {'responses': [{'data': bond_data}, {'data': swap_data}]} ]) coord_data_result = GsDataApi.coordinates_data(coordinates=test_coordinates[0], start=start, end=end) assert_frame_equal(coord_data_result, bond_expected_frame) str_coord_data_result = GsDataApi.coordinates_data(coordinates=test_str_coordinates[1], start=start, end=end) assert_frame_equal(str_coord_data_result, swap_expected_frame) coords_data_result = GsDataApi.coordinates_data(coordinates=test_coordinates, start=start, end=end, as_multiple_dataframes=True) assert len(coords_data_result) == 2 assert_frame_equal(coords_data_result[0], bond_expected_frame) assert_frame_equal(coords_data_result[1], swap_expected_frame) GsSession.current._post.reset_mock() str_coords_data_result = GsDataApi.coordinates_data(coordinates=test_str_coordinates, start=start, end=end, as_multiple_dataframes=True) assert len(str_coords_data_result) == 2 assert_frame_equal(str_coords_data_result[0], bond_expected_frame) assert_frame_equal(str_coords_data_result[1], swap_expected_frame) GsSession.current._post.assert_called_once_with('/data/coordinates/query', payload=MDAPIDataQuery(market_data_coordinates=test_coordinates, start_time=start, end_time=end, vendor=MarketDataVendor.Goldman_Sachs, format="MessagePack") )