Skip to content

Commit 05b123d

Browse files
authored
Merge pull request #42 from bitvavo/feat/FAVO-8349-option-arguments
Feat: Improve option arguments
2 parents 5d676cf + b1e5615 commit 05b123d

File tree

2 files changed

+50
-33
lines changed

2 files changed

+50
-33
lines changed

python_bitvavo_api/bitvavo.py

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def createSignature(timestamp, method, url, body, APISECRET):
2424
return signature
2525

2626
def createPostfix(options):
27+
options = _default(options, {})
2728
params = []
2829
for key in options:
2930
params.append(key + '=' + str(options[key]))
@@ -32,6 +33,12 @@ def createPostfix(options):
3233
postfix = '?' + postfix
3334
return postfix
3435

36+
def _default(value, fallback):
37+
return value if value is not None else fallback
38+
39+
def _epoch_millis(dt):
40+
return int(dt.timestamp() * 1000)
41+
3542
def asksCompare(a, b):
3643
if(a < b):
3744
return True
@@ -225,43 +232,50 @@ def time(self):
225232
return self.publicRequest((self.base + '/time'))
226233

227234
# options: market
228-
def markets(self, options):
235+
def markets(self, options=None):
229236
postfix = createPostfix(options)
230237
return self.publicRequest((self.base + '/markets' + postfix))
231238

232239
# options: symbol
233-
def assets(self, options):
240+
def assets(self, options=None):
234241
postfix = createPostfix(options)
235242
return self.publicRequest((self.base + '/assets' + postfix))
236243

237244
# options: depth
238-
def book(self, symbol, options):
245+
def book(self, symbol, options=None):
239246
postfix = createPostfix(options)
240247
return self.publicRequest((self.base + '/' + symbol + '/book' + postfix))
241248

242249
# options: limit, start, end, tradeIdFrom, tradeIdTo
243-
def publicTrades(self, symbol, options):
250+
def publicTrades(self, symbol, options=None):
244251
postfix = createPostfix(options)
245252
return self.publicRequest((self.base + '/' + symbol + '/trades' + postfix))
246253

247254
# options: limit, start, end
248-
def candles(self, symbol, interval, options):
255+
def candles(self, symbol, interval, options=None, limit=None, start=None, end=None):
256+
options = _default(options, {})
249257
options['interval'] = interval
258+
if limit is not None:
259+
options['limit'] = limit
260+
if start is not None:
261+
options['start'] = _epoch_millis(start)
262+
if end is not None:
263+
options['end'] = _epoch_millis(end)
250264
postfix = createPostfix(options)
251265
return self.publicRequest((self.base + '/' + symbol + '/candles' + postfix))
252266

253267
# options: market
254-
def tickerPrice(self, options):
268+
def tickerPrice(self, options=None):
255269
postfix = createPostfix(options)
256270
return self.publicRequest((self.base + '/ticker/price' + postfix))
257271

258272
# options: market
259-
def tickerBook(self, options):
273+
def tickerBook(self, options=None):
260274
postfix = createPostfix(options)
261275
return self.publicRequest((self.base + '/ticker/book' + postfix))
262276

263277
# options: market
264-
def ticker24h(self, options):
278+
def ticker24h(self, options=None):
265279
postfix = createPostfix(options)
266280
return self.publicRequest((self.base + '/ticker/24h' + postfix))
267281

@@ -292,23 +306,25 @@ def cancelOrder(self, market, orderId):
292306
return self.privateRequest('/order', postfix, {}, 'DELETE')
293307

294308
# options: limit, start, end, orderIdFrom, orderIdTo
295-
def getOrders(self, market, options):
309+
def getOrders(self, market, options=None):
310+
options = _default(options, {})
296311
options['market'] = market
297312
postfix = createPostfix(options)
298313
return self.privateRequest('/orders', postfix, {}, 'GET')
299314

300315
# options: market
301-
def cancelOrders(self, options):
316+
def cancelOrders(self, options=None):
302317
postfix = createPostfix(options)
303318
return self.privateRequest('/orders', postfix, {}, 'DELETE')
304319

305320
# options: market
306-
def ordersOpen(self, options):
321+
def ordersOpen(self, options=None):
307322
postfix = createPostfix(options)
308323
return self.privateRequest('/ordersOpen', postfix, {}, 'GET')
309324

310325
# options: limit, start, end, tradeIdFrom, tradeIdTo
311-
def trades(self, market, options):
326+
def trades(self, market, options=None):
327+
options = _default(options, {})
312328
options['market'] = market
313329
postfix = createPostfix(options)
314330
return self.privateRequest('/trades', postfix, {}, 'GET')
@@ -317,7 +333,7 @@ def account(self):
317333
return self.privateRequest('/account', '', {}, 'GET')
318334

319335
# options: symbol
320-
def balance(self, options):
336+
def balance(self, options=None):
321337
postfix = createPostfix(options)
322338
return self.privateRequest('/balance', postfix, {}, 'GET')
323339

@@ -333,12 +349,12 @@ def withdrawAssets(self, symbol, amount, address, body):
333349
return self.privateRequest('/withdrawal', '', body, 'POST')
334350

