
    eiwW                         d dl Zd dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d	 d
ej        j                  ZdS )    N)
ArrayCacheArrayCacheBySymbolById)AnyBoolIntOrder	OrderBookStrTrade)Client)List)AuthenticationError)ArgumentsRequired)Precisec            
       2    e Zd Zdef fdZdi fdededefdZde	fdZ
d	 Zd
 Zd Zddi fdedededee         fdZddZde	fdZdddi fdedededee         fdZde	fdZddZde	fdZde	fdZde	fdZde	defdZde	fdZi fdZi fdZ xZ S )bitstampreturnc                     |                      t          t          |                                           ddddddddddddiiddddd	d
dddddt          iid          S )NTF)wswatchOrderBookwatchOrderswatchTradeswatchTradesForSymbols
watchOHLCVwatchTickerwatchTickersapir   zwss://ws.bitstamp.net       )snapshotDelaysnapshotMaxRetries  )	expiresInuserIdwsSessionTokenr   tradesLimit
OHLCVLimitexact4009)hasurlsoptions
exceptions)deep_extendsuperr   describer   )self	__class__s    O/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/pro/bitstamp.pyr1   zbitstamp.describe   s    h 5 5 > > @ @"&##).#$ %	 	 1  "$%&*+# #  $"
 
 /7 C
  C
      	    Nsymbollimitc                 X  K   |                                   d{V  |                     |          }|d         }d|z   }d|d         z   }| j        d         d         }dd	|id
}|                     ||          }	|                     |||	|           d{V }
|
                                S )a  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/?id=order-book-structure>` indexed by market symbols
        Nr6   
orderbook:diff_order_book_idr   r   bts:subscribechanneleventdata)load_marketsmarketr,   extendwatchr7   )r2   r6   r7   paramsrB   messageHashr=   urlrequestmessage	orderbooks              r4   watch_order_bookzbitstamp.watch_order_book5   s       !!!!!!!!!V$$!"V+$vd|3it$$7
 
 ++gv..**S+wLLLLLLLL	   r5   clientc                    |                      |d          }|                    d          }|                      |d          }|                     |          }|                     | j        |          }|                     |d          }|                     |d          }	|                     |	d          }
d|z   }|lt          |j                  }|                     dd	d
          }||k    r| 	                    | j
        |||d i            |j                            |	           d S ||
k    rd S |                     ||	           |                    ||           d S )Nr=   _r    noncer@   microtimestampr9   r   r!   r   )safe_stringsplitsafe_symbol
safe_value
orderbookssafe_integerlencachehandle_optionspawnload_order_bookappendhandle_deltaresolve)r2   rL   rI   r=   partsmarketIdr6   storedOrderBookrO   delta
deltaNoncerF   cacheLengthr!   s                 r4   handle_order_bookzbitstamp.handle_order_bookM   sd   0 ""7I66c""##E1--!!(++//$/6BB9900&&u.>??
"V+=o344K !../?RSTTMm++

4/fdTVWWW!((///Fj  F/511144444r5   c                 r   |                      |d          }||d<   |                     |          |d<   |                     |d          |d<   |                     |dg           }|                     |dg           }|d         }|d         }|                     ||           |                     ||           d S )N	timestampdatetimerP   rO   bidsasks)safe_timestampiso8601rV   rT   handle_bid_asks)r2   rJ   rb   rg   ri   rj   
storedBids
storedAskss           r4   r]   zbitstamp.handle_delta|   s    ''{;;	!*	+ $Y 7 7	*!..u6FGG	'ufb11ufb11v&
v&
Z...Z.....r5   c                     t          dt          |                    D ]2}|                     ||                   }|                    |           3d S )Nr   )rangerW   parse_bid_ask
storeArray)r2   bookSidebidAsksibidAsks        r4   rm   zbitstamp.handle_bid_asks   sY    q#g,,'' 	( 	(A''
33F''''	( 	(r5   c                 .   |d         }|                      |d          }|                      |d          }||k     rdS t          dt          |                    D ]-}||         }|                      |d          }||k    r|dz   c S .t          |          S )Nr   rP   rO      )rV   rq   rW   )	r2   rJ   deltasfirstElementfirstElementNoncerO   rv   rb   rc   s	            r4   get_cache_indexzbitstamp.get_cache_index   s    ay --l<LMM!!)W55$$$2q#f++&& 	 	A1IE**52BCCJU""1u #6{{r5   sincec                   K   |                                   d{V  |                     |          }|d         }d|z   }| j        d         d         }d|d         z   }dd	|id
}	|                     |	|          }
|                     |||
|           d{V }| j        r|                    ||          }|                     |||dd          S )a  
        get the list of most recent trades for a particular symbol
        :param str symbol: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=public-trades>`
        Nr6   trades:r   r   live_trades_r;   r<   r=   r>   rg   T)rA   rB   r,   rC   rD   
