def __create_query(cls, fields: Union[List, Tuple] = None, as_of: dt.datetime = None, limit: int = None, scroll: str = None, scroll_id: str = None, order_by: List[str] = None, **kwargs) -> EntityQuery: keys = set(kwargs.keys()) valid = keys.intersection( i for i in dir(FieldFilterMap) if isinstance(getattr(FieldFilterMap, i), property)) invalid = keys.difference(valid) if invalid: bad_args = ['{}={}'.format(k, kwargs[k]) for k in invalid] raise KeyError('Invalid asset query argument(s): {}'.format( ', '.join(bad_args))) return EntityQuery(where=FieldFilterMap(**kwargs), fields=fields, asOfTime=as_of or dt.datetime.utcnow(), limit=limit, scroll=scroll, scroll_id=scroll_id, order_by=order_by)
def test_get_many_assets(mocker, monkeypatch): marquee_id_1 = 'MQA1234567890' marquee_id_2 = 'MQA4567890123' query = {'id': [marquee_id_1, marquee_id_2]} as_of = dt.datetime.utcnow() inputs = EntityQuery(where=FieldFilterMap(**query), fields=None, asOfTime=as_of, limit=100) mock_response = { 'results': (GsAsset.from_dict({ 'id': marquee_id_1, 'assetClass': 'Equity', 'type': 'Single Stock', 'name': 'Test 1' }), GsAsset.from_dict({ 'id': marquee_id_2, 'assetClass': 'Equity', 'type': 'Single Stock', 'name': 'Test 2' })) } expected_response = (GsAsset(id=marquee_id_1, assetClass='Equity', type='Single Stock', name='Test 1'), GsAsset(id=marquee_id_2, assetClass='Equity', type='Single Stock', name='Test 2')) # mock GsSession mocker.patch.object(GsSession.__class__, 'default_value', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) mocker.patch.object(GsSession.current, '_post', return_value=mock_response) # run test monkeypatch.delenv(ENABLE_ASSET_CACHING, raising=False) response = GsAssetApi.get_many_assets(id=[marquee_id_1, marquee_id_2], as_of=as_of) GsSession.current._post.assert_called_with('/assets/query', cls=GsAsset, payload=inputs) assert response == expected_response monkeypatch.setenv(ENABLE_ASSET_CACHING, 1) # run 2x with cache on response = GsAssetApi.get_many_assets(id=[marquee_id_1, marquee_id_2], as_of=as_of) assert response == expected_response response = GsAssetApi.get_many_assets(id=[marquee_id_1, marquee_id_2], as_of=as_of) assert response == expected_response
def test_auto_scroll_on_pages(mocker): response = { "requestId": "049de678-1480000", "totalPages": 5, "data": [{ "date": "2012-01-25", "assetId": "MADXKSGX6921CFNF", "value": 1 }] } mocker.patch.object(ContextMeta, 'current', return_value=GsSession(Environment.QA)) mocker.patch.object(ContextMeta.current, '_post', return_value=response) query = DataQuery(start_date=dt.date(2017, 1, 15), end_date=dt.date(2017, 1, 18), where=FieldFilterMap(currency="GBP")) response = GsDataApi.get_results("test", response, query) assert len(response) == 5
def get_many_coordinates( cls, mkt_type: str = None, mkt_asset: str = None, mkt_class: str = None, mkt_point: Tuple[str, ...] = (), *, limit: int = 100, return_type: type = str, ) -> Union[Tuple[str, ...], Tuple[MarketDataCoordinate, ...]]: where = FieldFilterMap( mkt_type=mkt_type.upper() if mkt_type is not None else None, mkt_asset=mkt_asset.upper() if mkt_asset is not None else None, mkt_class=mkt_class.upper() if mkt_class is not None else None, ) for index, point in enumerate(mkt_point): setattr(where, 'mkt_point' + str(index + 1), point.upper()) query = EntityQuery(where=where, limit=limit) results = GsSession.current._post('/data/mdapi/query', query)['results'] if return_type is str: return tuple(coordinate['name'] for coordinate in results) elif return_type is MarketDataCoordinate: return tuple( MarketDataCoordinate( mkt_type=coordinate['dimensions']['mktType'], mkt_asset=coordinate['dimensions']['mktAsset'], mkt_class=coordinate['dimensions']['mktClass'], mkt_point=tuple(coordinate['dimensions'] ['mktPoint'].values()), mkt_quoting_style=coordinate['dimensions'] ['mktQuotingStyle']) for coordinate in results) else: raise NotImplementedError('Unsupported return type')