Skip to content

Commit 409b6e0

Browse files
committed
more return Decimal values, tests
1 parent 986f605 commit 409b6e0

File tree

3 files changed

+371
-50
lines changed

3 files changed

+371
-50
lines changed

gdax/trader.py

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ async def _get(self, path, params=None, decimal_return_fields=None,
116116
return self._convert_return_fields(
117117
res, decimal_return_fields, convert_all)
118118

119-
async def _post(self, path, data=None):
119+
async def _post(self, path, data=None, decimal_return_fields=None,
120+
convert_all=False):
120121
json_data = json.dumps(data)
121122
headers = self._auth_headers(path, method='POST', body=json_data)
122123
path_url = self.API_URL + path
@@ -126,9 +127,11 @@ async def _post(self, path, data=None):
126127
data=json_data) as response:
127128
res = await response.json()
128129
response.raise_for_status()
129-
return res
130+
return self._convert_return_fields(
131+
res, decimal_return_fields, convert_all)
130132

131-
async def _delete(self, path, data=None):
133+
async def _delete(self, path, data=None, decimal_return_fields=None,
134+
convert_all=False):
132135
json_data = json.dumps(data)
133136
headers = self._auth_headers(path, method='DELETE', body=json_data)
134137
path_url = self.API_URL + path
@@ -219,9 +222,13 @@ async def buy(self, product_id=None, price=None, size=None, funds=None,
219222
payload['size'] = str(size)
220223
if funds is not None:
221224
payload['funds'] = str(funds)
225+
222226
payload.update(kwargs)
223227

224-
return await self._post('/orders', data=payload)
228+
return await self._post(
229+
'/orders', data=payload,
230+
decimal_return_fields={'price', 'size', 'fill_fees', 'filled_size',
231+
'executed_value'})
225232

226233
async def sell(self, product_id=None, price=None, size=None, funds=None,
227234
**kwargs):
@@ -239,7 +246,11 @@ async def sell(self, product_id=None, price=None, size=None, funds=None,
239246

240247
payload.update(kwargs)
241248

242-
return await self._post('/orders', data=payload)
249+
return await self._post(
250+
'/orders', data=payload,
251+
decimal_return_fields={'price', 'size', 'fill_fees', 'filled_size',
252+
'executed_value', 'funds',
253+
'specified_funds'})
243254

244255
async def cancel_order(self, order_id):
245256
assert self.authenticated
@@ -252,11 +263,19 @@ async def cancel_all(self, data=None, product_id=''):
252263

253264
async def get_order(self, order_id):
254265
assert self.authenticated
255-
return await self._get(f'/orders/{order_id}')
266+
return await self._get(
267+
f'/orders/{order_id}',
268+
decimal_return_fields={'price', 'size', 'fill_fees', 'filled_size',
269+
'executed_value', 'funds',
270+
'specified_funds'})
256271

257272
async def get_orders(self):
258273
assert self.authenticated
259-
return await self._get('/orders', pagination=True)
274+
return await self._get(
275+
'/orders', pagination=True,
276+
decimal_return_fields={'price', 'size', 'fill_fees', 'filled_size',
277+
'executed_value', 'funds',
278+
'specified_funds'})
260279

261280
async def get_fills(self, order_id='', product_id=''):
262281
assert self.authenticated
@@ -265,14 +284,19 @@ async def get_fills(self, order_id='', product_id=''):
265284
params['order_id'] = order_id
266285
if product_id:
267286
params['product_id'] = product_id or self.product_id
268-
return await self._get('/fills', params=params, pagination=True)
287+
return await self._get(
288+
'/fills', params=params, pagination=True,
289+
decimal_return_fields={'price', 'size', 'fee'})
269290

270291
async def get_fundings(self, status):
271292
assert self.authenticated
272293
params = {}
273294
if status:
274295
params['status'] = status
275-
return await self._get('/funding', params=params, pagination=True)
296+
return await self._get(
297+
'/funding', params=params, pagination=True,
298+
decimal_return_fields={'amount', 'repaid_amount',
299+
'default_amount'})
276300

277301
async def repay_funding(self, amount, currency):
278302
assert self.authenticated
@@ -291,7 +315,8 @@ async def margin_transfer(self, margin_profile_id, transfer_type,
291315
"currency": currency, # example: USD
292316
"amount": str(amount),
293317
}
294-
return await self._post('/profiles/margin-transfer', data=payload)
318+
return await self._post('/profiles/margin-transfer', data=payload,
319+
decimal_return_fields={'amount'})
295320

296321
async def get_position(self):
297322
assert self.authenticated

tests/test_orderbook.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -108,28 +108,6 @@ def _book():
108108
'size': Decimal("0.011"),
109109
'id': asks1[2][2]}],
110110
}
111-
"""
112-
{"type":"heartbeat","last_trade_id":17393422,"product_id":"BTC-USD","sequence":3419023015,"time":"2017-06-25T11:23:14.838000Z"}
113-
{"type":"received","order_id":"c1ac921c-021f-446d-ad6f-06057a6c17f5","order_type":"limit","size":"0.01495400","price":"309.41000000","side":"buy","product_id":"ETH-USD","sequence":617133250,"time":"2017-06-25T11:23:14.864000Z"}
114-
{"type":"open","side":"buy","price":"309.41000000","order_id":"c1ac921c-021f-446d-ad6f-06057a6c17f5","remaining_size":"0.01495400","product_id":"ETH-USD","sequence":617133251,"time":"2017-06-25T11:23:14.864000Z"}
115-
{"type":"received","order_id":"cc8b3a22-e0f4-4c34-ba35-743fec10cd5c","order_type":"limit","size":"3.00000000","price":"309.77000000","side":"sell","client_oid":"efc766ce-255f-4aa3-a359-bf7f33a3a932","product_id":"ETH-USD","sequence":617133252,"time":"2017-06-25T11:23:14.892000Z"}
116-
{"type":"open","side":"sell","price":"309.77000000","order_id":"cc8b3a22-e0f4-4c34-ba35-743fec10cd5c","remaining_size":"3.00000000","product_id":"ETH-USD","sequence":617133253,"time":"2017-06-25T11:23:14.892000Z"}
117-
{"type":"done","side":"buy","order_id":"9fb21887-aaaf-453b-8ff4-d9f9752fc23d","reason":"canceled","product_id":"ETH-USD","price":"306.91000000","remaining_size":"5.38724000","sequence":617133254,"time":"2017-06-25T11:23:14.898000Z"}
118-
{"type":"done","side":"sell","order_id":"1bd5ad13-96d0-4042-94a5-dd55cbdf4a27","reason":"canceled","product_id":"BTC-USD","price":"2628.61000000","remaining_size":"4.97552900","sequence":3419023016,"time":"2017-06-25T11:23:14.903000Z"}
119-
{"type":"done","side":"buy","order_id":"85cca062-8e45-444e-84a3-be7e17a37c66","reason":"canceled","product_id":"ETH-USD","price":"309.26000000","remaining_size":"0.02000000","sequence":617133255,"time":"2017-06-25T11:23:14.909000Z"}
120-
{"type":"done","side":"sell","order_id":"15f65f64-d2ba-438b-8b52-1403580c92f3","reason":"canceled","product_id":"ETH-USD","price":"309.60000000","remaining_size":"0.02000000","sequence":617133256,"time":"2017-06-25T11:23:14.916000Z"}
121-
{"type":"received","order_id":"2ab7e66e-cf7d-4840-addd-44da0ce05e68","order_type":"limit","size":"0.02000000","price":"309.28000000","side":"buy","client_oid":"ae18a040-5998-11e7-928d-c512efcd97b9","product_id":"ETH-USD","sequence":617133257,"time":"2017-06-25T11:23:14.923000Z"}
122-
{"type":"open","side":"buy","price":"309.28000000","order_id":"2ab7e66e-cf7d-4840-addd-44da0ce05e68","remaining_size":"0.02000000","product_id":"ETH-USD","sequence":617133258,"time":"2017-06-25T11:23:14.923000Z"}
123-
{"type":"received","order_id":"b5a63222-2bc9-4340-9295-a50f3e76dd9f","order_type":"limit","size":"0.02000000","price":"309.60000000","side":"sell","client_oid":"ae187930-5998-11e7-928d-c512efcd97b9","product_id":"ETH-USD","sequence":617133259,"time":"2017-06-25T11:23:14.931000Z"}
124-
{"type":"open","side":"sell","price":"309.60000000","order_id":"b5a63222-2bc9-4340-9295-a50f3e76dd9f","remaining_size":"0.02000000","product_id":"ETH-USD","sequence":617133260,"time":"2017-06-25T11:23:14.931000Z"}
125-
{"type":"done","side":"buy","order_id":"28e82f49-407d-4d60-9b98-b914dfa289aa","reason":"canceled","product_id":"BTC-USD","price":"2593.24000000","remaining_size":"0.20000000","sequence":3419023017,"time":"2017-06-25T11:23:14.935000Z"}
126-
{"type":"done","side":"buy","order_id":"e928ecbb-d920-4753-aef4-4911036b42f3","reason":"canceled","product_id":"ETH-USD","price":"302.22000000","remaining_size":"14.64853000","sequence":617133261,"time":"2017-06-25T11:23:14.934000Z"}
127-
{"type":"done","side":"sell","order_id":"94b38e12-cc81-46b4-ad86-cbf435ce03a2","reason":"canceled","product_id":"BTC-USD","price":"2599.41000000","remaining_size":"0.20000000","sequence":3419023018,"time":"2017-06-25T11:23:14.937000Z"}
128-
{"type":"received","order_id":"fdda08ad-11bc-4693-bf9d-0071ba839cbf","order_type":"limit","size":"0.20000000","price":"2593.25000000","side":"buy","client_oid":"576496ab-d27e-4663-8351-8dd786aa57cf","product_id":"BTC-USD","sequence":3419023019,"time":"2017-06-25T11:23:14.942000Z"}
129-
{"type":"open","side":"buy","price":"2593.25000000","order_id":"fdda08ad-11bc-4693-bf9d-0071ba839cbf","remaining_size":"0.20000000","product_id":"BTC-USD","sequence":3419023020,"time":"2017-06-25T11:23:14.942000Z"}
130-
{"type":"received","order_id":"c72b9f87-263f-4207-a571-e5698cc63eeb","order_type":"limit","size":"0.20000000","price":"2599.40000000","side":"sell","client_oid":"e6d1f3d5-615e-4c2c-9edd-85e19b893c67","product_id":"BTC-USD","sequence":3419023021,"time":"2017-06-25T11:23:14.947000Z"}
131-
{"type":"open","side":"sell","price":"2599.40000000","order_id":"c72b9f87-263f-4207-a571-e5698cc63eeb","remaining_size":"0.20000000","product_id":"BTC-USD","sequence":3419023022,"time":"2017-06-25T11:23:14.947000Z"}
132-
"""
133111

134112

135113
@pytest.mark.asyncio
@@ -299,7 +277,6 @@ async def test_logfile(self, mock_book, mock_connect):
299277

300278
@patch('gdax.trader.Trader.get_product_order_book')
301279
async def test_orderbook_advanced(self, mock_book, mock_connect):
302-
# TODO: split test by message type
303280
product_id = 'BTC-USD'
304281
mock_book.return_value = _book()
305282
mock_connect.return_value.aenter.receive_str = CoroutineMock()

0 commit comments

Comments
 (0)