ccxt-ir 4.9.15__py2.py3-none-any.whl → 4.9.17__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +1 -1
- ccxt/abantether.py +2 -2
- ccxt/abstract/toobit.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/abantether.py +2 -2
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/hamtapay.py +4 -1
- ccxt/async_support/sarmayex.py +4 -3
- ccxt/async_support/toobit.py +94 -43
- ccxt/base/exchange.py +1 -1
- ccxt/hamtapay.py +4 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/sarmayex.py +4 -3
- ccxt/toobit.py +94 -43
- {ccxt_ir-4.9.15.dist-info → ccxt_ir-4.9.17.dist-info}/METADATA +4 -4
- {ccxt_ir-4.9.15.dist-info → ccxt_ir-4.9.17.dist-info}/RECORD +19 -19
- {ccxt_ir-4.9.15.dist-info → ccxt_ir-4.9.17.dist-info}/WHEEL +0 -0
- {ccxt_ir-4.9.15.dist-info → ccxt_ir-4.9.17.dist-info}/licenses/LICENSE.txt +0 -0
- {ccxt_ir-4.9.15.dist-info → ccxt_ir-4.9.17.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abantether.py
CHANGED
ccxt/abstract/toobit.py
CHANGED
|
@@ -4,3 +4,4 @@ from ccxt.base.types import Entry
|
|
|
4
4
|
class ImplicitAPI:
|
|
5
5
|
public_get_quote_v1_ticker_24hr = publicGetQuoteV1Ticker24hr = Entry('quote/v1/ticker/24hr', 'public', 'GET', {'cost': 1})
|
|
6
6
|
public_get_quote_v1_klines = publicGetQuoteV1Klines = Entry('quote/v1/klines', 'public', 'GET', {'cost': 1})
|
|
7
|
+
public_get_api_v1_exchangeinfo = publicGetApiV1ExchangeInfo = Entry('/api/v1/exchangeInfo', 'public', 'GET', {'cost': 1})
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/abantether.py
CHANGED
ccxt/async_support/hamtapay.py
CHANGED
|
@@ -282,5 +282,8 @@ class hamtapay(Exchange, ImplicitAPI):
|
|
|
282
282
|
|
|
283
283
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
284
284
|
url = self.urls['api']['public'] + '/' + path
|
|
285
|
-
headers = {
|
|
285
|
+
headers = {
|
|
286
|
+
'Content-Type': 'application/json',
|
|
287
|
+
'Origin': 'https://hamtapay.net',
|
|
288
|
+
}
|
|
286
289
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
ccxt/async_support/sarmayex.py
CHANGED
|
@@ -22,7 +22,7 @@ class sarmayex(Exchange, ImplicitAPI):
|
|
|
22
22
|
'pro': False,
|
|
23
23
|
'has': {
|
|
24
24
|
'CORS': None,
|
|
25
|
-
'spot':
|
|
25
|
+
'spot': False,
|
|
26
26
|
'margin': False,
|
|
27
27
|
'swap': False,
|
|
28
28
|
'future': False,
|
|
@@ -78,6 +78,7 @@ class sarmayex(Exchange, ImplicitAPI):
|
|
|
78
78
|
'fetchTradingFee': False,
|
|
79
79
|
'fetchTradingFees': False,
|
|
80
80
|
'fetchWithdrawals': False,
|
|
81
|
+
'otc': True,
|
|
81
82
|
'setLeverage': False,
|
|
82
83
|
'setMarginMode': False,
|
|
83
84
|
'transfer': False,
|
|
@@ -193,8 +194,8 @@ class sarmayex(Exchange, ImplicitAPI):
|
|
|
193
194
|
'baseId': baseId,
|
|
194
195
|
'quoteId': quoteId,
|
|
195
196
|
'settleId': None,
|
|
196
|
-
'type': '
|
|
197
|
-
'spot':
|
|
197
|
+
'type': 'otc',
|
|
198
|
+
'spot': False,
|
|
198
199
|
'margin': False,
|
|
199
200
|
'swap': False,
|
|
200
201
|
'future': False,
|
ccxt/async_support/toobit.py
CHANGED
|
@@ -113,6 +113,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
113
113
|
'get': {
|
|
114
114
|
'quote/v1/ticker/24hr': 1,
|
|
115
115
|
'quote/v1/klines': 1,
|
|
116
|
+
'/api/v1/exchangeInfo': 1,
|
|
116
117
|
},
|
|
117
118
|
},
|
|
118
119
|
},
|
|
@@ -129,48 +130,98 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
129
130
|
async def fetch_markets(self, params={}) -> List[Market]:
|
|
130
131
|
"""
|
|
131
132
|
retrieves data on all markets for toobit
|
|
132
|
-
https://
|
|
133
|
+
https://api.toobit.com/api/v1/exchangeInfo
|
|
133
134
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
134
135
|
:returns dict[]: an array of objects representing market data
|
|
135
136
|
"""
|
|
136
|
-
response = await self.
|
|
137
|
+
response = await self.publicGetApiV1ExchangeInfo()
|
|
138
|
+
symbols = self.safe_value(response, 'symbols', [])
|
|
137
139
|
result = []
|
|
138
|
-
for i in range(0, len(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
for i in range(0, len(symbols)):
|
|
141
|
+
symbolData = symbols[i]
|
|
142
|
+
status = self.safe_value(symbolData, 'status')
|
|
143
|
+
symbol = self.safe_value(symbolData, 'symbol')
|
|
144
|
+
if status != 'TRADING' or symbol == 'TESTA1S3TESTX8Z9':
|
|
142
145
|
continue
|
|
143
|
-
market = self.parse_market(
|
|
146
|
+
market = self.parse_market(symbolData)
|
|
144
147
|
result.append(market)
|
|
145
148
|
return result
|
|
146
149
|
|
|
147
150
|
def parse_market(self, market) -> Market:
|
|
148
151
|
# {
|
|
149
|
-
#
|
|
150
|
-
#
|
|
151
|
-
#
|
|
152
|
-
#
|
|
153
|
-
#
|
|
154
|
-
#
|
|
155
|
-
#
|
|
156
|
-
#
|
|
157
|
-
#
|
|
158
|
-
#
|
|
159
|
-
#
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
152
|
+
# "filters": [
|
|
153
|
+
# {
|
|
154
|
+
# "minPrice": "0.01",
|
|
155
|
+
# "maxPrice": "10000000.00000000",
|
|
156
|
+
# "tickSize": "0.01",
|
|
157
|
+
# "filterType": "PRICE_FILTER"
|
|
158
|
+
# },
|
|
159
|
+
# {
|
|
160
|
+
# "minQty": "0.0001",
|
|
161
|
+
# "maxQty": "4000",
|
|
162
|
+
# "stepSize": "0.0001",
|
|
163
|
+
# "filterType": "LOT_SIZE"
|
|
164
|
+
# },
|
|
165
|
+
# {
|
|
166
|
+
# "minNotional": "5",
|
|
167
|
+
# "filterType": "MIN_NOTIONAL"
|
|
168
|
+
# }
|
|
169
|
+
# ],
|
|
170
|
+
# "exchangeId": "301",
|
|
171
|
+
# "symbol": "ETHUSDT",
|
|
172
|
+
# "symbolName": "ETHUSDT",
|
|
173
|
+
# "status": "TRADING",
|
|
174
|
+
# "baseAsset": "ETH",
|
|
175
|
+
# "baseAssetName": "ETH",
|
|
176
|
+
# "baseAssetPrecision": "0.0001",
|
|
177
|
+
# "quoteAsset": "USDT",
|
|
178
|
+
# "quoteAssetName": "USDT",
|
|
179
|
+
# "quotePrecision": "0.01",
|
|
180
|
+
# "icebergAllowed": False,
|
|
181
|
+
# "isAggregate": False,
|
|
182
|
+
# "allowMargin": True
|
|
183
|
+
# }
|
|
184
|
+
symbol = self.safe_value(market, 'symbol')
|
|
185
|
+
baseAsset = self.safe_value(market, 'baseAsset')
|
|
186
|
+
quoteAsset = self.safe_value(market, 'quoteAsset')
|
|
187
|
+
baseAssetPrecision = self.safe_value(market, 'baseAssetPrecision')
|
|
188
|
+
quotePrecision = self.safe_value(market, 'quotePrecision')
|
|
189
|
+
allowMargin = self.safe_value(market, 'allowMargin', False)
|
|
190
|
+
filters = self.safe_value(market, 'filters', [])
|
|
191
|
+
# Parse filters to extract limits and precision
|
|
192
|
+
minPrice = None
|
|
193
|
+
maxPrice = None
|
|
194
|
+
tickSize = None
|
|
195
|
+
minQty = None
|
|
196
|
+
maxQty = None
|
|
197
|
+
stepSize = None
|
|
198
|
+
minNotional = None
|
|
199
|
+
minAmount = None
|
|
200
|
+
maxAmount = None
|
|
201
|
+
for i in range(0, len(filters)):
|
|
202
|
+
filter = filters[i]
|
|
203
|
+
filterType = self.safe_value(filter, 'filterType')
|
|
204
|
+
if filterType == 'PRICE_FILTER':
|
|
205
|
+
minPrice = self.safe_number(filter, 'minPrice')
|
|
206
|
+
maxPrice = self.safe_number(filter, 'maxPrice')
|
|
207
|
+
tickSize = self.safe_string(filter, 'tickSize')
|
|
208
|
+
elif filterType == 'LOT_SIZE':
|
|
209
|
+
minQty = self.safe_number(filter, 'minQty')
|
|
210
|
+
maxQty = self.safe_number(filter, 'maxQty')
|
|
211
|
+
stepSize = self.safe_string(filter, 'stepSize')
|
|
212
|
+
elif filterType == 'MIN_NOTIONAL':
|
|
213
|
+
minNotional = self.safe_number(filter, 'minNotional')
|
|
214
|
+
elif filterType == 'TRADE_AMOUNT':
|
|
215
|
+
minAmount = self.safe_number(filter, 'minAmount')
|
|
216
|
+
maxAmount = self.safe_number(filter, 'maxAmount')
|
|
169
217
|
id = symbol
|
|
170
|
-
base = self.safe_currency_code(
|
|
171
|
-
quote = self.safe_currency_code(
|
|
172
|
-
baseId =
|
|
173
|
-
quoteId =
|
|
218
|
+
base = self.safe_currency_code(baseAsset)
|
|
219
|
+
quote = self.safe_currency_code(quoteAsset)
|
|
220
|
+
baseId = baseAsset.lower()
|
|
221
|
+
quoteId = quoteAsset.lower()
|
|
222
|
+
# Calculate precision from step sizes and precision strings
|
|
223
|
+
amountPrecision = str(self.precision_from_string(stepSize)) if stepSize else self.precision_from_string(baseAssetPrecision)
|
|
224
|
+
pricePrecision = str(self.precision_from_string(tickSize)) if tickSize else self.precision_from_string(quotePrecision)
|
|
174
225
|
return {
|
|
175
226
|
'id': id,
|
|
176
227
|
'symbol': base + '/' + quote,
|
|
@@ -182,7 +233,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
182
233
|
'settleId': None,
|
|
183
234
|
'type': 'spot',
|
|
184
235
|
'spot': True,
|
|
185
|
-
'margin':
|
|
236
|
+
'margin': allowMargin,
|
|
186
237
|
'swap': False,
|
|
187
238
|
'future': False,
|
|
188
239
|
'option': False,
|
|
@@ -196,8 +247,8 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
196
247
|
'strike': None,
|
|
197
248
|
'optionType': None,
|
|
198
249
|
'precision': {
|
|
199
|
-
'amount':
|
|
200
|
-
'price':
|
|
250
|
+
'amount': amountPrecision,
|
|
251
|
+
'price': pricePrecision,
|
|
201
252
|
},
|
|
202
253
|
'limits': {
|
|
203
254
|
'leverage': {
|
|
@@ -205,16 +256,16 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
205
256
|
'max': None,
|
|
206
257
|
},
|
|
207
258
|
'amount': {
|
|
208
|
-
'min':
|
|
209
|
-
'max':
|
|
259
|
+
'min': minQty,
|
|
260
|
+
'max': maxQty,
|
|
210
261
|
},
|
|
211
262
|
'price': {
|
|
212
|
-
'min':
|
|
213
|
-
'max':
|
|
263
|
+
'min': minPrice,
|
|
264
|
+
'max': maxPrice,
|
|
214
265
|
},
|
|
215
266
|
'cost': {
|
|
216
|
-
'min':
|
|
217
|
-
'max':
|
|
267
|
+
'min': minNotional or minAmount,
|
|
268
|
+
'max': maxAmount,
|
|
218
269
|
},
|
|
219
270
|
},
|
|
220
271
|
'created': None,
|
|
@@ -224,7 +275,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
224
275
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
225
276
|
"""
|
|
226
277
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
227
|
-
https://
|
|
278
|
+
https://toobit-docs.github.io/apidocs/spot/v1/en/#tickers
|
|
228
279
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
229
280
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
230
281
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -246,7 +297,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
246
297
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
247
298
|
"""
|
|
248
299
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
249
|
-
https://
|
|
300
|
+
https://toobit-docs.github.io/apidocs/spot/v1/en/#ticker
|
|
250
301
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
251
302
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
252
303
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -315,7 +366,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
315
366
|
async def fetch_ohlcv(self, symbol: str, timeframe='1h', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
316
367
|
"""
|
|
317
368
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
318
|
-
https://
|
|
369
|
+
https://toobit-docs.github.io/apidocs/spot/v1/en/#chart
|
|
319
370
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
320
371
|
:param str timeframe: the length of time each candle represents
|
|
321
372
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
ccxt/base/exchange.py
CHANGED
ccxt/hamtapay.py
CHANGED
|
@@ -282,5 +282,8 @@ class hamtapay(Exchange, ImplicitAPI):
|
|
|
282
282
|
|
|
283
283
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
284
284
|
url = self.urls['api']['public'] + '/' + path
|
|
285
|
-
headers = {
|
|
285
|
+
headers = {
|
|
286
|
+
'Content-Type': 'application/json',
|
|
287
|
+
'Origin': 'https://hamtapay.net',
|
|
288
|
+
}
|
|
286
289
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
ccxt/pro/__init__.py
CHANGED
ccxt/sarmayex.py
CHANGED
|
@@ -22,7 +22,7 @@ class sarmayex(Exchange, ImplicitAPI):
|
|
|
22
22
|
'pro': False,
|
|
23
23
|
'has': {
|
|
24
24
|
'CORS': None,
|
|
25
|
-
'spot':
|
|
25
|
+
'spot': False,
|
|
26
26
|
'margin': False,
|
|
27
27
|
'swap': False,
|
|
28
28
|
'future': False,
|
|
@@ -78,6 +78,7 @@ class sarmayex(Exchange, ImplicitAPI):
|
|
|
78
78
|
'fetchTradingFee': False,
|
|
79
79
|
'fetchTradingFees': False,
|
|
80
80
|
'fetchWithdrawals': False,
|
|
81
|
+
'otc': True,
|
|
81
82
|
'setLeverage': False,
|
|
82
83
|
'setMarginMode': False,
|
|
83
84
|
'transfer': False,
|
|
@@ -193,8 +194,8 @@ class sarmayex(Exchange, ImplicitAPI):
|
|
|
193
194
|
'baseId': baseId,
|
|
194
195
|
'quoteId': quoteId,
|
|
195
196
|
'settleId': None,
|
|
196
|
-
'type': '
|
|
197
|
-
'spot':
|
|
197
|
+
'type': 'otc',
|
|
198
|
+
'spot': False,
|
|
198
199
|
'margin': False,
|
|
199
200
|
'swap': False,
|
|
200
201
|
'future': False,
|
ccxt/toobit.py
CHANGED
|
@@ -113,6 +113,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
113
113
|
'get': {
|
|
114
114
|
'quote/v1/ticker/24hr': 1,
|
|
115
115
|
'quote/v1/klines': 1,
|
|
116
|
+
'/api/v1/exchangeInfo': 1,
|
|
116
117
|
},
|
|
117
118
|
},
|
|
118
119
|
},
|
|
@@ -129,48 +130,98 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
129
130
|
def fetch_markets(self, params={}) -> List[Market]:
|
|
130
131
|
"""
|
|
131
132
|
retrieves data on all markets for toobit
|
|
132
|
-
https://
|
|
133
|
+
https://api.toobit.com/api/v1/exchangeInfo
|
|
133
134
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
134
135
|
:returns dict[]: an array of objects representing market data
|
|
135
136
|
"""
|
|
136
|
-
response = self.
|
|
137
|
+
response = self.publicGetApiV1ExchangeInfo()
|
|
138
|
+
symbols = self.safe_value(response, 'symbols', [])
|
|
137
139
|
result = []
|
|
138
|
-
for i in range(0, len(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
for i in range(0, len(symbols)):
|
|
141
|
+
symbolData = symbols[i]
|
|
142
|
+
status = self.safe_value(symbolData, 'status')
|
|
143
|
+
symbol = self.safe_value(symbolData, 'symbol')
|
|
144
|
+
if status != 'TRADING' or symbol == 'TESTA1S3TESTX8Z9':
|
|
142
145
|
continue
|
|
143
|
-
market = self.parse_market(
|
|
146
|
+
market = self.parse_market(symbolData)
|
|
144
147
|
result.append(market)
|
|
145
148
|
return result
|
|
146
149
|
|
|
147
150
|
def parse_market(self, market) -> Market:
|
|
148
151
|
# {
|
|
149
|
-
#
|
|
150
|
-
#
|
|
151
|
-
#
|
|
152
|
-
#
|
|
153
|
-
#
|
|
154
|
-
#
|
|
155
|
-
#
|
|
156
|
-
#
|
|
157
|
-
#
|
|
158
|
-
#
|
|
159
|
-
#
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
152
|
+
# "filters": [
|
|
153
|
+
# {
|
|
154
|
+
# "minPrice": "0.01",
|
|
155
|
+
# "maxPrice": "10000000.00000000",
|
|
156
|
+
# "tickSize": "0.01",
|
|
157
|
+
# "filterType": "PRICE_FILTER"
|
|
158
|
+
# },
|
|
159
|
+
# {
|
|
160
|
+
# "minQty": "0.0001",
|
|
161
|
+
# "maxQty": "4000",
|
|
162
|
+
# "stepSize": "0.0001",
|
|
163
|
+
# "filterType": "LOT_SIZE"
|
|
164
|
+
# },
|
|
165
|
+
# {
|
|
166
|
+
# "minNotional": "5",
|
|
167
|
+
# "filterType": "MIN_NOTIONAL"
|
|
168
|
+
# }
|
|
169
|
+
# ],
|
|
170
|
+
# "exchangeId": "301",
|
|
171
|
+
# "symbol": "ETHUSDT",
|
|
172
|
+
# "symbolName": "ETHUSDT",
|
|
173
|
+
# "status": "TRADING",
|
|
174
|
+
# "baseAsset": "ETH",
|
|
175
|
+
# "baseAssetName": "ETH",
|
|
176
|
+
# "baseAssetPrecision": "0.0001",
|
|
177
|
+
# "quoteAsset": "USDT",
|
|
178
|
+
# "quoteAssetName": "USDT",
|
|
179
|
+
# "quotePrecision": "0.01",
|
|
180
|
+
# "icebergAllowed": False,
|
|
181
|
+
# "isAggregate": False,
|
|
182
|
+
# "allowMargin": True
|
|
183
|
+
# }
|
|
184
|
+
symbol = self.safe_value(market, 'symbol')
|
|
185
|
+
baseAsset = self.safe_value(market, 'baseAsset')
|
|
186
|
+
quoteAsset = self.safe_value(market, 'quoteAsset')
|
|
187
|
+
baseAssetPrecision = self.safe_value(market, 'baseAssetPrecision')
|
|
188
|
+
quotePrecision = self.safe_value(market, 'quotePrecision')
|
|
189
|
+
allowMargin = self.safe_value(market, 'allowMargin', False)
|
|
190
|
+
filters = self.safe_value(market, 'filters', [])
|
|
191
|
+
# Parse filters to extract limits and precision
|
|
192
|
+
minPrice = None
|
|
193
|
+
maxPrice = None
|
|
194
|
+
tickSize = None
|
|
195
|
+
minQty = None
|
|
196
|
+
maxQty = None
|
|
197
|
+
stepSize = None
|
|
198
|
+
minNotional = None
|
|
199
|
+
minAmount = None
|
|
200
|
+
maxAmount = None
|
|
201
|
+
for i in range(0, len(filters)):
|
|
202
|
+
filter = filters[i]
|
|
203
|
+
filterType = self.safe_value(filter, 'filterType')
|
|
204
|
+
if filterType == 'PRICE_FILTER':
|
|
205
|
+
minPrice = self.safe_number(filter, 'minPrice')
|
|
206
|
+
maxPrice = self.safe_number(filter, 'maxPrice')
|
|
207
|
+
tickSize = self.safe_string(filter, 'tickSize')
|
|
208
|
+
elif filterType == 'LOT_SIZE':
|
|
209
|
+
minQty = self.safe_number(filter, 'minQty')
|
|
210
|
+
maxQty = self.safe_number(filter, 'maxQty')
|
|
211
|
+
stepSize = self.safe_string(filter, 'stepSize')
|
|
212
|
+
elif filterType == 'MIN_NOTIONAL':
|
|
213
|
+
minNotional = self.safe_number(filter, 'minNotional')
|
|
214
|
+
elif filterType == 'TRADE_AMOUNT':
|
|
215
|
+
minAmount = self.safe_number(filter, 'minAmount')
|
|
216
|
+
maxAmount = self.safe_number(filter, 'maxAmount')
|
|
169
217
|
id = symbol
|
|
170
|
-
base = self.safe_currency_code(
|
|
171
|
-
quote = self.safe_currency_code(
|
|
172
|
-
baseId =
|
|
173
|
-
quoteId =
|
|
218
|
+
base = self.safe_currency_code(baseAsset)
|
|
219
|
+
quote = self.safe_currency_code(quoteAsset)
|
|
220
|
+
baseId = baseAsset.lower()
|
|
221
|
+
quoteId = quoteAsset.lower()
|
|
222
|
+
# Calculate precision from step sizes and precision strings
|
|
223
|
+
amountPrecision = str(self.precision_from_string(stepSize)) if stepSize else self.precision_from_string(baseAssetPrecision)
|
|
224
|
+
pricePrecision = str(self.precision_from_string(tickSize)) if tickSize else self.precision_from_string(quotePrecision)
|
|
174
225
|
return {
|
|
175
226
|
'id': id,
|
|
176
227
|
'symbol': base + '/' + quote,
|
|
@@ -182,7 +233,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
182
233
|
'settleId': None,
|
|
183
234
|
'type': 'spot',
|
|
184
235
|
'spot': True,
|
|
185
|
-
'margin':
|
|
236
|
+
'margin': allowMargin,
|
|
186
237
|
'swap': False,
|
|
187
238
|
'future': False,
|
|
188
239
|
'option': False,
|
|
@@ -196,8 +247,8 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
196
247
|
'strike': None,
|
|
197
248
|
'optionType': None,
|
|
198
249
|
'precision': {
|
|
199
|
-
'amount':
|
|
200
|
-
'price':
|
|
250
|
+
'amount': amountPrecision,
|
|
251
|
+
'price': pricePrecision,
|
|
201
252
|
},
|
|
202
253
|
'limits': {
|
|
203
254
|
'leverage': {
|
|
@@ -205,16 +256,16 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
205
256
|
'max': None,
|
|
206
257
|
},
|
|
207
258
|
'amount': {
|
|
208
|
-
'min':
|
|
209
|
-
'max':
|
|
259
|
+
'min': minQty,
|
|
260
|
+
'max': maxQty,
|
|
210
261
|
},
|
|
211
262
|
'price': {
|
|
212
|
-
'min':
|
|
213
|
-
'max':
|
|
263
|
+
'min': minPrice,
|
|
264
|
+
'max': maxPrice,
|
|
214
265
|
},
|
|
215
266
|
'cost': {
|
|
216
|
-
'min':
|
|
217
|
-
'max':
|
|
267
|
+
'min': minNotional or minAmount,
|
|
268
|
+
'max': maxAmount,
|
|
218
269
|
},
|
|
219
270
|
},
|
|
220
271
|
'created': None,
|
|
@@ -224,7 +275,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
224
275
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
225
276
|
"""
|
|
226
277
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
227
|
-
https://
|
|
278
|
+
https://toobit-docs.github.io/apidocs/spot/v1/en/#tickers
|
|
228
279
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
229
280
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
230
281
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -246,7 +297,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
246
297
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
247
298
|
"""
|
|
248
299
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
249
|
-
https://
|
|
300
|
+
https://toobit-docs.github.io/apidocs/spot/v1/en/#ticker
|
|
250
301
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
251
302
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
252
303
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -315,7 +366,7 @@ class toobit(Exchange, ImplicitAPI):
|
|
|
315
366
|
def fetch_ohlcv(self, symbol: str, timeframe='1h', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
316
367
|
"""
|
|
317
368
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
318
|
-
https://
|
|
369
|
+
https://toobit-docs.github.io/apidocs/spot/v1/en/#chart
|
|
319
370
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
320
371
|
:param str timeframe: the length of time each candle represents
|
|
321
372
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ccxt-ir
|
|
3
|
-
Version: 4.9.
|
|
3
|
+
Version: 4.9.17
|
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
|
5
5
|
Home-page: https://ccxt.com
|
|
6
6
|
Author: Igor Kroitor
|
|
@@ -304,13 +304,13 @@ console.log(version, Object.keys(exchanges));
|
|
|
304
304
|
|
|
305
305
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
|
306
306
|
|
|
307
|
-
- jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.
|
|
308
|
-
- unpkg: https://unpkg.com/ccxt@4.9.
|
|
307
|
+
- jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.17/dist/ccxt.browser.min.js
|
|
308
|
+
- unpkg: https://unpkg.com/ccxt@4.9.17/dist/ccxt.browser.min.js
|
|
309
309
|
|
|
310
310
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
|
311
311
|
|
|
312
312
|
```HTML
|
|
313
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.
|
|
313
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.17/dist/ccxt.browser.min.js"></script>
|
|
314
314
|
console.log (ccxt.exchanges) // print all available exchanges
|
|
315
315
|
```
|
|
316
316
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
ccxt/__init__.py,sha256=
|
|
2
|
-
ccxt/abantether.py,sha256=
|
|
1
|
+
ccxt/__init__.py,sha256=bqSMqR_lZmPDfl-roAii2wQniZ8Y2K2_PmuDF7myH5U,20197
|
|
2
|
+
ccxt/abantether.py,sha256=PSz8vQq3Il76_K8kmw43MzFH_JDsqF9Spg2IxPoeGXE,12879
|
|
3
3
|
ccxt/afratether.py,sha256=5PX0U1GQ3ylOQuQ8Mm9yIsF5J3aqfTZcp6iV87I8E_0,12245
|
|
4
4
|
ccxt/alpaca.py,sha256=oO0YJHxo5_1iYyGVRMbxfGyPahqzuMlE7LZ3TMYgPGo,80694
|
|
5
5
|
ccxt/apex.py,sha256=TuOp4vnCczdRG__9thnb3RIidoVeUDZbOSGbusjJG78,82740
|
|
@@ -76,7 +76,7 @@ ccxt/foxbit.py,sha256=ixfTx1r8cTojMIPMPkJYKrPwwq6RnW8zAP1Y5LZxfKw,85198
|
|
|
76
76
|
ccxt/gate.py,sha256=AePkMpd4rKP4GoxClgM4qJ6fCrszgTzwrl_ZmJw6Yig,353292
|
|
77
77
|
ccxt/gateio.py,sha256=7KbnH56kBK0tb_CN-wT10jaF5DfTrnHarhu27eknsLI,484
|
|
78
78
|
ccxt/gemini.py,sha256=Tz6iwN1-MM7tyoikqOdOfycx0QpKzf_OVbbtBJf5qks,83632
|
|
79
|
-
ccxt/hamtapay.py,sha256=
|
|
79
|
+
ccxt/hamtapay.py,sha256=7h4FCjygyBcP9qFwTNYbgfPknIzy3Tsl18mTJewEfTI,11120
|
|
80
80
|
ccxt/hashkey.py,sha256=_UWPVcZ7ogSIc2e9hoJSIDxjVpPyG1-ITtW_1GUAgK4,193017
|
|
81
81
|
ccxt/hibachi.py,sha256=4yOuKncE9fKenemc0fZ0QhY1NWQi0uX4IOY8KTvXqUA,85804
|
|
82
82
|
ccxt/hitbtc.py,sha256=6d71BjWGR-ye1qZ0xvbQo3tYZKVy8hJ3cinOvze9upE,159666
|
|
@@ -122,14 +122,14 @@ ccxt/poloniex.py,sha256=Ukb2tZq57T44McUdD3-J3J_uLHTTEyBaLV1o3kmU4Rw,155050
|
|
|
122
122
|
ccxt/pooleno.py,sha256=vZP1P6bxeJrvecUcBlZaYa4Fz1SiFMy6ixstjeFk_Qc,12465
|
|
123
123
|
ccxt/probit.py,sha256=Lsfz21itILHEURhx_7qs9oQcjQNOXn-JFIfIUiOBJNo,79205
|
|
124
124
|
ccxt/ramzinex.py,sha256=Si0Nuhfy7fo7t3Gi9y7uVFSt_FM5nS3Uo2j2vf6gxEw,19486
|
|
125
|
-
ccxt/sarmayex.py,sha256=
|
|
125
|
+
ccxt/sarmayex.py,sha256=NI1j4t_kvIeGcT6CPiKEWWG1q-s3LojqGJ87uOHAgjc,13434
|
|
126
126
|
ccxt/sarrafex.py,sha256=D1fo5tCmowlDb8CtsCoHrVkmf_WjhYp-6q-pcVkDFBg,19125
|
|
127
127
|
ccxt/tabdeal.py,sha256=OWR4aV5Ek3cgIk3zjXy1l04hdbLxJZxd-3icm6prAvA,14358
|
|
128
128
|
ccxt/tehran_exchange.py,sha256=02LkTk0aJYTv-vMKgl9CCn9dzhIEUNEiKBv-XQyYQlI,12514
|
|
129
129
|
ccxt/tetherland.py,sha256=lqV2-p2c3bBj98wx8uOuig1HIvfC3YPnjY68EVFeMuA,13915
|
|
130
130
|
ccxt/timex.py,sha256=MiLB4GyIpEOHweaQuzIrBJyuevw3jsVvitsaK7iQ6RE,76698
|
|
131
131
|
ccxt/tokocrypto.py,sha256=-q95F-FvV-dgatuZzfJNnojtNxuyyyzmTpHLyOpu8Vw,126328
|
|
132
|
-
ccxt/toobit.py,sha256=
|
|
132
|
+
ccxt/toobit.py,sha256=mQaIT5EkldSV1ptLnBj-7KJVkdv5-aV5abmlkVph4kg,16781
|
|
133
133
|
ccxt/tradeogre.py,sha256=Q8CSHf8QGzb37jMFhaBmc_IZ1zga0eRXFVbjhmJnyFY,33712
|
|
134
134
|
ccxt/twox.py,sha256=V5D0-q2CBKXBziiY09q4LB4OtCjbC7thOCXTn0V6ky0,12908
|
|
135
135
|
ccxt/ubitex.py,sha256=Z9ThriWhEmlZwBgb7WmtIFUC_EfTa17GTyj_0SNumZA,16466
|
|
@@ -275,7 +275,7 @@ ccxt/abstract/tehran_exchange.py,sha256=J189abh3OO9j86o6Rd3iXuwwCOP4LJ2CJjnrSN1m
|
|
|
275
275
|
ccxt/abstract/tetherland.py,sha256=oeq5VUYhHg8h9IaD7bDQlTCgZfHY80WAYnO-F-esl18,174
|
|
276
276
|
ccxt/abstract/timex.py,sha256=9b0CDsyjm8XrYZmhUMB1dTHUmyE9YrsZTCZrz1UTt6E,5875
|
|
277
277
|
ccxt/abstract/tokocrypto.py,sha256=OF5UW4ch_Lf3-avOPgd4AD4CVrOUDUfUpSMCmxhNHlk,4094
|
|
278
|
-
ccxt/abstract/toobit.py,sha256=
|
|
278
|
+
ccxt/abstract/toobit.py,sha256=vjq_QqR_xs9ZEnZdaxchsbBwKw5nz4_OG2JCQwSuuEs,421
|
|
279
279
|
ccxt/abstract/tradeogre.py,sha256=bDouHP2c50F6Ins5EU2-3Jw10PsIG2KK3bcKv8y7678,1676
|
|
280
280
|
ccxt/abstract/twox.py,sha256=RHI1yDeSsDxNgV3YX82DZCg1p36V-6fDOcmTXaMZK6w,166
|
|
281
281
|
ccxt/abstract/ubitex.py,sha256=3bN3gGo86vcA1MPvlJTOcSkf8Ql-q0gbvXJCqhB_a-Q,416
|
|
@@ -290,8 +290,8 @@ ccxt/abstract/xt.py,sha256=n3eX1cItL_J0j8prOViV-C_tRwIFv_GO8JTvZZw8jv8,27837
|
|
|
290
290
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
|
291
291
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
|
292
292
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
|
293
|
-
ccxt/async_support/__init__.py,sha256=
|
|
294
|
-
ccxt/async_support/abantether.py,sha256=
|
|
293
|
+
ccxt/async_support/__init__.py,sha256=pb257fmWpklIMWE253W9SG4uD5fM0B1hGaRrKwaqYX0,20370
|
|
294
|
+
ccxt/async_support/abantether.py,sha256=aNxARnFPboX8VyBLysADfJlW8d8d1CptPyf7NasyRl8,12935
|
|
295
295
|
ccxt/async_support/afratether.py,sha256=fhVGoxrIbXXser4tIsCBgfVIivLnq7hpZBvzR84WgBs,12313
|
|
296
296
|
ccxt/async_support/alpaca.py,sha256=oFpSnAjX-faRgTN4d5rwHa08WRaCkwiAbHGZ7JBe6Ww,81140
|
|
297
297
|
ccxt/async_support/apex.py,sha256=ouj8uyC4f8Ar3IowHxbrPTBp-g2ctheo5ir_YLsg-Gg,83228
|
|
@@ -368,7 +368,7 @@ ccxt/async_support/foxbit.py,sha256=Mnb-we3Gy-iflG7driSnD3A4CL9ytVanDvXoX1h6Lgg,
|
|
|
368
368
|
ccxt/async_support/gate.py,sha256=t5iTFzkJVS14V9Prgoqi6achMXMlKKLZ7TQwP2zphxw,355257
|
|
369
369
|
ccxt/async_support/gateio.py,sha256=Sy9taiR0_0k4oh5GHjTjpwuCzskKiCCEQljuz7OxDVs,498
|
|
370
370
|
ccxt/async_support/gemini.py,sha256=t5is53SzmwonojZ6szxaPaGt-3ShwE6wh6nA0lB7L7M,84156
|
|
371
|
-
ccxt/async_support/hamtapay.py,sha256=
|
|
371
|
+
ccxt/async_support/hamtapay.py,sha256=Xdkhn0s_Q5ILW1FR-f55fruzSL6M0ftO6xXFK-akYv4,11176
|
|
372
372
|
ccxt/async_support/hashkey.py,sha256=MIp7RB82pOCLxVCH23VTh9ve__prU-EbdbrRYJ98xhI,193859
|
|
373
373
|
ccxt/async_support/hibachi.py,sha256=bePZjCNOkXjd7sSUIMGQd5FVl-EtWtlYwlruW46G81A,86311
|
|
374
374
|
ccxt/async_support/hitbtc.py,sha256=QpnR5OiablBy8tdb-XK1irLYBUX3gGtRiJKoV8Lldwc,160730
|
|
@@ -414,14 +414,14 @@ ccxt/async_support/poloniex.py,sha256=uniLoCvC3e37u6mLp-20H2awAGu5XsTHVc-LHkcbX1
|
|
|
414
414
|
ccxt/async_support/pooleno.py,sha256=h2f7wgCocqg-xbn9HVSnF9V_uK7kp8S4mRB7IWQZKpg,12521
|
|
415
415
|
ccxt/async_support/probit.py,sha256=uQOGglJZ1MWcmGwBWv3VJRluUB5HWkl80brpyElBoQc,79597
|
|
416
416
|
ccxt/async_support/ramzinex.py,sha256=Abs2Uj31vh4KnAXxuRsTcj2Bjrs0MExZ4dC4PCTuX4Y,19584
|
|
417
|
-
ccxt/async_support/sarmayex.py,sha256
|
|
417
|
+
ccxt/async_support/sarmayex.py,sha256=-F5g-kSZNM9PWLRpbD5Epce2oKed3kdztswS0TVmhHE,13490
|
|
418
418
|
ccxt/async_support/sarrafex.py,sha256=ZJBxRfWZ0vMgBPeneEyxlNVxXHLzeGICwxT3lAVhH-M,19223
|
|
419
419
|
ccxt/async_support/tabdeal.py,sha256=_kDTQeB8pQSZKYOiBc0IoZBuIsOkwvhhhTNN8m4A0G8,14450
|
|
420
420
|
ccxt/async_support/tehran_exchange.py,sha256=-z8FCrUUqJSHjuJ2RUD9U4gKNKIunqzjia9i9ZIn7xU,12576
|
|
421
421
|
ccxt/async_support/tetherland.py,sha256=qjrg3bVakqBPs-2-u9fr2gPTN--JbXbw5gJ0_jWF6O0,13971
|
|
422
422
|
ccxt/async_support/timex.py,sha256=SMMswaincdUzCI8waSpCnCEMPG5zEWe6UtcE4KteJaI,77060
|
|
423
423
|
ccxt/async_support/tokocrypto.py,sha256=noI2aWGN2rH71WDomTl2GeysjsNbuMbLNHKMTNvJYOs,126690
|
|
424
|
-
ccxt/async_support/toobit.py,sha256=
|
|
424
|
+
ccxt/async_support/toobit.py,sha256=5guTVvFhYj5ix-JoKeoALkTAa2tdPe17_P0bzapDj-g,16861
|
|
425
425
|
ccxt/async_support/tradeogre.py,sha256=gTmxvLXyRX8Ye8OTIrpKLso9QltZ4ZOrwxHklHrvhv8,33954
|
|
426
426
|
ccxt/async_support/twox.py,sha256=wRT6KTNQBSEpeiJnc5anCWGbtyDkla6A0RyyRS_xSMo,12964
|
|
427
427
|
ccxt/async_support/ubitex.py,sha256=lpLvSKKOftf7FjGRfIcJkY1sCWprmJQB-SvEvJIv_FY,16564
|
|
@@ -437,7 +437,7 @@ ccxt/async_support/yobit.py,sha256=FBI7ajvxprTYUqX8zosd7-LntDft8vIEjRTHng5ry8Y,5
|
|
|
437
437
|
ccxt/async_support/zaif.py,sha256=mh0PETLMTJV509zhT7jukddg6S7YhvwhCT7zqxC6YLA,31364
|
|
438
438
|
ccxt/async_support/zonda.py,sha256=7hmHotE5JBd8034d1ZbX3oIeWIpQFrQb8aK-dP3Btx0,85327
|
|
439
439
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
|
440
|
-
ccxt/async_support/base/exchange.py,sha256=
|
|
440
|
+
ccxt/async_support/base/exchange.py,sha256=xsnVIPZbkaSBu5z01QmIH22DBXA6fCTcNrPrTtYSR-c,121269
|
|
441
441
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
|
442
442
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
|
443
443
|
ccxt/async_support/base/ws/cache.py,sha256=xf2VOtfUwloxSlIQ39M1RGZHWQzyS9IGhB5NX6cDcAc,8370
|
|
@@ -449,10 +449,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
|
449
449
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
|
450
450
|
ccxt/base/decimal_to_precision.py,sha256=3XI30u9YudHbTA438397u5rkdlXa3atxwZEfUus3C4k,6803
|
|
451
451
|
ccxt/base/errors.py,sha256=OGhWNvNtRlJOzFx-n1x3ZjTnaPpfWH0Vc0xACS-MeDw,5012
|
|
452
|
-
ccxt/base/exchange.py,sha256=
|
|
452
|
+
ccxt/base/exchange.py,sha256=p5ycaUJJ8gaBK24J4Bv9gPi7O7i-OZlEvb60KgUn_W4,334338
|
|
453
453
|
ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
|
454
454
|
ccxt/base/types.py,sha256=Gvbogh9i7pPH7Z18xesYeDPribqqwq8uKpOv-YODFBs,11505
|
|
455
|
-
ccxt/pro/__init__.py,sha256=
|
|
455
|
+
ccxt/pro/__init__.py,sha256=M_VaFybxi2V0FX5x5cDwSn_4x1_FOoBx_41AesfE9zk,11464
|
|
456
456
|
ccxt/pro/alpaca.py,sha256=REAEZxdv2pY8xjxBGCBca3nPKpIdleVqr-IVpuVmADg,27637
|
|
457
457
|
ccxt/pro/apex.py,sha256=FLBaLN2FESIh9gqHPVwf0IkkIHpxGHHUcFwgBGBEkrA,42018
|
|
458
458
|
ccxt/pro/ascendex.py,sha256=P0DnIMIA-BIGxyoEQBLGtjH-whRhkPbhe8gU2s5V238,37526
|
|
@@ -775,8 +775,8 @@ ccxt/test/tests_async.py,sha256=D5ZDYYW635E2LFEhJt7HfIjbFVCQl3WSBEFnR-QEQzM,9549
|
|
|
775
775
|
ccxt/test/tests_helpers.py,sha256=egM69A2ZFYeVF5hwC1Qt-c5DOeClY5bv4jowmceeFV8,9736
|
|
776
776
|
ccxt/test/tests_init.py,sha256=qM0-Gb0h0p6CANWTkyYZI7wl-iYOcrPur7aj_OKh7m0,1212
|
|
777
777
|
ccxt/test/tests_sync.py,sha256=Rr72cGmoKqbUIIEJJAGh2_QhBc4rIZlBxVtGCQVd4BE,94440
|
|
778
|
-
ccxt_ir-4.9.
|
|
779
|
-
ccxt_ir-4.9.
|
|
780
|
-
ccxt_ir-4.9.
|
|
781
|
-
ccxt_ir-4.9.
|
|
782
|
-
ccxt_ir-4.9.
|
|
778
|
+
ccxt_ir-4.9.17.dist-info/licenses/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
|
|
779
|
+
ccxt_ir-4.9.17.dist-info/METADATA,sha256=4_-hO7LB0lc8eXIOj--BvyMsYf2OBON7nwprTDW5bTM,138934
|
|
780
|
+
ccxt_ir-4.9.17.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
781
|
+
ccxt_ir-4.9.17.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
|
782
|
+
ccxt_ir-4.9.17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|