newUpdatesgetLimitfilter_by_since_limit)r2   r6   r   r7   rE   rB   rF   rG   r=   rH   rI   tradess               r4   watch_tradeszbitstamp.watch_trades   s       !!!!!!!!!V$$!&(it$ 6$</$7
 
 ++gv..zz#{G[IIIIIIII? 	3OOFE22E))&%TRRRr5   c                    |                      |d          }|                     |d          }|                     |dz            }|                     |d          }|                     |d          }|d         }|                      |d          }	|	dk    rd	nd
}
|                     |||                     |          ||d d d |
||d d d|          S )NrP   r;   r#   priceamountr6   typer   buysell)inforg   rh   r6   r;   orderr   takerOrMakersider   r   costfee)rV   rQ   parse_to_int
safe_traderl   )r2   traderB   rP   r;   rg   r   r   r6   sideRawr   s              r4   parse_ws_tradezbitstamp.parse_ws_trade   s     **52BCCeT**%%nt&;<<	  00!!%22!##E622 AuuF"Y//  
  
   	r5   c                    |                      |d          }|                    d          }|                      |d          }|                     |          }|d         }d|z   }|                     |d          }	|                     |	|          }
|                     | j        |          }|5|                     | j        dd          }t          |          }|| j        |<   |	                    |
           |
                    ||           d S )	Nr=   rN      r6   r   r@   r'   r#   )rQ   rR   safe_marketrT   r   r   rV   r-   r   r\   r^   )r2   rL   rI   r=   r_   r`   rB   r6   rF   r@   r   tradesArrayr7   s                r4   handle_tradezbitstamp.handle_trade   s	   * ""7I66c""##E1--!!(++!&(w//##D&11oodk6::%%dlM4HHE$U++K"-DK5!!!{K00000r5   c                 z  K   |t          | j        dz             |                                  d{V  |                     |          }|d         }d}|dz   |d         z   }||||d}|                     |||           d{V }	| j        r|	                    ||          }|                     |	||dd	          S )
