Skip to content
30 changes: 15 additions & 15 deletions binance/async_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ async def get_products(self) -> Dict:
get_products.__doc__ = Client.get_products.__doc__

async def get_exchange_info(self) -> Dict:
return await self._get("exchangeInfo", version=self.PRIVATE_API_VERSION)
return await self._get("exchangeInfo")

get_exchange_info.__doc__ = Client.get_exchange_info.__doc__

Expand All @@ -301,12 +301,12 @@ async def get_symbol_info(self, symbol) -> Optional[Dict]:
# General Endpoints

async def ping(self) -> Dict:
return await self._get("ping", version=self.PRIVATE_API_VERSION)
return await self._get("ping")

ping.__doc__ = Client.ping.__doc__

async def get_server_time(self) -> Dict:
return await self._get("time", version=self.PRIVATE_API_VERSION)
return await self._get("time")

get_server_time.__doc__ = Client.get_server_time.__doc__

Expand All @@ -319,7 +319,7 @@ async def get_all_tickers(
if symbol:
params["symbol"] = symbol
response = await self._get(
"ticker/price", version=self.PRIVATE_API_VERSION, data=params
"ticker/price", data=params
)
if isinstance(response, list) and all(isinstance(item, dict) for item in response):
return response
Expand All @@ -334,13 +334,13 @@ async def get_orderbook_tickers(self, **params) -> Dict:
elif "symbols" in params:
data["symbols"] = params["symbols"]
return await self._get(
"ticker/bookTicker", data=data, version=self.PRIVATE_API_VERSION
"ticker/bookTicker", data=data
)

get_orderbook_tickers.__doc__ = Client.get_orderbook_tickers.__doc__

async def get_order_book(self, **params) -> Dict:
return await self._get("depth", data=params, version=self.PRIVATE_API_VERSION)
return await self._get("depth", data=params)

get_order_book.__doc__ = Client.get_order_book.__doc__

Expand All @@ -351,14 +351,14 @@ async def get_recent_trades(self, **params) -> Dict:

async def get_historical_trades(self, **params) -> Dict:
return await self._get(
"historicalTrades", data=params, version=self.PRIVATE_API_VERSION
"historicalTrades", data=params
)

get_historical_trades.__doc__ = Client.get_historical_trades.__doc__

async def get_aggregate_trades(self, **params) -> Dict:
return await self._get(
"aggTrades", data=params, version=self.PRIVATE_API_VERSION
"aggTrades", data=params
)

get_aggregate_trades.__doc__ = Client.get_aggregate_trades.__doc__
Expand Down Expand Up @@ -419,12 +419,12 @@ async def aggregate_trade_iter(self, symbol, start_str=None, last_id=None):
aggregate_trade_iter.__doc__ = Client.aggregate_trade_iter.__doc__

async def get_ui_klines(self, **params) -> Dict:
return await self._get("uiKlines", data=params, version=self.PRIVATE_API_VERSION)
return await self._get("uiKlines", data=params)

get_ui_klines.__doc__ = Client.get_ui_klines.__doc__

async def get_klines(self, **params) -> Dict:
return await self._get("klines", data=params, version=self.PRIVATE_API_VERSION)
return await self._get("klines", data=params)

get_klines.__doc__ = Client.get_klines.__doc__

Expand Down Expand Up @@ -655,33 +655,33 @@ async def _historical_klines_generator(

async def get_avg_price(self, **params):
return await self._get(
"avgPrice", data=params, version=self.PRIVATE_API_VERSION
"avgPrice", data=params
)

get_avg_price.__doc__ = Client.get_avg_price.__doc__

async def get_ticker(self, **params):
return await self._get(
"ticker/24hr", data=params, version=self.PRIVATE_API_VERSION
"ticker/24hr", data=params
)

get_ticker.__doc__ = Client.get_ticker.__doc__

async def get_symbol_ticker(self, **params):
return await self._get(
"ticker/price", data=params, version=self.PRIVATE_API_VERSION
"ticker/price", data=params
)

get_symbol_ticker.__doc__ = Client.get_symbol_ticker.__doc__

async def get_symbol_ticker_window(self, **params):
return await self._get("ticker", data=params, version=self.PRIVATE_API_VERSION)
return await self._get("ticker", data=params)

get_symbol_ticker_window.__doc__ = Client.get_symbol_ticker_window.__doc__

async def get_orderbook_ticker(self, **params):
return await self._get(
"ticker/bookTicker", data=params, version=self.PRIVATE_API_VERSION
"ticker/bookTicker", data=params
)

get_orderbook_ticker.__doc__ = Client.get_orderbook_ticker.__doc__
Expand Down
2 changes: 1 addition & 1 deletion binance/base_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class BaseClient:
WS_API_TESTNET_URL = "wss://ws-api.testnet.binance.vision/ws-api/v3"
WS_FUTURES_URL = "wss://ws-fapi.binance.{}/ws-fapi/v1"
WS_FUTURES_TESTNET_URL = "wss://testnet.binancefuture.com/ws-fapi/v1"
PUBLIC_API_VERSION = "v1"
PUBLIC_API_VERSION = "v3"
PRIVATE_API_VERSION = "v3"
MARGIN_API_VERSION = "v1"
MARGIN_API_VERSION2 = "v2"
Expand Down
58 changes: 29 additions & 29 deletions binance/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ def get_exchange_info(self) -> Dict:

"""

return self._get("exchangeInfo", version=self.PRIVATE_API_VERSION)
return self._get("exchangeInfo")

def get_symbol_info(self, symbol) -> Optional[Dict]:
"""Return information about a symbol
Expand Down Expand Up @@ -341,7 +341,7 @@ def ping(self) -> Dict:
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("ping", version=self.PRIVATE_API_VERSION)
return self._get("ping")

def get_server_time(self) -> Dict:
"""Test connectivity to the Rest API and get the current server time.
Expand All @@ -359,14 +359,14 @@ def get_server_time(self) -> Dict:
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("time", version=self.PRIVATE_API_VERSION)
return self._get("time")

# Market Data Endpoints

def get_all_tickers(self) -> List[Dict[str, str]]:
"""Latest price for all symbols.

https://binance-docs.github.io/apidocs/spot/en/#symbol-price-ticker
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#symbol-price-ticker

:returns: List of market tickers

Expand All @@ -386,15 +386,15 @@ def get_all_tickers(self) -> List[Dict[str, str]]:
:raises: BinanceRequestException, BinanceAPIException

"""
response = self._get("ticker/price", version=self.PRIVATE_API_VERSION)
response = self._get("ticker/price")
if isinstance(response, list) and all(isinstance(item, dict) for item in response):
return response
raise TypeError("Expected a list of dictionaries")

def get_orderbook_tickers(self, **params) -> Dict:
"""Best price/qty on the order book for all symbols.

https://binance-docs.github.io/apidocs/spot/en/#symbol-order-book-ticker
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#symbol-order-book-ticker

:param symbol: optional
:type symbol: str
Expand Down Expand Up @@ -431,13 +431,13 @@ def get_orderbook_tickers(self, **params) -> Dict:
elif "symbols" in params:
data["symbols"] = params["symbols"]
return self._get(
"ticker/bookTicker", data=data, version=self.PRIVATE_API_VERSION
"ticker/bookTicker", data=data
)

def get_order_book(self, **params) -> Dict:
"""Get the Order Book for the market

https://binance-docs.github.io/apidocs/spot/en/#order-book
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#order-book

:param symbol: required
:type symbol: str
Expand Down Expand Up @@ -469,12 +469,12 @@ def get_order_book(self, **params) -> Dict:
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("depth", data=params, version=self.PRIVATE_API_VERSION)
return self._get("depth", data=params)

def get_recent_trades(self, **params) -> Dict:
"""Get recent trades (up to last 500).

https://binance-docs.github.io/apidocs/spot/en/#recent-trades-list
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#recent-trades-list

:param symbol: required
:type symbol: str
Expand Down Expand Up @@ -504,7 +504,7 @@ def get_recent_trades(self, **params) -> Dict:
def get_historical_trades(self, **params) -> Dict:
"""Get older trades.

https://binance-docs.github.io/apidocs/spot/en/#old-trade-lookup
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#old-trade-lookup

:param symbol: required
:type symbol: str
Expand Down Expand Up @@ -532,14 +532,14 @@ def get_historical_trades(self, **params) -> Dict:

"""
return self._get(
"historicalTrades", data=params, version=self.PRIVATE_API_VERSION
"historicalTrades", data=params
)

def get_aggregate_trades(self, **params) -> Dict:
"""Get compressed, aggregate trades. Trades that fill at the time,
from the same order, with the same price will have the quantity aggregated.

https://binance-docs.github.io/apidocs/spot/en/#compressed-aggregate-trades-list
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints

:param symbol: required
:type symbol: str
Expand Down Expand Up @@ -572,7 +572,7 @@ def get_aggregate_trades(self, **params) -> Dict:
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("aggTrades", data=params, version=self.PRIVATE_API_VERSION)
return self._get("aggTrades", data=params)

def aggregate_trade_iter(self, symbol: str, start_str=None, last_id=None):
"""Iterate over aggregate trade data from (start_time or last_id) to
Expand Down Expand Up @@ -697,12 +697,12 @@ def get_ui_klines(self, **params) -> Dict:
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("uiKlines", data=params, version=self.PRIVATE_API_VERSION)
return self._get("uiKlines", data=params)

def get_klines(self, **params) -> Dict:
"""Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.

https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#klinecandlestick-data

:param symbol: required
:type symbol: str
Expand Down Expand Up @@ -739,7 +739,7 @@ def get_klines(self, **params) -> Dict:
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("klines", data=params, version=self.PRIVATE_API_VERSION)
return self._get("klines", data=params)

def _klines(
self, klines_type: HistoricalKlinesType = HistoricalKlinesType.SPOT, **params
Expand Down Expand Up @@ -1058,8 +1058,8 @@ def _historical_klines_generator(

def get_avg_price(self, **params):
"""Current average price for a symbol.

https://binance-docs.github.io/apidocs/spot/en/#current-average-price
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#current-average-price

:param symbol:
:type symbol: str
Expand All @@ -1073,12 +1073,12 @@ def get_avg_price(self, **params):
"price": "9.35751834"
}
"""
return self._get("avgPrice", data=params, version=self.PRIVATE_API_VERSION)
return self._get("avgPrice", data=params)

def get_ticker(self, **params):
"""24 hour price change statistics.

https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#24hr-ticker-price-change-statistics

:param symbol:
:type symbol: str
Expand Down Expand Up @@ -1134,7 +1134,7 @@ def get_ticker(self, **params):
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("ticker/24hr", data=params, version=self.PRIVATE_API_VERSION)
return self._get("ticker/24hr", data=params)

def get_symbol_ticker(self, **params):
"""Latest price for a symbol or symbols.
Expand Down Expand Up @@ -1171,12 +1171,12 @@ def get_symbol_ticker(self, **params):
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("ticker/price", data=params, version=self.PRIVATE_API_VERSION)
return self._get("ticker/price", data=params)

def get_symbol_ticker_window(self, **params):
"""Latest price for a symbol or symbols.

https://binance-docs.github.io/apidocs/spot/en/#rolling-window-price-change-statistics
https://developers.binance.com/docs/binance-spot-api-docs/rest-api/market-data-endpoints#rolling-window-price-change-statistics

:param symbol:
:type symbol: str
Expand Down Expand Up @@ -1208,7 +1208,7 @@ def get_symbol_ticker_window(self, **params):
:raises: BinanceRequestException, BinanceAPIException

"""
return self._get("ticker", data=params, version=self.PRIVATE_API_VERSION)
return self._get("ticker", data=params)

def get_orderbook_ticker(self, **params):
"""Latest price for a symbol or symbols.
Expand Down Expand Up @@ -1255,7 +1255,7 @@ def get_orderbook_ticker(self, **params):

"""
return self._get(
"ticker/bookTicker", data=params, version=self.PRIVATE_API_VERSION
"ticker/bookTicker", data=params
)

# Account Endpoints
Expand Down Expand Up @@ -3129,7 +3129,7 @@ def stream_get_listen_key(self):

"""
res = self._post(
"userDataStream", False, data={}, version=self.PRIVATE_API_VERSION
"userDataStream", False, data={}
)
return res["listenKey"]

Expand All @@ -3152,7 +3152,7 @@ def stream_keepalive(self, listenKey):
"""
params = {"listenKey": listenKey}
return self._put(
"userDataStream", False, data=params, version=self.PRIVATE_API_VERSION
"userDataStream", False, data=params
)

def stream_close(self, listenKey):
Expand Down
35 changes: 35 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,38 @@ def pytest_collection_modifyitems(config, items):
item.add_marker(skip_portfolio)
if "gift_card" in item.keywords and not config.getoption("--run-gift-card"):
item.add_marker(skip_gift_card)


def call_method_and_assert_uri_contains(client, method_name, expected_string, *args, **kwargs):
"""
Helper function to test that a client method calls the expected URI.

Args:
client: The client instance to test
method_name: Name of the method to call (as string)
expected_string: String that should be present in the URI
*args, **kwargs: Arguments to pass to the client method

Returns:
The result of the method call
"""
from unittest.mock import patch

with patch.object(client, '_request', wraps=client._request) as mock_request:
# Get the method from the client and call it
method = getattr(client, method_name)
result = method(*args, **kwargs)

# Assert that _request was called
mock_request.assert_called_once()

# Get the arguments passed to _request
args_passed, kwargs_passed = mock_request.call_args

# The second argument is the URI
uri = args_passed[1]

# Assert that the URL contains the expected string
assert expected_string in uri, f"Expected '{expected_string}' in URL, but got: {uri}"

return result
Loading
Loading