
    E#i}W                         S SK rS SKJrJr  S SKJrJrJrJ	r	J
r
JrJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr   " S	 S
\R,                  R.                  5      rg)    N)
ArrayCacheArrayCacheBySymbolById)AnyBoolIntOrder	OrderBookStrTrade)Client)List)AuthenticationError)ArgumentsRequired)Precisec            
       V  ^  \ rS rSrS\4U 4S jjrS0 4S\S\S\4S jjr	S\
4S	 jrS
 rS rS rSS0 4S\S\S\S\\   4S jjrSS jrS\
4S jrSSS0 4S\S\S\S\\   4S jjrS\
4S jrSS jrS\
4S jrS\
4S jrS\
4S jrS\
S\4S jrS\
4S jr0 4S jr0 4S jr Sr!U =r"$ )bitstamp   returnc                    > U R                  [        [        U ]  5       SSSSSSSSS.SSS00SSSSS	S
.SSS.SS[        00S.5      $ )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    K/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/pro/bitstamp.pyr2   bitstamp.describe   s    h > @"&##).#$ %	 1  "$%&*+#  $"
 /7 C
    	    Nsymbollimitc                 0  #    U R                  5       I Sh  vN   U R                  U5      nUS   nSU-   nSUS   -   nU R                  S   S   nSS	U0S
.nU R                  X5      n	U R	                  XuX5      I Sh  vN n
U
R                  5       $  N{ N7f)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
Nr8   
orderbook:diff_order_book_idr   r   bts:subscribechanneleventdata)load_marketsmarketr-   extendwatchr9   )r3   r8   r9   paramsrD   messageHashr?   urlrequestmessage	orderbooks              r5   watch_order_bookbitstamp.watch_order_book5   s      !!!V$!"V+$vd|3iit$$7
 ++g.**SwLL	   	" Ms"   BBA&B=B>BBclientc                 d   U R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nU R                  U R                  U5      nU R                  US5      nU R                  US5      n	U R                  U	S5      n
SU-   nUch  [        UR                  5      nU R                  SS	S
5      nX:X  a  U R                  U R                  XUS 0 5        UR                  R                  U	5        g X:  a  g U R                  Xy5        UR                  X{5        g )Nr?   _r!   noncerB   microtimestampr;   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)r3   rO   rK   r?   partsmarketIdr8   storedOrderBookrR   delta
deltaNoncerH   cacheLengthr"   s                 r5   handle_order_bookbitstamp.handle_order_bookM   s   0 ""7I6c"##E1-!!(+//$//6B90&&u.>?
"V+=o334K !../?RSTM+

4//fdTVW!!((/ /14r7   c                 &   U R                  US5      nX1S'   U R                  U5      US'   U R                  US5      US'   U R                  US/ 5      nU R                  US/ 5      nUS   nUS   nU R	                  Xd5        U R	                  Xu5        g )N	timestampdatetimerS   rR   bidsasks)safe_timestampiso8601rY   rW   handle_bid_asks)r3   rL   re   rk   rm   rn   
storedBids
storedAskss           r5   r`   bitstamp.handle_delta|   s    ''{;	!*+ $Y 7	*!..u6FG	'ufb1ufb1v&
v&
Z.Z.r7   c                     [        S[        U5      5       H'  nU R                  X#   5      nUR                  U5        M)     g )Nr   )rangerZ   parse_bid_ask
storeArray)r3   bookSidebidAsksibidAsks        r5   rq   bitstamp.handle_bid_asks   s7    q#g,'A''
3F' (r7   c                     US   nU R                  US5      nU R                  US5      nXT:  a  g[        S[        U5      5       H%  nX&   nU R                  US5      nX:X  d  M   US-   s  $    [        U5      $ )Nr   rS   rR      )rY   rv   rZ   )	r3   rL   deltasfirstElementfirstElementNoncerR   r{   re   rf   s	            r5   get_cache_indexbitstamp.get_cache_index   s    ay --l<LM!!)W5$q#f+&AIE**52BCJ"1u	 '
 6{r7   sincec                 |  #    U R                  5       I Sh  vN   U R                  U5      nUS   nSU-   nU R                  S   S   nSUS   -   nSS	U0S
.n	U R                  X5      n
U R	                  XvX5      I Sh  vN nU R
                  (       a  UR                  X5      nU R                  XUSS5      $  N N<7f)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>`