a  
        watches information on multiple orders made by the user
        :param str symbol: unified market symbol of the market orders were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/?id=order-structure>`
        Nz) watchOrders() requires a symbol argumentr6   private-my_ordersrN   r;   )r6   r7   r   rE   rg   T)r   r;   rA   rB   subscribe_privater   r   r   )
r2   r6   r   r7   rE   rB   r=   rF   subscriptionorderss
             r4   watch_orderszbitstamp.watch_orders  s       >#DG.Y$YZZZ!!!!!!!!!V$$!%mfTl2	
 
 --lKPPPPPPPP? 	3OOFE22E))&%TRRRr5   c                 &   |                      |d          }|                     |di           }|                     | j        dd          }| j        t          |          | _        | j        }|                     |j        |          }|                      |d          }|                     |          }	|                      |d          |d<   |                     ||	          }
|	                    |
           |
                    | j        |           d S )Nr=   r@   ordersLimitr#   r6   r?   )rQ   rT   rV   r-   r   r   subscriptionsrB   parse_ws_orderr\   r^   )r2   rL   rI   r=   r   r7   storedr   r6   rB   parseds              r4   handle_orderszbitstamp.handle_orders  s    $ ""7I6644!!$,tDD;077DKv';WEE!!,99V$$))'7;;g$$UF33ft{G,,,,,r5   c           	      *   |                      |d          }|                     |d          }|dk    rdnd}|                     |d          }d }d }|dk    rd}n)|d	k    rd
}n |dk    rd}d}n|dk    rd}d}n
|dk    rd}d}|                      |d          }	|                      |d          }
|                      |d          }|                      |d          }d }t          j        ||
          rd}n|dk    rd}|                     |d          }|                     d |          }|d         }|                     i d|d|d|dd d|d|                     |          dd d|d |d!d d"|d#|	d$d d%d d&|
d'd d(d |d |d d d)|          S )*Nid_str
order_type1r   r   order_subtype0r7   2rB   4IOC6FOK8GTD	price_str
amount_stramount_tradedr?   closedorder_deletedcanceledrh   r6   r   r;   clientOrderIdrg   lastTradeTimestampr   timeInForcepostOnlyr   r   	stopPricetriggerPricer   r   average)filled	remainingstatusr   r   )rQ   safe_string_lowerr   	string_eqrk   r   
safe_orderrl   )r2   r   rB   r;   orderTypeRawr   orderSubTypeRaw	orderTyper   r   r   r   r?   r   rg   r6   s                   r4   r   zbitstamp.parse_ws_order=  s   & eX..--e\BB&#--vvE00HH	c!!II## II##IKK##IKK##IK  44!!%66!!%99  00VV,, 	 FFo%%F''z::	!!$//!  
E 
f 
 " 
 T	 

  
 Y// 
 !$ 
 I 
 ; 
  
 D 
 U 
  
 D 
 f 
  D! 
" t# 
$ - 
  
  
. /  	r5   c                     |                      |d          }|                    d          }|                      |d          }|                     |          }|                                 | j        |<   d S )Nr=   rN   r    )rQ   rR   rS   
order_bookrU   )r2   rL   rI   r=   r_   r`   r6   s          r4   handle_order_book_subscriptionz'bitstamp.handle_order_book_subscription  sl    ""7I66c""##E1--!!(++"&//"3"3r5   c                     |                      |d          }|                    d          dk    r|                     ||           d S d S )Nr=   r   ry   )rQ   findr   )r2   rL   rI   r=   s       r4   handle_subscription_statusz#bitstamp.handle_subscription_status  sT     ""7I66<<%%**//@@@@@ +*r5   c                 H   |                      |d          }| j        | j        | j        d}t	          |                                          }t          dt          |                    D ]7}||         }|                    |          dk    r||         } |||           8d S )Nr=   )live_tradesdiff_order_bookr   r   ry   )	rQ   r   re   r   listkeysrq   rW   r   )	r2   rL   rI   r=   methodsr   rv   keymethods	            r4   handle_subjectzbitstamp.handle_subject  s    L ""7I66,#5!%!3
 

 GLLNN##q#d))$$ 	( 	(Aq'C||C  2%% vw'''		( 	(r5   c                    |                      |d          }|dk    ro| j        dz   |                     |          z   }|                     |di           }|                     |d          }|                     | j        d         ||           dS )Nr?   z	bts:error r@   coder)   T)rQ   r;   jsonrT   safe_numberthrow_exactly_matched_exceptionr.   )r2   rL   rI   r?   feedbackr@   r   s          r4   handle_error_messagezbitstamp.handle_error_message  s       '22Kw}tyy'9'99H??7FB77D##D&11D001I4QYZZZtr5   c                     |                      ||          sd S |                     |d          }|dk    r|                     ||           d S |                     ||           d S )Nr?   zbts:subscription_succeeded)r   rQ   r   r   )r2   rL   rI   r?   s       r4   handle_messagezbitstamp.handle_message  s{    ((99 	FB   '22000++FG<<<<<00000r5   c                   K   |                                   |                                 }|                     | j        d          }|||k    r|                     |           d {V }|                     |d          }|c|                     |d          }|                     |dd          }|                     ||          | j        d<   || j        d<   || j        d<   d S d S d S )Nr$   tokenuser_id	valid_secr#   r%   r&   )check_required_credentialsmillisecondsrV   r-   privatePostWebsocketsTokenrQ   safe_integer_productsum)r2   rE   timer$   responsesessionTokenr%   validitys           r4   authenticatezbitstamp.authenticate
  s     '')))  ""%%dlK@@	4)#3#3!<<VDDDDDDDDH  ++Hg>>L'))(I>>44X{DQQ,0HHT8,D,D[))/X&1=-... $4#3 ('r5   c                   K   | j         d         d         }|                                  d {V  |d| j        d         z   z  }d|| j        d         dd}||d	<   |                     |||                     ||          ||           d {V S )
Nr   r   -r%   r<   r&   )r=   authr>   rF   )r,   r   r-   rD   rC   )r2   r   rF   rE   rG   rH   s         r4   r   zbitstamp.subscribe_private  s      it$!!!!!!!!!sT\(333$&%56 
 
 '2]#ZZ[$++gv2N2NP[]ijjjjjjjjjr5   )N)!__name__
__module____qualname__r   r1   strr   r	   rK   r   re   r]   rm   r~   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r3   s   @r4   r   r      s       !# ! ! ! ! ! !F @DB ! !S ! !S\ ! ! ! !0-5 -5 -5 -5 -5^
/ 
/ 
/( ( (
   <@d[] S S SS S Sbfglbm S S S S6% % % %N#16 #1 #1 #1 #1J 04$UYbd S S SC Ss Simnsit S S S S6-F - - - -@I I I IV4V 4 4 4 4A A A A A"1(V 1( 1( 1( 1(f6 t    '1V '1 '1 '1 '1R )+ > > > >* IK k k k k k k k kr5   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   ccxt.base.typesr   r   r   r   r	   r
   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   ccxt.base.preciser   async_supportr    r5   r4   <module>r     s	       O O O O O O O O H H H H H H H H H H H H H H H H H H 4 4 4 4 4 4       0 0 0 0 0 0 . . . . . . % % % % % %[k [k [k [k [kt!* [k [k [k [k [kr5   