def get_latest_positions(cls, asset_id: str, position_type: str = 'close') -> Union[PositionSet, dict]: url = '/assets/{id}/positions/last?type={ptype}'.format(id=asset_id, ptype=position_type) results = GsSession.current._get(url)['results'] # Annoyingly, different types are returned depending on position_type if isinstance(results, dict) and 'positions' in results: results['positions'] = tuple(Position.from_dict(p) for p in results['positions']) return results
def get_latest_positions( asset_id: str, position_type: PositionType = None) -> Union[PositionSet, dict]: url = '/assets/{id}/positions/last'.format(id=asset_id) if position_type is not None: url += '?type={ptype}'.format(ptype=position_type if isinstance( position_type, str) else position_type.value) results = GsSession.current._get(url)['results'] # Annoyingly, different types are returned depending on position_type if isinstance(results, dict) and 'positions' in results: results['positions'] = tuple( Position.from_dict(p) for p in results['positions']) return results
def test_get_asset_positions_for_date(mocker): marquee_id = 'MQA1234567890' position_date = dt.date(2019, 2, 19) mock_response = { 'results': ({ 'id': 'mock1', 'positionDate': '2019-02-19', 'lastUpdateTime': '2019-02-19T12:10:32.401Z', 'positions': [{ 'assetId': 'MQA123', 'quantity': 0.3 }, { 'assetId': 'MQA456', 'quantity': 0.7 }], 'type': 'open', 'divisor': 100 }, { 'id': 'mock2', 'positionDate': '2019-02-19', 'lastUpdateTime': '2019-02-20T05:04:32.981Z', 'positions': [{ 'assetId': 'MQA123', 'quantity': 0.4 }, { 'assetId': 'MQA456', 'quantity': 0.6 }], 'type': 'close', 'divisor': 120 }) } expected_response = (PositionSet( 'mock1', dt.date(2019, 2, 19), dup.parse('2019-02-19T12:10:32.401Z'), (Position(assetId='MQA123', quantity=0.3), Position(assetId='MQA456', quantity=0.7)), 'open', 100), PositionSet( 'mock2', dt.date(2019, 2, 19), dup.parse('2019-02-20T05:04:32.981Z'), (Position(assetId='MQA123', quantity=0.4), Position(assetId='MQA456', quantity=0.6)), 'close', 120)) # mock GsSession mocker.patch.object(GsSession.__class__, 'current', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) mocker.patch.object(GsSession.current, '_get', return_value=mock_response) # run test response = GsAssetApi.get_asset_positions_for_date(marquee_id, position_date) GsSession.current._get.assert_called_with( '/assets/{id}/positions/{date}'.format(id=marquee_id, date=position_date)) testfixtures.compare(response, expected_response) mock_response = { 'results': [{ 'id': 'mock', 'positionDate': '2019-02-19', 'lastUpdateTime': '2019-02-20T05:04:32.981Z', 'positions': [{ 'assetId': 'MQA123', 'quantity': 0.4 }, { 'assetId': 'MQA456', 'quantity': 0.6 }], 'type': 'close', 'divisor': 120 }] } expected_response = (PositionSet( 'mock', dt.date(2019, 2, 19), dup.parse('2019-02-20T05:04:32.981Z'), (Position(assetId='MQA123', quantity=0.4), Position(assetId='MQA456', quantity=0.6)), 'close', 120), ) # mock GsSession mocker.patch.object(GsSession.__class__, 'current', return_value=GsSession.get(Environment.QA, 'client_id', 'secret')) mocker.patch.object(GsSession.current, '_get', return_value=mock_response) # run test response = GsAssetApi.get_asset_positions_for_date(marquee_id, position_date, "close") testfixtures.compare(response, expected_response) GsSession.current._get.assert_called_with( '/assets/{id}/positions/{date}?type=close'.format(id=marquee_id, date=position_date))