Nr8   trades:r   r   live_trades_r=   r>   r?   r@   rk   T)rC   rD   r-   rE   rF   
newUpdatesgetLimitfilter_by_since_limit)r3   r8   r   r9   rG   rD   rH   rI   r?   rJ   rK   tradess               r5   watch_tradesbitstamp.watch_trades   s      !!!V$!&(iit$ 6$</$7
 ++g.zz#GII??OOF2E))&TRR! 	" Js"   B<B8A&B<=B:>;B<:B<c                 Z   U R                  US5      nU R                  US5      nU R                  US-  5      nU R                  US5      nU R                  US5      nUS   nU R                  US5      n	U	S:X  a  S	OS
n
U R                  UUU R	                  U5      UUS S S U
UUS S S.U5      $ )NrS   r=   r$   priceamountr8   typer   buysell)infork   rl   r8   r=   orderr   takerOrMakersider   r   costfee)rY   rT   parse_to_int
safe_traderp   )r3   traderD   rS   r=   rk   r   r   r8   sideRawr   s              r5   parse_ws_tradebitstamp.parse_ws_trade   s     **52BCeT*%%nt&;<	  0!!%2!##E62 AuF"Y/  
  	r7   c                    U R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nUS   nSU-   nU R                  US5      n	U R	                  X5      n
U R                  U R
                  U5      nUc6  U R                  U R                  SS5      n[        U5      nXR
                  U'   UR                  U
5        UR                  X5        g )	Nr?   rQ      r8   r   rB   r(   r$   )rT   rU   safe_marketrW   r   r   rY   r.   r   r_   ra   )r3   rO   rK   r?   rb   rc   rD   r8   rH   rB   r   tradesArrayr9   s                r5   handle_tradebitstamp.handle_trade   s    * ""7I6c"##E1-!!(+!&(w/##D1oodkk6:%%dllM4HE$U+K"-KK5!{0r7   c                 l  #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  U5      nUS   nSnUS-   US   -   nUUUUS.nU R	                  XU5      I Sh  vN n	U R
                  (       a  U	R                  X5      nU R                  XUSS	5      $  N~ N<7f)
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 argumentr8   private-my_ordersrQ   r=   )r8   r9   r   rG   rk   T)r   r=   rC   rD   subscribe_privater   r   r   )
r3   r8   r   r9   rG   rD   r?   rH   subscriptionorderss
             r5   watch_ordersbitstamp.watch_orders  s      >#DGG.Y$YZZ!!!V$!%mfTl2	
 --lPP??OOF2E))&TRR 	" Qs"   /B4B0AB45B26;B42B4c                    U R                  US5      nU R                  US0 5      nU R                  U R                  SS5      nU R                  c  [        U5      U l        U R                  nU R                  UR                  U5      nU R                  US5      nU R                  U5      n	U R                  US5      US'   U R                  XI5      n
UR                  U
5        UR                  U R                  U5        g )Nr?   rB   ordersLimitr$   r8   rA   )rT   rW   rY   r.   r   r   subscriptionsrD   parse_ws_orderr_   ra   )r3   rO   rK   r?   r   r9   storedr   r8   rD   parseds              r5   handle_ordersbitstamp.handle_orders  s    $ ""7I64!!$,,tD;;07DKv';';WE!!,9V$))'7;g$$U3ft{{G,r7   c           	         U R                  US5      nU R                  US5      nUS:X  a  SOSnU R                  US5      nS nS nUS:X  a  SnO)US	:X  a  S
nO US:X  a  SnSnOUS:X  a  SnSnO
US:X  a  SnSnU R                  US5      n	U R                  US5      n
U R                  US5      nU R                  US5      nS n[        R                  " X5      (       a  SnOUS:X  a  SnU R	                  US5      nU R                  S U5      nUS   nU R                  0 SU_SU_SU_SS _SU_SU R                  U5      _SS _SU_S U_S!S _S"U_S#U	_S$S _S%S _S&U
_S'S _S(S _US US S S).EU5      $ )*Nid_str
order_type1r   r   order_subtype0r9   2rD   4IOC6FOK8GTD	price_str
amount_stramount_tradedrA   closedorder_deletedcanceledrl   r8   r   r=   clientOrderIdrk   lastTradeTimestampr   timeInForcepostOnlyr   r   	stopPricetriggerPricer   r   average)filled	remainingstatusr   r   )rT   safe_string_lowerr   	string_eqro   r   
safe_orderrp   )r3   r   rD   r=   orderTypeRawr   orderSubTypeRaw	orderTyper   r   r   r   rA   r   rk   r8   s                   r5   r   bitstamp.parse_ws_order=  sB   & eX.--e\B&#-vE00H	c!I# I#IK#IK#IK  4!!%6!!%9  0V,,Fo%F''z:	!!$/!  
E 
f 
 " 
 T	 

  
 Y/ 
 !$ 
 I 
 ; 
  
 D 
 U 
  
 D 
 f 
  D! 
