ccxt 4.2.91__py2.py3-none-any.whl → 4.2.93__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/abstract/bybit.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bybit.py +1 -0
- ccxt/async_support/coinex.py +0 -27
- ccxt/async_support/deribit.py +111 -101
- ccxt/async_support/digifinex.py +1 -45
- ccxt/async_support/kraken.py +55 -6
- ccxt/async_support/probit.py +2 -3
- ccxt/base/exchange.py +29 -11
- ccxt/bybit.py +1 -0
- ccxt/coinex.py +0 -27
- ccxt/deribit.py +111 -101
- ccxt/digifinex.py +1 -45
- ccxt/kraken.py +55 -6
- ccxt/pro/__init__.py +1 -1
- ccxt/probit.py +2 -3
- {ccxt-4.2.91.dist-info → ccxt-4.2.93.dist-info}/METADATA +4 -4
- {ccxt-4.2.91.dist-info → ccxt-4.2.93.dist-info}/RECORD +22 -22
- {ccxt-4.2.91.dist-info → ccxt-4.2.93.dist-info}/WHEEL +0 -0
- {ccxt-4.2.91.dist-info → ccxt-4.2.93.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bybit.py
CHANGED
@@ -173,6 +173,7 @@ class ImplicitAPI:
|
|
173
173
|
private_get_v5_broker_earning_record = privateGetV5BrokerEarningRecord = Entry('v5/broker/earning-record', 'private', 'GET', {'cost': 5})
|
174
174
|
private_get_v5_broker_earnings_info = privateGetV5BrokerEarningsInfo = Entry('v5/broker/earnings-info', 'private', 'GET', {'cost': 5})
|
175
175
|
private_get_v5_broker_account_info = privateGetV5BrokerAccountInfo = Entry('v5/broker/account-info', 'private', 'GET', {'cost': 5})
|
176
|
+
private_get_v5_broker_asset_query_sub_member_deposit_record = privateGetV5BrokerAssetQuerySubMemberDepositRecord = Entry('v5/broker/asset/query-sub-member-deposit-record', 'private', 'GET', {'cost': 10})
|
176
177
|
private_post_option_usdc_openapi_private_v1_place_order = privatePostOptionUsdcOpenapiPrivateV1PlaceOrder = Entry('option/usdc/openapi/private/v1/place-order', 'private', 'POST', {'cost': 2.5})
|
177
178
|
private_post_option_usdc_openapi_private_v1_replace_order = privatePostOptionUsdcOpenapiPrivateV1ReplaceOrder = Entry('option/usdc/openapi/private/v1/replace-order', 'private', 'POST', {'cost': 2.5})
|
178
179
|
private_post_option_usdc_openapi_private_v1_cancel_order = privatePostOptionUsdcOpenapiPrivateV1CancelOrder = Entry('option/usdc/openapi/private/v1/cancel-order', 'private', 'POST', {'cost': 2.5})
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/bybit.py
CHANGED
ccxt/async_support/coinex.py
CHANGED
@@ -3857,33 +3857,6 @@ class coinex(Exchange, ImplicitAPI):
|
|
3857
3857
|
data = self.safe_value(response, 'data', {})
|
3858
3858
|
return self.parse_leverage_tiers(data, symbols, None)
|
3859
3859
|
|
3860
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3861
|
-
#
|
3862
|
-
# {
|
3863
|
-
# "BTCUSD": [
|
3864
|
-
# ["500001", "100", "0.005"],
|
3865
|
-
# ["1000001", "50", "0.01"],
|
3866
|
-
# ["2000001", "30", "0.015"],
|
3867
|
-
# ["5000001", "20", "0.02"],
|
3868
|
-
# ["10000001", "15", "0.025"],
|
3869
|
-
# ["20000001", "10", "0.03"]
|
3870
|
-
# ],
|
3871
|
-
# ...
|
3872
|
-
# }
|
3873
|
-
#
|
3874
|
-
tiers = {}
|
3875
|
-
marketIds = list(response.keys())
|
3876
|
-
for i in range(0, len(marketIds)):
|
3877
|
-
marketId = marketIds[i]
|
3878
|
-
market = self.safe_market(marketId, None, None, 'spot')
|
3879
|
-
symbol = self.safe_string(market, 'symbol')
|
3880
|
-
symbolsLength = 0
|
3881
|
-
if symbols is not None:
|
3882
|
-
symbolsLength = len(symbols)
|
3883
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3884
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[marketId], market)
|
3885
|
-
return tiers
|
3886
|
-
|
3887
3860
|
def parse_market_leverage_tiers(self, item, market: Market = None):
|
3888
3861
|
tiers = []
|
3889
3862
|
minNotional = 0
|
ccxt/async_support/deribit.py
CHANGED
@@ -692,117 +692,127 @@ class deribit(Exchange, ImplicitAPI):
|
|
692
692
|
"""
|
693
693
|
retrieves data on all markets for deribit
|
694
694
|
:see: https://docs.deribit.com/#public-get_currencies
|
695
|
+
:see: https://docs.deribit.com/#public-get_instruments
|
695
696
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
696
697
|
:returns dict[]: an array of objects representing market data
|
697
698
|
"""
|
698
|
-
|
699
|
-
#
|
700
|
-
# {
|
701
|
-
# "jsonrpc": "2.0",
|
702
|
-
# "result": [
|
703
|
-
# {
|
704
|
-
# "withdrawal_priorities": [
|
705
|
-
# {value: 0.15, name: "very_low"},
|
706
|
-
# {value: 1.5, name: "very_high"},
|
707
|
-
# ],
|
708
|
-
# "withdrawal_fee": 0.0005,
|
709
|
-
# "min_withdrawal_fee": 0.0005,
|
710
|
-
# "min_confirmations": 1,
|
711
|
-
# "fee_precision": 4,
|
712
|
-
# "currency_long": "Bitcoin",
|
713
|
-
# "currency": "BTC",
|
714
|
-
# "coin_type": "BITCOIN"
|
715
|
-
# }
|
716
|
-
# ],
|
717
|
-
# "usIn": 1583761588590479,
|
718
|
-
# "usOut": 1583761588590544,
|
719
|
-
# "usDiff": 65,
|
720
|
-
# "testnet": False
|
721
|
-
# }
|
722
|
-
#
|
723
|
-
parsedMarkets = {}
|
724
|
-
currenciesResult = self.safe_value(currenciesResponse, 'result', [])
|
699
|
+
instrumentsResponses = []
|
725
700
|
result = []
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
701
|
+
parsedMarkets = {}
|
702
|
+
fetchAllMarkets = None
|
703
|
+
fetchAllMarkets, params = self.handle_option_and_params(params, 'fetchMarkets', 'fetchAllMarkets', True)
|
704
|
+
if fetchAllMarkets:
|
705
|
+
instrumentsResponse = await self.publicGetGetInstruments(params)
|
706
|
+
instrumentsResponses.append(instrumentsResponse)
|
707
|
+
else:
|
708
|
+
currenciesResponse = await self.publicGetGetCurrencies(params)
|
732
709
|
#
|
733
710
|
# {
|
734
|
-
# "jsonrpc":"2.0",
|
735
|
-
# "result":[
|
736
|
-
# {
|
737
|
-
# "tick_size":0.0005,
|
738
|
-
# "taker_commission":0.0003,
|
739
|
-
# "strike":52000.0,
|
740
|
-
# "settlement_period":"month",
|
741
|
-
# "settlement_currency":"BTC",
|
742
|
-
# "quote_currency":"BTC",
|
743
|
-
# "option_type":"put", # put, call
|
744
|
-
# "min_trade_amount":0.1,
|
745
|
-
# "maker_commission":0.0003,
|
746
|
-
# "kind":"option",
|
747
|
-
# "is_active":true,
|
748
|
-
# "instrument_name":"BTC-24JUN22-52000-P",
|
749
|
-
# "expiration_timestamp":1656057600000,
|
750
|
-
# "creation_timestamp":1648199543000,
|
751
|
-
# "counter_currency":"USD",
|
752
|
-
# "contract_size":1.0,
|
753
|
-
# "block_trade_commission":0.0003,
|
754
|
-
# "base_currency":"BTC"
|
755
|
-
# },
|
711
|
+
# "jsonrpc": "2.0",
|
712
|
+
# "result": [
|
756
713
|
# {
|
757
|
-
# "
|
758
|
-
#
|
759
|
-
#
|
760
|
-
#
|
761
|
-
# "
|
762
|
-
# "
|
763
|
-
# "
|
764
|
-
# "
|
765
|
-
# "
|
766
|
-
# "
|
767
|
-
# "
|
768
|
-
#
|
769
|
-
# "future_type":"reversed",
|
770
|
-
# "expiration_timestamp":1653638400000,
|
771
|
-
# "creation_timestamp":1648195209000,
|
772
|
-
# "counter_currency":"USD",
|
773
|
-
# "contract_size":10.0,
|
774
|
-
# "block_trade_commission":0.0001,
|
775
|
-
# "base_currency":"BTC"
|
776
|
-
# },
|
777
|
-
# {
|
778
|
-
# "tick_size":0.5,
|
779
|
-
# "taker_commission":0.0005,
|
780
|
-
# "settlement_period":"perpetual",
|
781
|
-
# "settlement_currency":"BTC",
|
782
|
-
# "quote_currency":"USD",
|
783
|
-
# "min_trade_amount":10.0,
|
784
|
-
# "max_liquidation_commission":0.0075,
|
785
|
-
# "max_leverage":50,
|
786
|
-
# "maker_commission":0.0,
|
787
|
-
# "kind":"future",
|
788
|
-
# "is_active":true,
|
789
|
-
# "instrument_name":"BTC-PERPETUAL",
|
790
|
-
# "future_type":"reversed",
|
791
|
-
# "expiration_timestamp":32503708800000,
|
792
|
-
# "creation_timestamp":1534242287000,
|
793
|
-
# "counter_currency":"USD",
|
794
|
-
# "contract_size":10.0,
|
795
|
-
# "block_trade_commission":0.0001,
|
796
|
-
# "base_currency":"BTC"
|
797
|
-
# },
|
714
|
+
# "withdrawal_priorities": [
|
715
|
+
# {value: 0.15, name: "very_low"},
|
716
|
+
# {value: 1.5, name: "very_high"},
|
717
|
+
# ],
|
718
|
+
# "withdrawal_fee": 0.0005,
|
719
|
+
# "min_withdrawal_fee": 0.0005,
|
720
|
+
# "min_confirmations": 1,
|
721
|
+
# "fee_precision": 4,
|
722
|
+
# "currency_long": "Bitcoin",
|
723
|
+
# "currency": "BTC",
|
724
|
+
# "coin_type": "BITCOIN"
|
725
|
+
# }
|
798
726
|
# ],
|
799
|
-
# "usIn":
|
800
|
-
# "usOut":
|
801
|
-
# "usDiff":
|
802
|
-
# "testnet":
|
727
|
+
# "usIn": 1583761588590479,
|
728
|
+
# "usOut": 1583761588590544,
|
729
|
+
# "usDiff": 65,
|
730
|
+
# "testnet": False
|
803
731
|
# }
|
804
732
|
#
|
805
|
-
|
733
|
+
currenciesResult = self.safe_value(currenciesResponse, 'result', [])
|
734
|
+
for i in range(0, len(currenciesResult)):
|
735
|
+
currencyId = self.safe_string(currenciesResult[i], 'currency')
|
736
|
+
request = {
|
737
|
+
'currency': currencyId,
|
738
|
+
}
|
739
|
+
instrumentsResponse = await self.publicGetGetInstruments(self.extend(request, params))
|
740
|
+
#
|
741
|
+
# {
|
742
|
+
# "jsonrpc":"2.0",
|
743
|
+
# "result":[
|
744
|
+
# {
|
745
|
+
# "tick_size":0.0005,
|
746
|
+
# "taker_commission":0.0003,
|
747
|
+
# "strike":52000.0,
|
748
|
+
# "settlement_period":"month",
|
749
|
+
# "settlement_currency":"BTC",
|
750
|
+
# "quote_currency":"BTC",
|
751
|
+
# "option_type":"put", # put, call
|
752
|
+
# "min_trade_amount":0.1,
|
753
|
+
# "maker_commission":0.0003,
|
754
|
+
# "kind":"option",
|
755
|
+
# "is_active":true,
|
756
|
+
# "instrument_name":"BTC-24JUN22-52000-P",
|
757
|
+
# "expiration_timestamp":1656057600000,
|
758
|
+
# "creation_timestamp":1648199543000,
|
759
|
+
# "counter_currency":"USD",
|
760
|
+
# "contract_size":1.0,
|
761
|
+
# "block_trade_commission":0.0003,
|
762
|
+
# "base_currency":"BTC"
|
763
|
+
# },
|
764
|
+
# {
|
765
|
+
# "tick_size":0.5,
|
766
|
+
# "taker_commission":0.0005,
|
767
|
+
# "settlement_period":"month", # month, week
|
768
|
+
# "settlement_currency":"BTC",
|
769
|
+
# "quote_currency":"USD",
|
770
|
+
# "min_trade_amount":10.0,
|
771
|
+
# "max_liquidation_commission":0.0075,
|
772
|
+
# "max_leverage":50,
|
773
|
+
# "maker_commission":0.0,
|
774
|
+
# "kind":"future",
|
775
|
+
# "is_active":true,
|
776
|
+
# "instrument_name":"BTC-27MAY22",
|
777
|
+
# "future_type":"reversed",
|
778
|
+
# "expiration_timestamp":1653638400000,
|
779
|
+
# "creation_timestamp":1648195209000,
|
780
|
+
# "counter_currency":"USD",
|
781
|
+
# "contract_size":10.0,
|
782
|
+
# "block_trade_commission":0.0001,
|
783
|
+
# "base_currency":"BTC"
|
784
|
+
# },
|
785
|
+
# {
|
786
|
+
# "tick_size":0.5,
|
787
|
+
# "taker_commission":0.0005,
|
788
|
+
# "settlement_period":"perpetual",
|
789
|
+
# "settlement_currency":"BTC",
|
790
|
+
# "quote_currency":"USD",
|
791
|
+
# "min_trade_amount":10.0,
|
792
|
+
# "max_liquidation_commission":0.0075,
|
793
|
+
# "max_leverage":50,
|
794
|
+
# "maker_commission":0.0,
|
795
|
+
# "kind":"future",
|
796
|
+
# "is_active":true,
|
797
|
+
# "instrument_name":"BTC-PERPETUAL",
|
798
|
+
# "future_type":"reversed",
|
799
|
+
# "expiration_timestamp":32503708800000,
|
800
|
+
# "creation_timestamp":1534242287000,
|
801
|
+
# "counter_currency":"USD",
|
802
|
+
# "contract_size":10.0,
|
803
|
+
# "block_trade_commission":0.0001,
|
804
|
+
# "base_currency":"BTC"
|
805
|
+
# },
|
806
|
+
# ],
|
807
|
+
# "usIn":1648691472831791,
|
808
|
+
# "usOut":1648691472831896,
|
809
|
+
# "usDiff":105,
|
810
|
+
# "testnet":false
|
811
|
+
# }
|
812
|
+
#
|
813
|
+
instrumentsResponses.append(instrumentsResponse)
|
814
|
+
for i in range(0, len(instrumentsResponses)):
|
815
|
+
instrumentsResult = self.safe_value(instrumentsResponses[i], 'result', [])
|
806
816
|
for k in range(0, len(instrumentsResult)):
|
807
817
|
market = instrumentsResult[k]
|
808
818
|
kind = self.safe_string(market, 'kind')
|
ccxt/async_support/digifinex.py
CHANGED
@@ -3519,51 +3519,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3519
3519
|
#
|
3520
3520
|
data = self.safe_value(response, 'data', [])
|
3521
3521
|
symbols = self.market_symbols(symbols)
|
3522
|
-
return self.parse_leverage_tiers(data, symbols, '
|
3523
|
-
|
3524
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3525
|
-
#
|
3526
|
-
# [
|
3527
|
-
# {
|
3528
|
-
# "instrument_id": "BTCUSDTPERP",
|
3529
|
-
# "type": "REAL",
|
3530
|
-
# "contract_type": "PERPETUAL",
|
3531
|
-
# "base_currency": "BTC",
|
3532
|
-
# "quote_currency": "USDT",
|
3533
|
-
# "clear_currency": "USDT",
|
3534
|
-
# "contract_value": "0.001",
|
3535
|
-
# "contract_value_currency": "BTC",
|
3536
|
-
# "is_inverse": False,
|
3537
|
-
# "is_trading": True,
|
3538
|
-
# "status": "ONLINE",
|
3539
|
-
# "price_precision": 1,
|
3540
|
-
# "tick_size": "0.1",
|
3541
|
-
# "min_order_amount": 1,
|
3542
|
-
# "open_max_limits": [
|
3543
|
-
# {
|
3544
|
-
# "leverage": "50",
|
3545
|
-
# "max_limit": "1000000"
|
3546
|
-
# }
|
3547
|
-
# ]
|
3548
|
-
# },
|
3549
|
-
# ]
|
3550
|
-
#
|
3551
|
-
tiers = {}
|
3552
|
-
result = {}
|
3553
|
-
for i in range(0, len(response)):
|
3554
|
-
entry = response[i]
|
3555
|
-
marketId = self.safe_string(entry, 'instrument_id')
|
3556
|
-
market = self.safe_market(marketId)
|
3557
|
-
symbol = self.safe_symbol(marketId, market)
|
3558
|
-
symbolsLength = 0
|
3559
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3560
|
-
if symbols is not None:
|
3561
|
-
symbolsLength = len(symbols)
|
3562
|
-
if self.in_array(symbol, symbols):
|
3563
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3564
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3565
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3566
|
-
return result
|
3522
|
+
return self.parse_leverage_tiers(data, symbols, 'instrument_id')
|
3567
3523
|
|
3568
3524
|
async def fetch_market_leverage_tiers(self, symbol: str, params={}):
|
3569
3525
|
"""
|
ccxt/async_support/kraken.py
CHANGED
@@ -2529,15 +2529,15 @@ class kraken(Exchange, ImplicitAPI):
|
|
2529
2529
|
"""
|
2530
2530
|
fetch all open positions
|
2531
2531
|
:see: https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenPositions
|
2532
|
-
:param str[]
|
2532
|
+
:param str[] [symbols]: not used by kraken fetchPositions()
|
2533
2533
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2534
2534
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
|
2535
2535
|
"""
|
2536
2536
|
await self.load_markets()
|
2537
2537
|
request = {
|
2538
2538
|
# 'txid': 'comma delimited list of transaction ids to restrict output to',
|
2539
|
-
|
2540
|
-
|
2539
|
+
'docalcs': 'true', # whether or not to include profit/loss calculations
|
2540
|
+
'consolidation': 'market', # what to consolidate the positions data around, market will consolidate positions based on market pair
|
2541
2541
|
}
|
2542
2542
|
response = await self.privatePostOpenPositions(self.extend(request, params))
|
2543
2543
|
#
|
@@ -2585,9 +2585,58 @@ class kraken(Exchange, ImplicitAPI):
|
|
2585
2585
|
# ]
|
2586
2586
|
# }
|
2587
2587
|
#
|
2588
|
-
|
2589
|
-
|
2590
|
-
|
2588
|
+
symbols = self.market_symbols(symbols)
|
2589
|
+
result = self.safe_list(response, 'result')
|
2590
|
+
results = self.parse_positions(result, symbols)
|
2591
|
+
return self.filter_by_array_positions(results, 'symbol', symbols, False)
|
2592
|
+
|
2593
|
+
def parse_position(self, position, market: Market = None):
|
2594
|
+
#
|
2595
|
+
# {
|
2596
|
+
# "pair": "ETHUSDT",
|
2597
|
+
# "positions": "1",
|
2598
|
+
# "type": "buy",
|
2599
|
+
# "leverage": "2.00000",
|
2600
|
+
# "cost": "28.49800",
|
2601
|
+
# "fee": "0.07979",
|
2602
|
+
# "vol": "0.02000000",
|
2603
|
+
# "vol_closed": "0.00000000",
|
2604
|
+
# "margin": "14.24900"
|
2605
|
+
# }
|
2606
|
+
#
|
2607
|
+
marketId = self.safe_string(position, 'pair')
|
2608
|
+
rawSide = self.safe_string(position, 'type')
|
2609
|
+
side = 'long' if (rawSide == 'buy') else 'short'
|
2610
|
+
return self.safe_position({
|
2611
|
+
'info': position,
|
2612
|
+
'id': None,
|
2613
|
+
'symbol': self.safe_symbol(marketId, market),
|
2614
|
+
'notional': None,
|
2615
|
+
'marginMode': None,
|
2616
|
+
'liquidationPrice': None,
|
2617
|
+
'entryPrice': None,
|
2618
|
+
'unrealizedPnl': self.safe_number(position, 'net'),
|
2619
|
+
'realizedPnl': None,
|
2620
|
+
'percentage': None,
|
2621
|
+
'contracts': self.safe_number(position, 'vol'),
|
2622
|
+
'contractSize': None,
|
2623
|
+
'markPrice': None,
|
2624
|
+
'lastPrice': None,
|
2625
|
+
'side': side,
|
2626
|
+
'hedged': None,
|
2627
|
+
'timestamp': None,
|
2628
|
+
'datetime': None,
|
2629
|
+
'lastUpdateTimestamp': None,
|
2630
|
+
'maintenanceMargin': None,
|
2631
|
+
'maintenanceMarginPercentage': None,
|
2632
|
+
'collateral': None,
|
2633
|
+
'initialMargin': self.safe_number(position, 'margin'),
|
2634
|
+
'initialMarginPercentage': None,
|
2635
|
+
'leverage': self.safe_number(position, 'leverage'),
|
2636
|
+
'marginRatio': None,
|
2637
|
+
'stopLossPrice': None,
|
2638
|
+
'takeProfitPrice': None,
|
2639
|
+
})
|
2591
2640
|
|
2592
2641
|
def parse_account_type(self, account):
|
2593
2642
|
accountByType = {
|
ccxt/async_support/probit.py
CHANGED
@@ -1404,10 +1404,9 @@ class probit(Exchange, ImplicitAPI):
|
|
1404
1404
|
result = await self.fetch_transactions(code, since, limit, self.extend(request, params))
|
1405
1405
|
return result
|
1406
1406
|
|
1407
|
-
async def
|
1407
|
+
async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1408
1408
|
"""
|
1409
|
-
|
1410
|
-
use fetchDepositsWithdrawals instead
|
1409
|
+
fetch history of deposits and withdrawals
|
1411
1410
|
:see: https://docs-en.probit.com/reference/transferpayment
|
1412
1411
|
:param str code: unified currency code
|
1413
1412
|
:param int [since]: the earliest time in ms to fetch transactions for
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.2.
|
7
|
+
__version__ = '4.2.93'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -3441,18 +3441,33 @@ class Exchange(object):
|
|
3441
3441
|
sorted = self.sort_by(results, 0)
|
3442
3442
|
return self.filter_by_since_limit(sorted, since, limit, 0)
|
3443
3443
|
|
3444
|
-
def parse_leverage_tiers(self, response:
|
3444
|
+
def parse_leverage_tiers(self, response: Any, symbols: List[str] = None, marketIdKey=None):
|
3445
3445
|
# marketIdKey should only be None when response is a dictionary
|
3446
3446
|
symbols = self.market_symbols(symbols)
|
3447
3447
|
tiers = {}
|
3448
|
-
|
3449
|
-
|
3450
|
-
|
3451
|
-
|
3452
|
-
|
3453
|
-
|
3454
|
-
|
3455
|
-
|
3448
|
+
symbolsLength = 0
|
3449
|
+
if symbols is not None:
|
3450
|
+
symbolsLength = len(symbols)
|
3451
|
+
noSymbols = (symbols is None) or (symbolsLength == 0)
|
3452
|
+
if isinstance(response, list):
|
3453
|
+
for i in range(0, len(response)):
|
3454
|
+
item = response[i]
|
3455
|
+
id = self.safe_string(item, marketIdKey)
|
3456
|
+
market = self.safe_market(id, None, None, 'swap')
|
3457
|
+
symbol = market['symbol']
|
3458
|
+
contract = self.safe_bool(market, 'contract', False)
|
3459
|
+
if contract and (noSymbols or self.in_array(symbol, symbols)):
|
3460
|
+
tiers[symbol] = self.parse_market_leverage_tiers(item, market)
|
3461
|
+
else:
|
3462
|
+
keys = list(response.keys())
|
3463
|
+
for i in range(0, len(keys)):
|
3464
|
+
marketId = keys[i]
|
3465
|
+
item = response[marketId]
|
3466
|
+
market = self.safe_market(marketId, None, None, 'swap')
|
3467
|
+
symbol = market['symbol']
|
3468
|
+
contract = self.safe_bool(market, 'contract', False)
|
3469
|
+
if contract and (noSymbols or self.in_array(symbol, symbols)):
|
3470
|
+
tiers[symbol] = self.parse_market_leverage_tiers(item, market)
|
3456
3471
|
return tiers
|
3457
3472
|
|
3458
3473
|
def load_trading_limits(self, symbols: List[str] = None, reload=False, params={}):
|
@@ -5452,7 +5467,7 @@ class Exchange(object):
|
|
5452
5467
|
return reconstructedDate
|
5453
5468
|
|
5454
5469
|
def convert_market_id_expire_date(self, date: str):
|
5455
|
-
# parse
|
5470
|
+
# parse 03JAN24 to 240103
|
5456
5471
|
monthMappping = {
|
5457
5472
|
'JAN': '01',
|
5458
5473
|
'FEB': '02',
|
@@ -5467,6 +5482,9 @@ class Exchange(object):
|
|
5467
5482
|
'NOV': '11',
|
5468
5483
|
'DEC': '12',
|
5469
5484
|
}
|
5485
|
+
# if exchange omits first zero and provides i.e. '3JAN24' instead of '03JAN24'
|
5486
|
+
if len(date) == 6:
|
5487
|
+
date = '0' + date
|
5470
5488
|
year = date[0:2]
|
5471
5489
|
monthName = date[2:5]
|
5472
5490
|
month = self.safe_string(monthMappping, monthName)
|
ccxt/bybit.py
CHANGED
ccxt/coinex.py
CHANGED
@@ -3856,33 +3856,6 @@ class coinex(Exchange, ImplicitAPI):
|
|
3856
3856
|
data = self.safe_value(response, 'data', {})
|
3857
3857
|
return self.parse_leverage_tiers(data, symbols, None)
|
3858
3858
|
|
3859
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3860
|
-
#
|
3861
|
-
# {
|
3862
|
-
# "BTCUSD": [
|
3863
|
-
# ["500001", "100", "0.005"],
|
3864
|
-
# ["1000001", "50", "0.01"],
|
3865
|
-
# ["2000001", "30", "0.015"],
|
3866
|
-
# ["5000001", "20", "0.02"],
|
3867
|
-
# ["10000001", "15", "0.025"],
|
3868
|
-
# ["20000001", "10", "0.03"]
|
3869
|
-
# ],
|
3870
|
-
# ...
|
3871
|
-
# }
|
3872
|
-
#
|
3873
|
-
tiers = {}
|
3874
|
-
marketIds = list(response.keys())
|
3875
|
-
for i in range(0, len(marketIds)):
|
3876
|
-
marketId = marketIds[i]
|
3877
|
-
market = self.safe_market(marketId, None, None, 'spot')
|
3878
|
-
symbol = self.safe_string(market, 'symbol')
|
3879
|
-
symbolsLength = 0
|
3880
|
-
if symbols is not None:
|
3881
|
-
symbolsLength = len(symbols)
|
3882
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3883
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[marketId], market)
|
3884
|
-
return tiers
|
3885
|
-
|
3886
3859
|
def parse_market_leverage_tiers(self, item, market: Market = None):
|
3887
3860
|
tiers = []
|
3888
3861
|
minNotional = 0
|
ccxt/deribit.py
CHANGED
@@ -692,117 +692,127 @@ class deribit(Exchange, ImplicitAPI):
|
|
692
692
|
"""
|
693
693
|
retrieves data on all markets for deribit
|
694
694
|
:see: https://docs.deribit.com/#public-get_currencies
|
695
|
+
:see: https://docs.deribit.com/#public-get_instruments
|
695
696
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
696
697
|
:returns dict[]: an array of objects representing market data
|
697
698
|
"""
|
698
|
-
|
699
|
-
#
|
700
|
-
# {
|
701
|
-
# "jsonrpc": "2.0",
|
702
|
-
# "result": [
|
703
|
-
# {
|
704
|
-
# "withdrawal_priorities": [
|
705
|
-
# {value: 0.15, name: "very_low"},
|
706
|
-
# {value: 1.5, name: "very_high"},
|
707
|
-
# ],
|
708
|
-
# "withdrawal_fee": 0.0005,
|
709
|
-
# "min_withdrawal_fee": 0.0005,
|
710
|
-
# "min_confirmations": 1,
|
711
|
-
# "fee_precision": 4,
|
712
|
-
# "currency_long": "Bitcoin",
|
713
|
-
# "currency": "BTC",
|
714
|
-
# "coin_type": "BITCOIN"
|
715
|
-
# }
|
716
|
-
# ],
|
717
|
-
# "usIn": 1583761588590479,
|
718
|
-
# "usOut": 1583761588590544,
|
719
|
-
# "usDiff": 65,
|
720
|
-
# "testnet": False
|
721
|
-
# }
|
722
|
-
#
|
723
|
-
parsedMarkets = {}
|
724
|
-
currenciesResult = self.safe_value(currenciesResponse, 'result', [])
|
699
|
+
instrumentsResponses = []
|
725
700
|
result = []
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
701
|
+
parsedMarkets = {}
|
702
|
+
fetchAllMarkets = None
|
703
|
+
fetchAllMarkets, params = self.handle_option_and_params(params, 'fetchMarkets', 'fetchAllMarkets', True)
|
704
|
+
if fetchAllMarkets:
|
705
|
+
instrumentsResponse = self.publicGetGetInstruments(params)
|
706
|
+
instrumentsResponses.append(instrumentsResponse)
|
707
|
+
else:
|
708
|
+
currenciesResponse = self.publicGetGetCurrencies(params)
|
732
709
|
#
|
733
710
|
# {
|
734
|
-
# "jsonrpc":"2.0",
|
735
|
-
# "result":[
|
736
|
-
# {
|
737
|
-
# "tick_size":0.0005,
|
738
|
-
# "taker_commission":0.0003,
|
739
|
-
# "strike":52000.0,
|
740
|
-
# "settlement_period":"month",
|
741
|
-
# "settlement_currency":"BTC",
|
742
|
-
# "quote_currency":"BTC",
|
743
|
-
# "option_type":"put", # put, call
|
744
|
-
# "min_trade_amount":0.1,
|
745
|
-
# "maker_commission":0.0003,
|
746
|
-
# "kind":"option",
|
747
|
-
# "is_active":true,
|
748
|
-
# "instrument_name":"BTC-24JUN22-52000-P",
|
749
|
-
# "expiration_timestamp":1656057600000,
|
750
|
-
# "creation_timestamp":1648199543000,
|
751
|
-
# "counter_currency":"USD",
|
752
|
-
# "contract_size":1.0,
|
753
|
-
# "block_trade_commission":0.0003,
|
754
|
-
# "base_currency":"BTC"
|
755
|
-
# },
|
711
|
+
# "jsonrpc": "2.0",
|
712
|
+
# "result": [
|
756
713
|
# {
|
757
|
-
# "
|
758
|
-
#
|
759
|
-
#
|
760
|
-
#
|
761
|
-
# "
|
762
|
-
# "
|
763
|
-
# "
|
764
|
-
# "
|
765
|
-
# "
|
766
|
-
# "
|
767
|
-
# "
|
768
|
-
#
|
769
|
-
# "future_type":"reversed",
|
770
|
-
# "expiration_timestamp":1653638400000,
|
771
|
-
# "creation_timestamp":1648195209000,
|
772
|
-
# "counter_currency":"USD",
|
773
|
-
# "contract_size":10.0,
|
774
|
-
# "block_trade_commission":0.0001,
|
775
|
-
# "base_currency":"BTC"
|
776
|
-
# },
|
777
|
-
# {
|
778
|
-
# "tick_size":0.5,
|
779
|
-
# "taker_commission":0.0005,
|
780
|
-
# "settlement_period":"perpetual",
|
781
|
-
# "settlement_currency":"BTC",
|
782
|
-
# "quote_currency":"USD",
|
783
|
-
# "min_trade_amount":10.0,
|
784
|
-
# "max_liquidation_commission":0.0075,
|
785
|
-
# "max_leverage":50,
|
786
|
-
# "maker_commission":0.0,
|
787
|
-
# "kind":"future",
|
788
|
-
# "is_active":true,
|
789
|
-
# "instrument_name":"BTC-PERPETUAL",
|
790
|
-
# "future_type":"reversed",
|
791
|
-
# "expiration_timestamp":32503708800000,
|
792
|
-
# "creation_timestamp":1534242287000,
|
793
|
-
# "counter_currency":"USD",
|
794
|
-
# "contract_size":10.0,
|
795
|
-
# "block_trade_commission":0.0001,
|
796
|
-
# "base_currency":"BTC"
|
797
|
-
# },
|
714
|
+
# "withdrawal_priorities": [
|
715
|
+
# {value: 0.15, name: "very_low"},
|
716
|
+
# {value: 1.5, name: "very_high"},
|
717
|
+
# ],
|
718
|
+
# "withdrawal_fee": 0.0005,
|
719
|
+
# "min_withdrawal_fee": 0.0005,
|
720
|
+
# "min_confirmations": 1,
|
721
|
+
# "fee_precision": 4,
|
722
|
+
# "currency_long": "Bitcoin",
|
723
|
+
# "currency": "BTC",
|
724
|
+
# "coin_type": "BITCOIN"
|
725
|
+
# }
|
798
726
|
# ],
|
799
|
-
# "usIn":
|
800
|
-
# "usOut":
|
801
|
-
# "usDiff":
|
802
|
-
# "testnet":
|
727
|
+
# "usIn": 1583761588590479,
|
728
|
+
# "usOut": 1583761588590544,
|
729
|
+
# "usDiff": 65,
|
730
|
+
# "testnet": False
|
803
731
|
# }
|
804
732
|
#
|
805
|
-
|
733
|
+
currenciesResult = self.safe_value(currenciesResponse, 'result', [])
|
734
|
+
for i in range(0, len(currenciesResult)):
|
735
|
+
currencyId = self.safe_string(currenciesResult[i], 'currency')
|
736
|
+
request = {
|
737
|
+
'currency': currencyId,
|
738
|
+
}
|
739
|
+
instrumentsResponse = self.publicGetGetInstruments(self.extend(request, params))
|
740
|
+
#
|
741
|
+
# {
|
742
|
+
# "jsonrpc":"2.0",
|
743
|
+
# "result":[
|
744
|
+
# {
|
745
|
+
# "tick_size":0.0005,
|
746
|
+
# "taker_commission":0.0003,
|
747
|
+
# "strike":52000.0,
|
748
|
+
# "settlement_period":"month",
|
749
|
+
# "settlement_currency":"BTC",
|
750
|
+
# "quote_currency":"BTC",
|
751
|
+
# "option_type":"put", # put, call
|
752
|
+
# "min_trade_amount":0.1,
|
753
|
+
# "maker_commission":0.0003,
|
754
|
+
# "kind":"option",
|
755
|
+
# "is_active":true,
|
756
|
+
# "instrument_name":"BTC-24JUN22-52000-P",
|
757
|
+
# "expiration_timestamp":1656057600000,
|
758
|
+
# "creation_timestamp":1648199543000,
|
759
|
+
# "counter_currency":"USD",
|
760
|
+
# "contract_size":1.0,
|
761
|
+
# "block_trade_commission":0.0003,
|
762
|
+
# "base_currency":"BTC"
|
763
|
+
# },
|
764
|
+
# {
|
765
|
+
# "tick_size":0.5,
|
766
|
+
# "taker_commission":0.0005,
|
767
|
+
# "settlement_period":"month", # month, week
|
768
|
+
# "settlement_currency":"BTC",
|
769
|
+
# "quote_currency":"USD",
|
770
|
+
# "min_trade_amount":10.0,
|
771
|
+
# "max_liquidation_commission":0.0075,
|
772
|
+
# "max_leverage":50,
|
773
|
+
# "maker_commission":0.0,
|
774
|
+
# "kind":"future",
|
775
|
+
# "is_active":true,
|
776
|
+
# "instrument_name":"BTC-27MAY22",
|
777
|
+
# "future_type":"reversed",
|
778
|
+
# "expiration_timestamp":1653638400000,
|
779
|
+
# "creation_timestamp":1648195209000,
|
780
|
+
# "counter_currency":"USD",
|
781
|
+
# "contract_size":10.0,
|
782
|
+
# "block_trade_commission":0.0001,
|
783
|
+
# "base_currency":"BTC"
|
784
|
+
# },
|
785
|
+
# {
|
786
|
+
# "tick_size":0.5,
|
787
|
+
# "taker_commission":0.0005,
|
788
|
+
# "settlement_period":"perpetual",
|
789
|
+
# "settlement_currency":"BTC",
|
790
|
+
# "quote_currency":"USD",
|
791
|
+
# "min_trade_amount":10.0,
|
792
|
+
# "max_liquidation_commission":0.0075,
|
793
|
+
# "max_leverage":50,
|
794
|
+
# "maker_commission":0.0,
|
795
|
+
# "kind":"future",
|
796
|
+
# "is_active":true,
|
797
|
+
# "instrument_name":"BTC-PERPETUAL",
|
798
|
+
# "future_type":"reversed",
|
799
|
+
# "expiration_timestamp":32503708800000,
|
800
|
+
# "creation_timestamp":1534242287000,
|
801
|
+
# "counter_currency":"USD",
|
802
|
+
# "contract_size":10.0,
|
803
|
+
# "block_trade_commission":0.0001,
|
804
|
+
# "base_currency":"BTC"
|
805
|
+
# },
|
806
|
+
# ],
|
807
|
+
# "usIn":1648691472831791,
|
808
|
+
# "usOut":1648691472831896,
|
809
|
+
# "usDiff":105,
|
810
|
+
# "testnet":false
|
811
|
+
# }
|
812
|
+
#
|
813
|
+
instrumentsResponses.append(instrumentsResponse)
|
814
|
+
for i in range(0, len(instrumentsResponses)):
|
815
|
+
instrumentsResult = self.safe_value(instrumentsResponses[i], 'result', [])
|
806
816
|
for k in range(0, len(instrumentsResult)):
|
807
817
|
market = instrumentsResult[k]
|
808
818
|
kind = self.safe_string(market, 'kind')
|
ccxt/digifinex.py
CHANGED
@@ -3518,51 +3518,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3518
3518
|
#
|
3519
3519
|
data = self.safe_value(response, 'data', [])
|
3520
3520
|
symbols = self.market_symbols(symbols)
|
3521
|
-
return self.parse_leverage_tiers(data, symbols, '
|
3522
|
-
|
3523
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3524
|
-
#
|
3525
|
-
# [
|
3526
|
-
# {
|
3527
|
-
# "instrument_id": "BTCUSDTPERP",
|
3528
|
-
# "type": "REAL",
|
3529
|
-
# "contract_type": "PERPETUAL",
|
3530
|
-
# "base_currency": "BTC",
|
3531
|
-
# "quote_currency": "USDT",
|
3532
|
-
# "clear_currency": "USDT",
|
3533
|
-
# "contract_value": "0.001",
|
3534
|
-
# "contract_value_currency": "BTC",
|
3535
|
-
# "is_inverse": False,
|
3536
|
-
# "is_trading": True,
|
3537
|
-
# "status": "ONLINE",
|
3538
|
-
# "price_precision": 1,
|
3539
|
-
# "tick_size": "0.1",
|
3540
|
-
# "min_order_amount": 1,
|
3541
|
-
# "open_max_limits": [
|
3542
|
-
# {
|
3543
|
-
# "leverage": "50",
|
3544
|
-
# "max_limit": "1000000"
|
3545
|
-
# }
|
3546
|
-
# ]
|
3547
|
-
# },
|
3548
|
-
# ]
|
3549
|
-
#
|
3550
|
-
tiers = {}
|
3551
|
-
result = {}
|
3552
|
-
for i in range(0, len(response)):
|
3553
|
-
entry = response[i]
|
3554
|
-
marketId = self.safe_string(entry, 'instrument_id')
|
3555
|
-
market = self.safe_market(marketId)
|
3556
|
-
symbol = self.safe_symbol(marketId, market)
|
3557
|
-
symbolsLength = 0
|
3558
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3559
|
-
if symbols is not None:
|
3560
|
-
symbolsLength = len(symbols)
|
3561
|
-
if self.in_array(symbol, symbols):
|
3562
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3563
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3564
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3565
|
-
return result
|
3521
|
+
return self.parse_leverage_tiers(data, symbols, 'instrument_id')
|
3566
3522
|
|
3567
3523
|
def fetch_market_leverage_tiers(self, symbol: str, params={}):
|
3568
3524
|
"""
|
ccxt/kraken.py
CHANGED
@@ -2529,15 +2529,15 @@ class kraken(Exchange, ImplicitAPI):
|
|
2529
2529
|
"""
|
2530
2530
|
fetch all open positions
|
2531
2531
|
:see: https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenPositions
|
2532
|
-
:param str[]
|
2532
|
+
:param str[] [symbols]: not used by kraken fetchPositions()
|
2533
2533
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2534
2534
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
|
2535
2535
|
"""
|
2536
2536
|
self.load_markets()
|
2537
2537
|
request = {
|
2538
2538
|
# 'txid': 'comma delimited list of transaction ids to restrict output to',
|
2539
|
-
|
2540
|
-
|
2539
|
+
'docalcs': 'true', # whether or not to include profit/loss calculations
|
2540
|
+
'consolidation': 'market', # what to consolidate the positions data around, market will consolidate positions based on market pair
|
2541
2541
|
}
|
2542
2542
|
response = self.privatePostOpenPositions(self.extend(request, params))
|
2543
2543
|
#
|
@@ -2585,9 +2585,58 @@ class kraken(Exchange, ImplicitAPI):
|
|
2585
2585
|
# ]
|
2586
2586
|
# }
|
2587
2587
|
#
|
2588
|
-
|
2589
|
-
|
2590
|
-
|
2588
|
+
symbols = self.market_symbols(symbols)
|
2589
|
+
result = self.safe_list(response, 'result')
|
2590
|
+
results = self.parse_positions(result, symbols)
|
2591
|
+
return self.filter_by_array_positions(results, 'symbol', symbols, False)
|
2592
|
+
|
2593
|
+
def parse_position(self, position, market: Market = None):
|
2594
|
+
#
|
2595
|
+
# {
|
2596
|
+
# "pair": "ETHUSDT",
|
2597
|
+
# "positions": "1",
|
2598
|
+
# "type": "buy",
|
2599
|
+
# "leverage": "2.00000",
|
2600
|
+
# "cost": "28.49800",
|
2601
|
+
# "fee": "0.07979",
|
2602
|
+
# "vol": "0.02000000",
|
2603
|
+
# "vol_closed": "0.00000000",
|
2604
|
+
# "margin": "14.24900"
|
2605
|
+
# }
|
2606
|
+
#
|
2607
|
+
marketId = self.safe_string(position, 'pair')
|
2608
|
+
rawSide = self.safe_string(position, 'type')
|
2609
|
+
side = 'long' if (rawSide == 'buy') else 'short'
|
2610
|
+
return self.safe_position({
|
2611
|
+
'info': position,
|
2612
|
+
'id': None,
|
2613
|
+
'symbol': self.safe_symbol(marketId, market),
|
2614
|
+
'notional': None,
|
2615
|
+
'marginMode': None,
|
2616
|
+
'liquidationPrice': None,
|
2617
|
+
'entryPrice': None,
|
2618
|
+
'unrealizedPnl': self.safe_number(position, 'net'),
|
2619
|
+
'realizedPnl': None,
|
2620
|
+
'percentage': None,
|
2621
|
+
'contracts': self.safe_number(position, 'vol'),
|
2622
|
+
'contractSize': None,
|
2623
|
+
'markPrice': None,
|
2624
|
+
'lastPrice': None,
|
2625
|
+
'side': side,
|
2626
|
+
'hedged': None,
|
2627
|
+
'timestamp': None,
|
2628
|
+
'datetime': None,
|
2629
|
+
'lastUpdateTimestamp': None,
|
2630
|
+
'maintenanceMargin': None,
|
2631
|
+
'maintenanceMarginPercentage': None,
|
2632
|
+
'collateral': None,
|
2633
|
+
'initialMargin': self.safe_number(position, 'margin'),
|
2634
|
+
'initialMarginPercentage': None,
|
2635
|
+
'leverage': self.safe_number(position, 'leverage'),
|
2636
|
+
'marginRatio': None,
|
2637
|
+
'stopLossPrice': None,
|
2638
|
+
'takeProfitPrice': None,
|
2639
|
+
})
|
2591
2640
|
|
2592
2641
|
def parse_account_type(self, account):
|
2593
2642
|
accountByType = {
|
ccxt/pro/__init__.py
CHANGED
ccxt/probit.py
CHANGED
@@ -1404,10 +1404,9 @@ class probit(Exchange, ImplicitAPI):
|
|
1404
1404
|
result = self.fetch_transactions(code, since, limit, self.extend(request, params))
|
1405
1405
|
return result
|
1406
1406
|
|
1407
|
-
def
|
1407
|
+
def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1408
1408
|
"""
|
1409
|
-
|
1410
|
-
use fetchDepositsWithdrawals instead
|
1409
|
+
fetch history of deposits and withdrawals
|
1411
1410
|
:see: https://docs-en.probit.com/reference/transferpayment
|
1412
1411
|
:param str code: unified currency code
|
1413
1412
|
:param int [since]: the earliest time in ms to fetch transactions for
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.93
|
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
|
@@ -261,13 +261,13 @@ console.log(version, Object.keys(exchanges));
|
|
261
261
|
|
262
262
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
263
263
|
|
264
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
265
|
-
* unpkg: https://unpkg.com/ccxt@4.2.
|
264
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.93/dist/ccxt.browser.js
|
265
|
+
* unpkg: https://unpkg.com/ccxt@4.2.93/dist/ccxt.browser.js
|
266
266
|
|
267
267
|
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.
|
268
268
|
|
269
269
|
```HTML
|
270
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
270
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.93/dist/ccxt.browser.js"></script>
|
271
271
|
```
|
272
272
|
|
273
273
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=tewuItHg-1CDVBxKMatuVFaMw0S-9_pIyEH8ZWTm0W0,15656
|
2
2
|
ccxt/ace.py,sha256=IsKHO7u3J8rJT9wCMdtwlmwPdtjnAwC9ZTMC0uNfs9A,41420
|
3
3
|
ccxt/alpaca.py,sha256=6P2wAEGJQOjjoKQbzv1KvSuZvEZmOX987a1NqB7z9mk,46908
|
4
4
|
ccxt/ascendex.py,sha256=_n4XN1S8WcCVN5pj9N6YvkFRJxEB2rycg4EP4PqlSyk,151300
|
@@ -35,13 +35,13 @@ ccxt/btcalpha.py,sha256=0np0RXEUcYJurfA3UWBiZXKHsvIbfjl_qVcx58sPwCY,36550
|
|
35
35
|
ccxt/btcbox.py,sha256=XBgl9nPQUr0eL_El9-K4AuFODEXbesU6F0euVbvUs04,23341
|
36
36
|
ccxt/btcmarkets.py,sha256=XOoDrXKNLvqMbNTUmTNMkQzsyy7oOh_Dw1USiJ8WjEs,51328
|
37
37
|
ccxt/btcturk.py,sha256=p-_zpUEu0aIK5kR4PXQKnAqr9P0ajFsaszyFylUOHeE,36506
|
38
|
-
ccxt/bybit.py,sha256=
|
38
|
+
ccxt/bybit.py,sha256=yU-28vJtKx5NnUh0BfrPSJ3jNT_AekZs9XgW1u2lGec,401635
|
39
39
|
ccxt/cex.py,sha256=K8QEAUcjEN-xZgjt8D5_jhlagxbJHl9TUTQbPARhnkA,69653
|
40
40
|
ccxt/coinbase.py,sha256=-ShTkuNwMInF48rvEAft_OUKNN4iUPf9FPvywCb-sVI,178431
|
41
41
|
ccxt/coinbaseinternational.py,sha256=l4tuPmh0w-SB5sOfCn3MTihbeTY53o7KW8NgeP9bg4w,87123
|
42
42
|
ccxt/coinbasepro.py,sha256=yn8B_KwYGvnutoxMhRvnZRpMDbSt1x0SOWav2ShEH2s,78377
|
43
43
|
ccxt/coincheck.py,sha256=tPY3wITeTt4j0T760oMqDlIVPWBH4UEi2DlaDLoLDC8,35513
|
44
|
-
ccxt/coinex.py,sha256=
|
44
|
+
ccxt/coinex.py,sha256=7GL8Km4Ire-h7oLOk1g0mMU7b5EiNlcSjC_cu1Use-g,246603
|
45
45
|
ccxt/coinlist.py,sha256=NAxYBVv7HWlQsc1YMwmtSZQoLBbYSSkUn09kRRXmqKM,103001
|
46
46
|
ccxt/coinmate.py,sha256=8Q6H48i3Ny-qGaV3B0YO90ADi3yy_LluYIKGq3N1mIM,45790
|
47
47
|
ccxt/coinmetro.py,sha256=vmYo2m-s58gCaol0xvOtnANQsG8_vPSYUh0Tf36QBLw,80409
|
@@ -51,8 +51,8 @@ ccxt/coinspot.py,sha256=rtHhup6v6HbDCAVrZyVJJqOooJ_zoRWU0OqkEjLYL3E,23463
|
|
51
51
|
ccxt/cryptocom.py,sha256=AJRC_mgzX29rnCv50ry2JzryU20qfrh_7VOWqRXFVjI,128158
|
52
52
|
ccxt/currencycom.py,sha256=OS_TN2x2CoWvRY2e8iu16jtsu8etlN3nzwaWK6NpeLA,86759
|
53
53
|
ccxt/delta.py,sha256=-AshKjjisVWkxxMaQJr9IucbuA3BIZcsjA4PIu6nDA0,150437
|
54
|
-
ccxt/deribit.py,sha256=
|
55
|
-
ccxt/digifinex.py,sha256=
|
54
|
+
ccxt/deribit.py,sha256=cQKRHpmyRuJnGY-3pEXb-LEOxcWoxfpTxlQ5_NBqNh0,160139
|
55
|
+
ccxt/digifinex.py,sha256=7iczdV51dy7KnCf6dEHSuCTIPBNOyDdkIglHMgk6afI,167871
|
56
56
|
ccxt/exmo.py,sha256=_fKoBuAA3PxFUi-Z4dZjf6rJwpavkJjmMoAlnTobw0c,114203
|
57
57
|
ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
|
58
58
|
ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
|
@@ -69,7 +69,7 @@ ccxt/hyperliquid.py,sha256=DWU4nZGKPxZmwhPMBsXWqIJAG6b_M2ly44sa2OelhSc,92412
|
|
69
69
|
ccxt/idex.py,sha256=4DNXaCryJzhRi1bVg11oRC5SReloCOMS6sNSKo8F9LM,72809
|
70
70
|
ccxt/independentreserve.py,sha256=nRprUlIbJ2ipFavUim5Ad46oYSEz8cpqFL1gg1hN-Mg,32024
|
71
71
|
ccxt/indodax.py,sha256=xC7of6o3UWGfy3U6SNFEK_SKlkrFbLjJGut2fZyC53E,51779
|
72
|
-
ccxt/kraken.py,sha256=
|
72
|
+
ccxt/kraken.py,sha256=XQiEeTTo3TINMkLZbfOjYOdbk4kZmNvETnEzGpJTfY4,123935
|
73
73
|
ccxt/krakenfutures.py,sha256=w3YaTs65H5mlodhRAcLsroCbzkRlb7XICkuq6bVPcWs,115673
|
74
74
|
ccxt/kucoin.py,sha256=8b_D5-sx7FQwbw8K4BEs23d48QNLfDwnTu-STurs-Hs,214705
|
75
75
|
ccxt/kucoinfutures.py,sha256=lvRBlOYs_sAt_xhJa_zUzy9vtNoGgl_zFgirrnjtjCM,118519
|
@@ -91,7 +91,7 @@ ccxt/paymium.py,sha256=2mBwmyT93k-dXBEKEix48G8PsA2IEN_5yScEM985Z10,24203
|
|
91
91
|
ccxt/phemex.py,sha256=p_oRjd4F1VhNU00MQ0gSLThqNPaw6LmJUjGt8cGWE-0,218625
|
92
92
|
ccxt/poloniex.py,sha256=cFrNzmNbjqy4bLB1CqqE9jPJToFTTiqMVkEB4eaJocw,101948
|
93
93
|
ccxt/poloniexfutures.py,sha256=jsAT6LICUJrwZ-_6iptuXns3YiPzHIdeA_2l3iQGPJg,77370
|
94
|
-
ccxt/probit.py,sha256
|
94
|
+
ccxt/probit.py,sha256=-IZ7_QrnSdI7niuflXk3PiJA3OtMDD4urT64-ATxOUU,76208
|
95
95
|
ccxt/timex.py,sha256=W-4ob8ZOr4Y9JeCqQLw5U6ftcj_hcIKRFcKFjfhQ6L8,71136
|
96
96
|
ccxt/tokocrypto.py,sha256=rtWgCnMIvBPowsxqbXhhZLi2_B3D9RRLPlMVPHvOlgg,123002
|
97
97
|
ccxt/tradeogre.py,sha256=dkEs8sDlEuUiSH1EsbUxgYiovjfepf5xJQgXj83kkCw,23761
|
@@ -140,7 +140,7 @@ ccxt/abstract/btcalpha.py,sha256=sbF4SAkTJq01QPQw4D2GMkKrPhKfFIsG-PNtMAC9WwU,138
|
|
140
140
|
ccxt/abstract/btcbox.py,sha256=PtZ2DZyXaPVPCQ5VLa9AEIZ9S0Y-mPrIu6P9BnfJ7dg,849
|
141
141
|
ccxt/abstract/btcmarkets.py,sha256=dQ2yTZ_8T2TEeAYIuKE0ATImbOLDLGSK7HbbBd8XVJQ,3690
|
142
142
|
ccxt/abstract/btcturk.py,sha256=duM-QrB9MvGpopOtxkfbeYlY49bgvXQLiosRVmnQYFw,1777
|
143
|
-
ccxt/abstract/bybit.py,sha256=
|
143
|
+
ccxt/abstract/bybit.py,sha256=8jxQZelzO8ew0BOF5Mu8KpvsOMOKlnWqya9J9hOL8Ic,48599
|
144
144
|
ccxt/abstract/cex.py,sha256=Q0NJeDuJ4Kn_mtokYqBenhXWvLIiMSVTqbgbfcLGgv4,3311
|
145
145
|
ccxt/abstract/coinbase.py,sha256=7vqrC4Xz0tAQrIulBh8ddLBAjzrOtCTiK_celZl9jDA,14395
|
146
146
|
ccxt/abstract/coinbaseinternational.py,sha256=wf1fF31fQ1TAVSk1X4ju6LYQc7tHI1lN5nxRnhnzsbk,4770
|
@@ -207,7 +207,7 @@ ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
|
|
207
207
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
208
208
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
209
209
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
210
|
-
ccxt/async_support/__init__.py,sha256=
|
210
|
+
ccxt/async_support/__init__.py,sha256=tJD5-0-S8TCGvMlCbvlalce_wNLwcDChU_--ij17xi4,15409
|
211
211
|
ccxt/async_support/ace.py,sha256=IYTj0FJAAPvSrpgIpbzO6ftADPgLnQT1uk54MSSM7UA,41644
|
212
212
|
ccxt/async_support/alpaca.py,sha256=Nsaff9RczBhiNF19RlqI6wggvEibV_2ICgB8H5Qiuck,47120
|
213
213
|
ccxt/async_support/ascendex.py,sha256=vugf7rxYZka-ffxVycDnlXpqj5D9cdFVjkO4prlR204,152088
|
@@ -244,13 +244,13 @@ ccxt/async_support/btcalpha.py,sha256=dFDJZPeo7AkEu80ULoklUcgvhxR6GAaTq-VlMtN7d6
|
|
244
244
|
ccxt/async_support/btcbox.py,sha256=pT_fg3eVRk4Qi2ymTyxozHBz4FZs0KcCrU3fmZ2L_r4,23535
|
245
245
|
ccxt/async_support/btcmarkets.py,sha256=b6izd3cD8P3swetbESyX1N0qD3K0sZI7PX4qMjWmcTc,51678
|
246
246
|
ccxt/async_support/btcturk.py,sha256=nz0nAY_whtiOupBWqdKjrYvpe6Ynu82b_SsB8kd5DC0,36724
|
247
|
-
ccxt/async_support/bybit.py,sha256=
|
247
|
+
ccxt/async_support/bybit.py,sha256=XvqnJqOnx-cq49_pPvvQULZprOnQd-X0qAZHswCSRG4,403379
|
248
248
|
ccxt/async_support/cex.py,sha256=qVNevV8yMafQTMuvbeGtSeQLtQ069sux62h960pHDWA,70003
|
249
249
|
ccxt/async_support/coinbase.py,sha256=0dGlfvNdkeeXXtjCogfg2Ml2sDT0oVfdP0MnzWrV61I,179388
|
250
250
|
ccxt/async_support/coinbaseinternational.py,sha256=btvxx0HVXNZ4J2SyrRUetMxq0qEB2QrUKsxRAenwyJ8,87677
|
251
251
|
ccxt/async_support/coinbasepro.py,sha256=MF5ALacohXgtM0I1g0XY_Ll6WimO82Wiyxxm-jMX858,78883
|
252
252
|
ccxt/async_support/coincheck.py,sha256=QR6opDQdMbvXHlANLBZTMej3vyhqeVnnI1ezOJm29jU,35719
|
253
|
-
ccxt/async_support/coinex.py,sha256=
|
253
|
+
ccxt/async_support/coinex.py,sha256=iv16ukku5t2WYgAUFG5eiuy_fE0hQKwqxj7I3HM6poc,247873
|
254
254
|
ccxt/async_support/coinlist.py,sha256=0-hkddt1zUblt3Q5spO_jnhmAKVoJ6NkRAxNE9_WRAk,103489
|
255
255
|
ccxt/async_support/coinmate.py,sha256=EP35E7xs9oW2txjLjyKAYgDlxtl3xxZTXcqtwfkYEuM,46056
|
256
256
|
ccxt/async_support/coinmetro.py,sha256=I7ZmXVoZK-OcyMrqJ-a19NMmMuk81UoQk6UQtKKnXk4,80729
|
@@ -260,8 +260,8 @@ ccxt/async_support/coinspot.py,sha256=DqWK2WouFRRfchKlNFOAIhDcVK3pFfI-kHyg1BgH8P
|
|
260
260
|
ccxt/async_support/cryptocom.py,sha256=Qr3xl9feyoy-Aw6ZtoAyXGhFM239r6DAIXJhiecMjCM,128712
|
261
261
|
ccxt/async_support/currencycom.py,sha256=Kakjmk6UWO5J4f7XRvuHe1VLIBnceg6p6RPN7rWkiGs,87181
|
262
262
|
ccxt/async_support/delta.py,sha256=RYBwnFLT0JJTtWkgi2Z6iFoeCw94JudLPGPM0gddzug,151045
|
263
|
-
ccxt/async_support/deribit.py,sha256=
|
264
|
-
ccxt/async_support/digifinex.py,sha256=
|
263
|
+
ccxt/async_support/deribit.py,sha256=6mACtC8xsebDGw4Y9ikgHCmPNSazeTjqqsplj0GcAtw,160915
|
264
|
+
ccxt/async_support/digifinex.py,sha256=kiArqJIPv6m1K2hVabfQ6h6o1XbCLwrH6fGBF29wodo,168841
|
265
265
|
ccxt/async_support/exmo.py,sha256=tUaaWQHe6nb75UCckwdsODn2wQAb-XtFVbGyqRsRiHc,114835
|
266
266
|
ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
|
267
267
|
ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
|
@@ -278,7 +278,7 @@ ccxt/async_support/hyperliquid.py,sha256=XVu7E1x3MgU6LM5WUWXCQs0i1eJD7PdBJi_7hDv
|
|
278
278
|
ccxt/async_support/idex.py,sha256=hEbHV8Zh_K0p_5PcZdAMxgB0tMt5J3aud7WRlCbIqPw,73285
|
279
279
|
ccxt/async_support/independentreserve.py,sha256=02gCggRgFSmIdJyG5vO-R2JXNbB3u6U1TH2cfdckhdU,32284
|
280
280
|
ccxt/async_support/indodax.py,sha256=A2-LUvN4BgGOu_IOnsCLjyBTQBXnxCNPJWLcuy2oyPQ,52087
|
281
|
-
ccxt/async_support/kraken.py,sha256=
|
281
|
+
ccxt/async_support/kraken.py,sha256=nqAxbi-vkfXetjVV7PgMhgIeNxdome3MgIlZnimEOc0,124519
|
282
282
|
ccxt/async_support/krakenfutures.py,sha256=LxUUDt8BH69IRbtFYCSsyKZhW_QHEvhqFnAbdYNmzsA,116143
|
283
283
|
ccxt/async_support/kucoin.py,sha256=zPl33pupehmSYWdFFLf8bz5GWkpJvQXY7MBijC1CZtM,215759
|
284
284
|
ccxt/async_support/kucoinfutures.py,sha256=eQQiAmU-nUgnOXZt053cGuK4kfpW3Yt23iGc_87kgK8,119121
|
@@ -300,7 +300,7 @@ ccxt/async_support/paymium.py,sha256=3P1J9OcDOqQKG5fUs6Xte9Xu8NB5lWu-OD-AHHGZbkM
|
|
300
300
|
ccxt/async_support/phemex.py,sha256=IynkDddWB10XKtf7VIg5-g-mCvrUUG5mw4sjJk4pYwY,219437
|
301
301
|
ccxt/async_support/poloniex.py,sha256=LZ4G2R_EGQ7oWFnO_izdvnF5GrN4tvRjA_qO_P3v-wI,102496
|
302
302
|
ccxt/async_support/poloniexfutures.py,sha256=Bo51Go_Rq-xXkVBBzXKKtqK9l_MF-CyUaAxuPVT1nDs,77756
|
303
|
-
ccxt/async_support/probit.py,sha256=
|
303
|
+
ccxt/async_support/probit.py,sha256=w0HW32EcHNhE6wbWcVv3UrjAEl2ZnWEFHFJjaxhqI2I,76600
|
304
304
|
ccxt/async_support/timex.py,sha256=msj259w_qjgEyStzin06Ov3BoHGphxFD0VolSI_-YjA,71498
|
305
305
|
ccxt/async_support/tokocrypto.py,sha256=2tU4n-9o0ywWSzEDP77AlezB4A1vNbQt7cuC_7Ic9hA,123364
|
306
306
|
ccxt/async_support/tradeogre.py,sha256=hYuh7ar9LMpUcFcVaiCcBebfnjEB7vovHBXAfUpFk5E,23955
|
@@ -313,7 +313,7 @@ ccxt/async_support/yobit.py,sha256=gNE-7Yc2a2ScelR8ZWFGfhRzCr9DHcAdlI62LFjXvnI,5
|
|
313
313
|
ccxt/async_support/zaif.py,sha256=PaHcaNijKkhocrw6DZoSBNUjBOLNlkUYtsJvPAqkx68,28134
|
314
314
|
ccxt/async_support/zonda.py,sha256=0o0Q1rFuTbdhm8m_rlo8D1qLsgZhhBqnefsHi0rVA_A,80866
|
315
315
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
316
|
-
ccxt/async_support/base/exchange.py,sha256=
|
316
|
+
ccxt/async_support/base/exchange.py,sha256=gvfU73y6hCkb7QsG5nzavCUNtlA3wiX936BaR1xjk0A,91193
|
317
317
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
318
318
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
319
319
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
@@ -327,10 +327,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
|
|
327
327
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
328
328
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
329
329
|
ccxt/base/errors.py,sha256=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
|
330
|
-
ccxt/base/exchange.py,sha256=
|
330
|
+
ccxt/base/exchange.py,sha256=hkXDbZ_G9ZfJH2IpLmE7_QZLgujfaKEpTgRmxmfMz2g,254525
|
331
331
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
332
332
|
ccxt/base/types.py,sha256=6f9YtSQp-XB_iBbXqsKCfmMzn_UpfwkHl3f0rL3xGjg,7690
|
333
|
-
ccxt/pro/__init__.py,sha256=
|
333
|
+
ccxt/pro/__init__.py,sha256=uCEg3wd6ol5Z3CL8VUOgslgRRVeYOhK0P8eeShDlt-E,6999
|
334
334
|
ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
|
335
335
|
ccxt/pro/ascendex.py,sha256=0RlrxSqh4-lW99T-Y8AxrU612Cpy03u2loVMeRUPXlg,35432
|
336
336
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -529,7 +529,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
529
529
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
530
530
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
531
531
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
532
|
-
ccxt-4.2.
|
533
|
-
ccxt-4.2.
|
534
|
-
ccxt-4.2.
|
535
|
-
ccxt-4.2.
|
532
|
+
ccxt-4.2.93.dist-info/METADATA,sha256=qp0huOdUwjKTLaOaZSXFxvVFpC9ktvcFKUi7zzJYWLI,110281
|
533
|
+
ccxt-4.2.93.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
534
|
+
ccxt-4.2.93.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
535
|
+
ccxt-4.2.93.dist-info/RECORD,,
|
File without changes
|
File without changes
|