
    mWi	                     |    d dl Z d dlZd dlmZ d dlmZ  ej        e          Z G d d          Z	 e	            Z
dS )    N)Optional)settingsc                   x    e Zd ZdZd Zdej        fdZdej        fdZde	de
fdZde
fdZde	d	e	d
ede
fdZdS )BinanceClientz*Wrapper around CCXT Binance Spot exchange.c                     d | _         d S )N)	_exchangeselfs    A/var/www/html/crypto-bot/backend/app/data_layer/binance_client.py__init__zBinanceClient.__init__   s    15    returnc                     | j         4t          j        t          j        t          j        dddid          | _         | j         S )z3Returns a singleton CCXT Binance exchange instance.NTdefaultTypespot)apiKeysecretenableRateLimitoptions)r   ccxtbinancer   BINANCE_API_KEYBINANCE_SECRET_KEYr	   s    r   get_exchangezBinanceClient.get_exchange   sJ    >!!\"2"5#'!6	+ +  DN ~r   c                 4    t          j        dddid          S )zEReturns an exchange instance without API keys (for public endpoints).Tr   r   )r   r   )r   r   r	   s    r   get_readonly_exchangez#BinanceClient.get_readonly_exchange   s-    |#v
 
   	r   symbolc                    K   |                                  }	 |                    |          }|S # t          j        $ r&}t                              d| d|             d}~ww xY w)z+Fetch the latest ticker for a trading pair.zError fetching ticker for : N)r   fetch_tickerr   	BaseErrorloggererror)r
   r   exchangetickeres        r   r    zBinanceClient.fetch_ticker%   s{      --//	**622FM~ 	 	 	LLCfCCCCDDD	s   / A$!AA$c                    K   |                                  }	 |                                }|S # t          j        $ r#}t                              d|             d}~ww xY w)z*Fetch account balance (requires API keys).zError fetching balance: N)r   fetch_balancer   r!   r"   r#   )r
   r$   balancer&   s       r   r(   zBinanceClient.fetch_balance/   sq      $$&&	,,..GN~ 	 	 	LL7A77888	s   . A AA sideamountc           
      $  K   |                                  }	 |                    |||          }t                              d| d| d| d|            |S # t          j        $ r)}t                              d| d| d|             d}~ww xY w)z%Place a market order on Binance Spot.zMarket order placed:  z -> zError placing market order r   N)r   create_market_orderr"   infor   r!   r#   )r
   r   r*   r+   r$   orderr&   s          r   r.   z!BinanceClient.create_market_order9   s       $$&&	00vFFEKKSSSvSSSSESSTTTL~ 	 	 	LLKtKKfKKKKLLL	s   >A B&$B

BN)__name__
__module____qualname____doc__r   r   r   r   r   strdictr    r(   floatr.    r   r   r   r   	   s        446 6 6dl    t|         T    !$.3	     r   r   )r   loggingtypingr   
app.configr   	getLoggerr1   r"   r   binance_clientr8   r   r   <module>r>      s                 		8	$	$; ; ; ; ; ; ; ;| r   