335351
# options: symbol, limit, start, end
336-
def depositHistory(self, options):
352+
def depositHistory(self, options=None):
337353
postfix = createPostfix(options)
338354
return self.privateRequest('/depositHistory', postfix, {}, 'GET')
339355

340356
# options: symbol, limit, start, end
341-
def withdrawalHistory(self, options):
357+
def withdrawalHistory(self, options=None):
342358
postfix = createPostfix(options)
343359
return self.privateRequest('/withdrawalHistory', postfix, {}, 'GET')
344360

python_bitvavo_api/testApi.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1+
from datetime import datetime, timezone
12
from python_bitvavo_api.bitvavo import Bitvavo
2-
import sys
3-
import signal
43
import time
54
import json
65

@@ -32,26 +31,28 @@ def testREST(bitvavo):
3231
response = bitvavo.time()
3332
print(response)
3433

35-
# response = bitvavo.markets({})
34+
# response = bitvavo.markets()
3635
# for market in response:
3736
# print(json.dumps(market, indent=2))
3837

39-
# response = bitvavo.assets({})
38+
# response = bitvavo.assets()
4039
# for asset in response:
4140
# print(json.dumps(asset, indent=2))
4241

43-
# response = bitvavo.book('BTC-EUR', {})
42+
# response = bitvavo.book('BTC-EUR')
4443
# print(json.dumps(response, indent=2))
4544

46-
# response = bitvavo.publicTrades('BTC-EUR', {})
45+
# response = bitvavo.publicTrades('BTC-EUR')
4746
# for trade in response:
4847
# print(json.dumps(trade, indent=2))
4948

5049
# Timestamp: candle[0], open: candle[1], high: candle[2], low: candle[3], close: candle[4], volume: candle[5]
51-
# response = bitvavo.candles('BTC-EUR', '1h', {})
52-
# for candle in response:
53-
# print(json.dumps(candle, indent=2))
54-
50+
# candles = bitvavo.candles('BTC-EUR', '15m')
51+
# candles = bitvavo.candles('BTC-EUR', '15m', limit=10)
52+
# candles = bitvavo.candles('BTC-EUR', '15m', start=datetime(year=2024, month=1, day=1, hour=0, tzinfo=timezone.utc), end=datetime(year=2024, month=1, day=1, hour=1, tzinfo=timezone.utc))
53+
# for candle in candles:
54+
# print('Timestamp', candle[0], ' open', candle[1], ' high', candle[2], ' low', candle[3], ' close', candle[4], ' volume', candle[5])
55+
5556
# response = bitvavo.tickerPrice({})
5657
# print(json.dumps(response, indent=2))
5758

@@ -78,26 +79,26 @@ def testREST(bitvavo):
7879
# response = bitvavo.cancelOrder('BTC-EUR', 'dd055772-0f02-493c-a049-f4356fa0d221')
7980
# print(json.dumps(response, indent=2))
8081

81-
# response = bitvavo.getOrders('BTC-EUR', {})
82+
# response = bitvavo.getOrders('BTC-EUR')
8283
# for item in response:
8384
# print(json.dumps(item, indent=2))
8485

8586
# response = bitvavo.cancelOrders({ 'market': 'BTC-EUR' })
8687
# for item in response:
8788
# print(json.dumps(item, indent=2))
8889

89-
# response = bitvavo.ordersOpen({})
90+
# response = bitvavo.ordersOpen()
9091
# for item in response:
9192
# print(json.dumps(item, indent=2))
9293

93-
# response = bitvavo.trades('BTC-EUR', {})
94+
# response = bitvavo.trades('BTC-EUR')
9495
# for item in response:
9596
# print(json.dumps(item, indent=2))
9697

9798
# response = bitvavo.account()
9899
# print(json.dumps(response, indent=2))
99100

100-
# response = bitvavo.balance({})
101+
# response = bitvavo.balance()
101102
# for item in response:
102103
# print(json.dumps(item, indent=2))
103104

@@ -107,15 +108,15 @@ def testREST(bitvavo):
107108
# response = bitvavo.withdrawAssets('BTC', '1', 'BitcoinAddress', {})
108109
# print(json.dumps(response, indent=2))
109110

110-
# response = bitvavo.depositHistory({})
111+
# response = bitvavo.depositHistory()
111112
# for item in response:
112113
# print(json.dumps(item, indent=2))
113114

114-
# response = bitvavo.withdrawalHistory({})
115+
# response = bitvavo.withdrawalHistory()
115116
# for item in response:
116117
# print(json.dumps(item, indent=2))
117118

118-
# Normally you would define a seperate callback for every function.
119+
# Normally you would define a separate callback for every function.
119120
def callback(response):
120121
print("Callback:", json.dumps(response, indent=2))
121122

@@ -172,4 +173,4 @@ def testWebsockets(bitvavo):
172173
websocket.closeSocket()
173174

174175
if __name__ == '__main__':
175-
main()
176+
main()

0 commit comments

Comments
 (0)