
    ei:                         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 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ArrayCacheBySymbolBySide)AnyInt	OrderBookPositionStringsTrade)Client)List)ExchangeError)AuthenticationErrorc            
           e Zd Zdef fdZd Zd Zddi fdededede	e
         fd	Zd
efdZdi fdededefdZd
efdZd Zd
efdZd Zd Zdddi fdededede	e         fdZdi fd
ededefdZd Zd Zd
efdZd
efdZ xZS )	aftermathreturnc                     |                      t          t          |                                           ddddddddddddddddiidddiidd	d	ddd
dddii d          S )NTF)wswatchBalancewatchMyTrades
watchOHLCVwatchOrderBookwatchOrderswatchTickerwatchTickerswatchBidsAskswatchTradeswatchTradesForSymbolswatchPositionsr   swapz.wss://aftermath.finance/iperps-api/ccxt/streamz6wss://testnet.aftermath.finance/iperps-api/ccxt/stream)apitest  )fetchPositionsSnapshotawaitPositionsSnapshot)tradesLimitordersLimitr   	keepAliveix  )hasurlsoptions	streaming
exceptions)deep_extendsuperr   describe)self	__class__s    P/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/pro/aftermath.pyr/   zaftermath.describe   s    i 6 6 ? ? A A %!&#"&$$ %!&#)."&    P  X   $#.2.2# #  UM(D
 (D
 ( ( (	    c                    K   | j         d         d         d         dz   |z   }|                     |||                     |          ||           d {V S Nr    r   r   /)r)   watchjson)r0   suffixmessageHashmessageurls        r2   watch_publiczaftermath.watch_public<   s_      it$V,s2V;ZZ[$))G2D2DkSZ[[[[[[[[[r3   c                    K   | j         d         d         d         dz   |z   }|                     |||                     |          ||           d {V S r5   )r)   watch_multipler8   )r0   r9   messageHashesr;   r<   s        r2   watch_public_multiplezaftermath.watch_public_multiple@   sb      it$V,s2V;((mTYYw=O=OQ^`ghhhhhhhhhr3   Nsymbolsincelimitc                 |  K   |                                   d{V  |                     |          }|d         }|d         dz   }d|d         i}|                     ||          }|                     d||           d{V }	| j        r|	                    |d         |          }|                     |	|||d          S )a\  
        watches information on multiple trades made in a market

        https://testnet.aftermath.finance/docs/#/CCXT/service%3A%3Ahandlers%3A%3Accxt%3A%3Astream%3A%3Atrades

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        NrB   id@tradechIdtradesT)load_marketsmarketextendr=   
newUpdatesgetLimitfilter_by_symbol_since_limit)
r0   rB   rC   rD   paramsrK   topicrequestr;   rI   s
             r2   watch_tradeszaftermath.watch_tradesD   s       !!!!!!!!!V$$!tx'F4L
 ++gv..((5'BBBBBBBB? 	=OOF8$4e<<E00tTTTr3   clientc                    |                      |          }|d         }|                     |          }|| j        vr5|                     | j        dd          }t          |          }|| j        |<   |d         dz   }| j        |         }	|	                    |           |	| j        |<   |                    |	|           d S )NrB   r%   r"   rF   rG   )parse_traderK   rI   safe_integerr*   r   appendresolve)
r0   rT   r;   traderB   rK   rD   storedr:   rI   s
             r2   handle_tradezaftermath.handle_trade]   s    "   ))xV$$$+%%%%dlM4HHE&&F"(DKTlX-V$e$Fv{+++++r3   c                 ,  K   |                                   d{V  |                     |          }|d         }|d         dz   }d|d         i}|                     ||          }|                     d||           d{V }|                                S )ag  

        https://testnet.aftermath.finance/docs/#/CCXT/service%3A%3Ahandlers%3A%3Accxt%3A%3Astream%3A%3Aorderbook

        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
        NrB   rF   
@orderbookrH   	orderbook)rJ   rK   rL   r=   rD   )	r0   rB   rD   rP   rK   rQ   rR   r;   r_   s	            r2   watch_order_bookzaftermath.watch_order_book{   s       !!!!!!!!!V$$!t|+F4L
 ++gv..++KHHHHHHHH	   r3   c                 j   |                      |d          }|                     |          }|d         dz   }|| j        vr|                     | j        dd          }|j        |         }|                     |d|          }|                     i |          | j        |<   ||d<   |                     | j        |||           d S | j        |         }	|                     |	d          }
|                     |d          }||
dz   k    r/| 	                    |||	           |
                    |	|           d S d S )	NrB   rF   r^   watchOrderBookLimitr"   rD   nonce   )safe_stringrK   
orderbooksrW   r*   subscriptions
order_bookspawnfetch_order_book_snapshothandle_order_book_messagerY   )r0   rT   r;   rB   rK   rQ   defaultLimitsubscriptionrD   r_   	prevNoncerc   s               r2   handle_order_bookzaftermath.handle_order_book   sH    !!'844V$$t|+$/)),,T\;PRVWWL!/6L%%lG\JJE&*oob%&@&@DOF#$)L!JJt5vwUUUUU/I)))W==I%%gw77EQ''..vw	JJJy%00000 ('r3   c                 n  K   |                      |d          }|                     |          }|d         dz   }	 |                     | j        dd          }|                     |d|          }|                     |d          }	|                     |||	           d {V }
|                     | j        |          d S | j        |         }|                    |
           || j        |<   |	                    ||           d S # t          $ r)}|j        |= |                    ||           Y d }~d S d }~ww xY w)NrB   rF   r^   rb   r"   rD   rP   )re   rK   rW   r*   	safe_dictfetch_rest_order_book_safe
safe_valuerf   resetrY   	Exceptionrg   reject)r0   rT   r;   rm   rB   rK   r:   rl   rD   rP   snapshotr_   es                r2   rj   z#aftermath.fetch_order_book_snapshot   s\     !!'844V$$Tl\1	*,,T\;PRVWWL%%lG\JJE^^L(;;F!<<VUFSSSSSSSSHt77?/IOOH%%%&/DOF#NN9k22222 	* 	* 	*$[1MM![)))))))))	*s   BD =AD 
D4D//D4c                 f   |                      |d         |                     |dg                      |                      |d         |                     |dg                      |                     |d          }|                     |d          }||d<   |                     |          |d<   ||d<   |S )Nasksbids	timestamprc   datetime)handle_deltasrs   rW   iso8601)r0   rT   r;   r_   r|   rc   s         r2   rk   z#aftermath.handle_order_book_message   s    9V,doogvr.R.RSSS9V,doogvr.R.RSSS%%g{;;	!!'733!*	+ $Y 7 7	*"	'r3   c                     |                      |dd          }|                      |dd          }|                    ||           d S )Npricer   quantityrd   )safe_float_2store)r0   booksidedeltar   amounts        r2   handle_deltazaftermath.handle_delta   sJ    !!%!44""5*a88uf%%%%%r3   c                 ~    t          dt          |                    D ]}|                     |||                    d S )Nr   )rangelenr   )r0   r   deltasis       r2   r~   zaftermath.handle_deltas   sH    q#f++&& 	3 	3Ahq	2222	3 	3r3   symbolsc                   K   |                                   d{V  g }|                     |          }|                     |          sAt          dt	          |                    D ]"}||         }|                    d|z              #n|                    d           |                     |d          }d|i}	|                     |	|          }
d}| j        d         d         d         d	z   |z   }| 	                    |          }| 
                    |||           |                     d
dd          }|                     d
dd          }|r=|r;| j        4|                    d           d{V }|                     ||||d          S |                     |||
           d{V }| j        r|S |                     | j        |||d          S )a  

        https://testnet.aftermath.finance/docs/#/CCXT/service%3A%3Ahandlers%3A%3Accxt%3A%3Astream%3A%3Apositions

        watch all open positions
        :param str[]|None symbols: list of unified market symbols
        :param int [since]: the earliest time in ms to fetch positions for
        :param int [limit]: the maximum number of position structures to retrieve
        :param dict params: extra parameters specific to the exchange API endpoint
        :param int [params.accountNumber]: account number to query orders for, required
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        Nr   positions::	positionsaccountNumberr    r   r   r6   r   r#   Tr$   )rJ   market_symbolsis_emptyr   r   rX   safe_numberrL   r)   rT   set_positions_cachehandle_optionr   futurefilter_by_symbols_since_limitrA   rM   )r0   r   rC   rD   rP   r@   r   rB   r   rR   r;   r9   r<   rT   r#   r$   rw   newPositionss                     r2   watch_positionszaftermath.watch_positions   s%      !!!!!!!!!%%g..}}W%% 	.1c'll++ = = $$]V%;<<<<=   ---((AA]
 ++gv..it$V,s2V;S!!  &999!%!3!34DF^`d!e!e!%!3!34DF^`d!e!e! 	]&< 	]AW#]]+CDDDDDDDDH55hPUW[\\\!77wWWWWWWWW? 	 11$.'5RWY]^^^r3   rP   c                     |                      ddd          }|rBd}||j        vr5|                    |           |                     | j        ||||           d S d S t                      | _        d S )Nr   r#   F)r   futuresr   ri   load_positions_snapshotr   r   )r0   rT   r   rP   r#   r:   s         r2   r   zaftermath.set_positions_cache  s    !%!3!34DF^`e!f!f! 	82K6>11k***

47gW]^^^^^ 21 677DNNNr3   c                 `  K   |                      ||           d {V }t                      | _        | j        }t          dt	          |                    D ]}||         }|                    |            |j        |         }	|	                    |           |                    |d           d S )Nr   r   )fetch_positionsr   r   r   r   rX   r   rY   )
r0   rT   r:   r   rP   r   cacher   positionr   s
             r2   r   z!aftermath.load_positions_snapshot  s      ..w????????	133q#i..)) 	# 	#A |HLL"""",uuk*****r3   c                 d   | j         t                      | _         | j         }|                     |d          }|                     |          }|                     ||          }|                    |           d|d         z   }|                    ||           |                    |gd           d S )NrB   r   r   )r   r   re   safe_marketparse_positionrX   rY   )r0   rT   r;   r   rB   rK   r   r:   s           r2   handle_positionszaftermath.handle_positions  s    0 >!577DN!!'844!!&))&&w77X#fX&66x---z;/////r3   c                    t          |t                    r|                    d          dk    r	 | j        dz   |z   }|                     | j        d         ||           t          |          # t          $ r_}t          |t                    r*d}|	                    ||           ||j
        v r|j
        |= n|	                    |           Y d }~dS d }~ww xY wdS )Nerrorr    exactauthenticatedTF)
isinstancestrfindrF   throw_exactly_matched_exceptionr,   r   ru   r   rv   rg   )r0   rT   r;   feedbackr   r:   s         r2   handle_error_messagezaftermath.handle_error_message;  s     gs## 	 ||G$$)) #w}w6H889QSZ\deee'000       !%)<== -&5e[999&&*>>> & 4[ Ae,,,44444  us   >A. .
C8ACCc                     |                      ||          rd S d|v r|                     ||           d S d|v r|                     ||           d S |                     ||           d S )Nrz   notional)r   ro   r   r\   )r0   rT   r;   s      r2   handle_messagezaftermath.handle_messageP  s    $$VW55 	F W""67333337""!!&'22222fg.....r3   )__name__
__module____qualname__r   r/   r=   rA   r   r   r   r
   rS   r   r\   r   r`   ro   rj   rk   r   r~   r	   r   r   dictr   r   r   r   r   __classcell__)r1   s   @r2   r   r      sR       )# ) ) ) ) ) )V\ \ \i i i <@d[] U U US U Ubfglbm U U U U2,6 , , , ,< @DB ! !S ! !S\ ! ! ! !,1 1 1 1 1B* * *(    & & &
3 3 3 8<$]ajl '_ '_W '_C '_WZ '_quv~q '_ '_ '_ '_R FJZ\ 8 8& 87 8SW 8 8 8 8
+ 
+ 
+!0 !0 !0F6    */V / / / / / / / /r3   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   ccxt.base.typesr   r   r   r   r	   r
   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   async_supportr    r3   r2   <module>r      s        Q Q Q Q Q Q Q Q I I I I I I I I I I I I I I I I 4 4 4 4 4 4       * * * * * * 0 0 0 0 0 0L/ L/ L/ L/ L/", L/ L/ L/ L/ L/r3   