" t# 
$ - 
. / 	r7   c                     U R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nU R                  5       U R                  U'   g )Nr?   rQ   r!   )rT   rU   rV   
order_bookrX   )r3   rO   rK   r?   rb   rc   r8   s          r5   handle_order_book_subscription'bitstamp.handle_order_book_subscription  sY    ""7I6c"##E1-!!(+"&//"3r7   c                 v    U R                  US5      nUR                  S5      S:  a  U R                  X5        g g )Nr?   r   r   )rT   findr   )r3   rO   rK   r?   s       r5   handle_subscription_status#bitstamp.handle_subscription_status  s:     ""7I6<<%*//@ +r7   c                 (   U R                  US5      nU R                  U R                  U R                  S.n[	        UR                  5       5      n[        S[        U5      5       H*  nXV   nUR                  U5      S:  d  M  XG   nU" X5        M,     g )Nr?   )live_tradesdiff_order_bookr   r   r   )	rT   r   rh   r   listkeysrv   rZ   r   )	r3   rO   rK   r?   methodsr   r{   keymethods	            r5   handle_subjectbitstamp.handle_subject  s    L ""7I6,,#55!%!3!3

 GLLN#q#d)$A'C||C 2% v'	 %r7   c                     U R                  US5      nUS:X  ae  U R                  S-   U R                  U5      -   nU R                  US0 5      nU R	                  US5      nU R                  U R                  S   Xd5        g)NrA   z	bts:error rB   coder*   T)rT   r=   jsonrW   safe_numberthrow_exactly_matched_exceptionr/   )r3   rO   rK   rA   feedbackrB   r   s          r5   handle_error_messagebitstamp.handle_error_message  sy       '2Kww}tyy'99H??7FB7D##D&1D001I4Zr7   c                     U R                  X5      (       d  g U R                  US5      nUS:X  a  U R                  X5        g U R                  X5        g )NrA   zbts:subscription_succeeded)r   rT   r   r   )r3   rO   rK   rA   s       r5   handle_messagebitstamp.handle_message  sP    ((99B   '200++F<0r7   c                   #    U R                  5         U R                  5       nU R                  U R                  S5      nUb  X#:  a  U R	                  U5      I S h  vN nU R                  US5      nUb`  U R                  US5      nU R                  USS5      nU R                  X'5      U R                  S'   X`R                  S'   XPR                  S'   g g g  N{7f)Nr%   tokenuser_id	valid_secr$   r&   r'   )check_required_credentialsmillisecondsrY   r.   privatePostWebsocketsTokenrT   safe_integer_productsum)r3   rG   timer%   responsesessionTokenr&   validitys           r5   authenticatebitstamp.authenticate
  s     '')  "%%dllK@	4#3!<<VDDH  ++Hg>L'))(I>44X{DQ,0HHT,D[))/X&1=-. ( $4Ds   ACCA<Cc                   #    U R                   S   S   nU R                  5       I S h  vN   USU R                  S   -   -  nSUU R                  S   S.S.nX!S	'   U R                  XBU R	                  XS5      X!5      I S h  vN $  N\ N7f)
Nr   r   -r&   r>   r'   )r?   authr@   rH   )r-   r  r.   rF   rE   )r3   r   rH   rG   rI   rJ   s         r5   r   bitstamp.subscribe_private  s     iit$!!!sT\\(333$&%56
 '2]#ZZ$++g2NP[jjj 	" ks"   &B	BAB	 BB	B	)r   )N)#__name__
__module____qualname____firstlineno__r   r2   strr   r	   rM   r   rh   r`   rq   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r  r   __static_attributes____classcell__)r4   s   @r5   r   r      sM   !# !F @DB !S ! !S\ !0-5 -5^
/(
 <@d[] S SS S Sbfglbm S6%N#16 #1J 04$UYbd S SC Ss Simnsit S6-F -@IV4V 4A A"1(V 1(f6 t '1V '1R )+ >* IK k kr7   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    r7   r5   <module>r     sA     O H H H 4  0 . %[kt!!** [kr7   