
    i.                    0   d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlZej	        
                    ej	                            e                    Zej	        
                    ej	        
                    e                    Zej	                            e           d dl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 d dlmZ d dlmZ  G d	 d
e          Z e            Z e j                    Ze                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     ddd           e                     d dd           e                     d!e!d"#           e                     d$e"d%d&'           e                     d(e"d)d&'           e#                    e*           ej	        
                    ej                  Z	d+ej	        
                    ej                  v r e$d,          e$Z%d- Z&e&e_'        d.ej	        (                    e          vZ)ed/z   Z*ed/z   Z+ej,        Z-d0Z.d1Z/d2Z0d3 Z1 e1d          Z2 G d4 d5          Z3d6 Z4d7 Z5d8 Z6d9 Z7d: Z8d; Z9d< Z:dPd>Z;d? Z<d@ Z=dA Z>dB Z?dC Z@dQdDZAdRdEZBdF ZCdSdHZDdSdIZEdJ ZFdK ZGd$ejH        fdLZI G dM dNe3          ZJeKdOk    r5ejL        rejL        ndZL eJ            M                    ejN        eL           dS dS )T    N)	format_tbformat_exception)NotSupported)
ProxyError)OperationFailed)ExchangeNotAvailable)OnMaintenance)AuthenticationErrorc                   F    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdS )ArgvFN)__name__
__module____qualname__id_testsstatic_testsws_testsrequest_testsresponse_testssandboxprivateOnlyprivatewsverbosenonceexchangesymbolinfo     Y/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/ccxt/test/test_sync.pyr   r   $   sU        HLHMNGKG	BGEHFDDr   r   	--sandbox
store_truezenable sandbox mode)actionhelp--privateOnlyzrun private tests only	--privatezrun private tests	--verbosezenable verbose output--wszwebsockets version--infozenable info outputz--staticzrun static tests
--useProxy	--idTestszrun brokerId tests--responseTestszrun response tests--requestTestsz--nonceinteger)typer$   r   zexchange id in lowercase?)r/   r$   nargsr   zsymbol in uppercase)	namespacezsite-packagesa  You are running test_async.py/test.py against a globally-installed version of the library! It was previously installed into your site-packages folder by pip or pip3. To ensure testing against the local folder uninstall it first with pip uninstall ccxt or pip3 uninstall ccxtc           
          t          | |dd                    t          |                    z              t          d           d S )Nz
<UNHANDLED EXCEPTION>

   )dumpjoinr   exit)r/   value	tracebacks      r    handle_all_unhandled_exceptionsr;   \   s=    $%59YCWCW9X9XYZZZGGGGGr   asyncz
/../../../i'  pyproxiesc                 L   t          t          |           rt          t          |           nd}d| z   }t          t          |          rt          t          |          nd}|                     dd          }t          t          |          rt          t          |          nd}|p|p|S )NFz-- )hasattrargvgetattrreplace)arg
arg_existswith_hyphenarg_exists_with_hyphenwithout_hyphenarg_exists_wo_hyphens         r    get_cli_arg_valuerK   p   s    '.tS'9'9Ds###uJ*K;B4;U;U`WT;777[`[[r**N<CD.<Y<Yd74888_dG/G3GGr   c                   Z    e Zd ZdZeZdZdZdZdZdZ	i Z
i Zi Zi Zi ZdZeZeZeZeZg ZeZdS )baseMainTestClassPYFr4   N)r   r   r   langis_synchronousrequest_tests_failedresponse_tests_failedr   r   	load_keysskipped_settings_for_exchangeskipped_methodscheck_public_tests
test_filespublic_testsnew_linerootDirroot_direnvVarsenv_varsextrootDirForSkipsroot_dir_for_skipsonly_specific_testsproxyTestFileNameproxy_test_file_namer   r   r    rM   rM   {   su        D#N !NHI$&!OJLHHH
C(,Dr   rM   c                  ^    t          d                    d | D                                  d S )N c                 ,    g | ]}t          |          S r   str).0rE   s     r    
<listcomp>zdump.<locals>.<listcomp>   s    ---CHH---r   )printr7   )argss    r    r6   r6      s1    	#((-----
.
./////r   c                     | S Nr   rg   s    r    convert_asciiro      s    Jr   c                 *    t          j        |           S rn   )jsonloadselems    r    
json_parseru          :dr   c                 *    t          j        |           S rn   )rq   dumpsrs   s    r    json_stringifyry      rv   r   c                 ~    t          j        dd|                                           }|                    dd          S )Nz(?<!^)(?=[A-Z])_	o_h_l_c_vohlcv)resublowerrD   )contentress     r    convert_to_snake_caser      s6    
&#S'
2
2
8
8
:
:C;;{G,,,r   c                     | S rn   r   )
methodNames    r    get_test_namer      s    r   c                 @    t           j                            |           S rn   )ospathisfiler   s    r    io_file_existsr      s    7>>$r   Tc                 ~    t          | dd          }|                                }|rt          j        |          S |S )Nrzutf-8)encoding)openreadrq   rr   )r   decodefsr   s       r    io_file_readr      s@    	dC'	*	*	*BggiiG z'"""r   c                 *    t          j        |           S rn   )r   listdirr   s    r    io_dir_readr      s    :dr   c                 b    dt          |          z   } t          | |         |          ||g|R  S )Ntest_)r   rC   )rW   r   r   skippedPropertiesrl   methodNameToCalls         r    call_methodr      sB    !6z!B!BB<7:j)+;<<XGX`[_````r   c                 (     t          | |          | S rn   )rC   r   r   rl   s      r     call_exchange_method_dynamicallyr      s    (78Z(($//r   c                 $    t          | ||          S rn   )r   r   s      r    call_overriden_methodr      s    +Hj$GGGr   c           	          dt          |           j        z   dz   d                    t          t          |           | | j        d                    z   }t          |          t          k    r|dt                   }|S )N[] r@      )limitr   )r/   r   r7   r   __traceback__lenLOG_CHARS_LENGTH)excmessages     r    exception_messager      sp    DII&&-8HcTWY\Yjrs8t8t8t0u0uuG
7||&&&!,,-Nr   c                 $    t          |            d S rn   )r8   )codes    r    exit_scriptr      s    JJJJJr   c                 Z    t          | |          rt          | |          }||dk    r|S |S )Nr@   )rA   rC   )r   propdefaultValuer   s       r    get_exchange_propr      s;    x h%%?sbyyJr   c                 d    t          | ||           t          | t          |          |           d S rn   )setattrr   )r   r   r9   s      r    set_exchange_propr      s5    HdE"""H+D11599999r   Fc                 ~    |r t          t          |           |          S  t          t          |           |          S rn   )rC   ccxtproccxt)
exchangeIdrl   is_wss      r    init_exchanger      s>     2+ww
++D111$74$$T***r   c                 r   i }| t           gz   }t          dt          |                    D ]}||         }t          |          }t          sdnd}t
          dz   |z   dz   }d|z   dz   |z   }	|rd}t
          dz   |z   d	z   }d
|z   }	|dz   |z   dz   }
t          |
          rt          j        |	          }|||<   |S )Nr   r<   sync/z
ccxt.test.z.test_proz/../z/test/Exchange/zccxt.pro.test.Exchange.test_r   z.py)	rb   ranger   r   rP   DIR_NAMEr   	importlibimport_module)
propertiesr   testsfinalPropListir   name_snake_caseprefixdir_to_testmodule_stringfilePathWithExtimps               r    get_test_filesr      s    E"3!44M1c-(()) $ $"1%
/
;; .:Fnv-3$v-8?J 	MF"V+f47HHK:_LM%//AEIO,, 	$)-88C #E*Lr   c                 d    t           s&t          | d          r|                                  d S d S d S )Nclose)rP   rA   r   )r   s    r    r   r      sE     wx99    r   c                 
    | d u S rn   r   )r9   s    r    is_null_valuer      s    D=r   c                 "    dfd	}|| _         | S )NGETc                     S rn   r   )urlmethodheadersbodydatas       r    fetchz!set_fetch_response.<locals>.fetch  s    r   )r   NN)r   )r   r   r   s    ` r    set_fetch_responser     s-         HNOr   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d@d	Z
d
 Zd Zg dfdZd Zd Zd Zd Zd@dZdAdZdAdZd@dZd Zd Zd Zd@dZd Zd Zd@dZd Zd ZdBd Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d@d'Z&d@d(Z'd@d)Z(dCd*Z)dCd+Z*dCd,Z+d- Z,d. Z-d/ Z.d0 Z/d1 Z0d2 Z1d3 Z2d4 Z3d5 Z4d6 Z5d7 Z6d8 Z7d9 Z8d: Z9d; Z:d< Z;d= Z<d> Z=d? Z>dS )DtestMainClassc                    t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d	          | _	        t          d
          | _
        t          d          | _        d S )Nr,   r+   r-   r)   r'   z--debugr&   r%   r!   z
--loadKeysr(   )rK   r   r   r   r   r   debugprivate_testprivate_test_onlyr   rS   r   )selfs    r    parse_cli_argsztestMainClass.parse_cli_args  s    /0ABB)+66./?@@%h//	(55&y11
-k::!2?!C!C(55*<88)&11r   c                    |                                   | j        r5| j        r.|                     ||           |                     ||           d S | j        r|                     ||           d S | j        r|                     ||           d S | j        r|                                  d S ||nd}||| j        d}t          | j	        dz   | j	        z   dz   dz   | j
        t          |          | j	                   | j        | j        ddd}t          ||| j                  }|j        rt!          d           |                     |           t%          t'          | j                                                            dk    s
J d	            |                     |           |                     |          }|                     ||           t!          d           d S )
Nall)r   r   isWsr@   z[INFO] TESTING T0u  )r   r   enableRateLimittimeoutr   zTest files were not loaded)r   r   r   run_static_request_testsrun_static_response_testsr   run_broker_id_testsr   r6   rY   r^   ry   r   r   r   aliasr   import_filesr   listrW   keysexpand_settings check_if_specific_test_is_chosen
start_test)r   exchange_idsymbol_argv
symbol_strexchange_objectexchange_argsr   r   s           r    initztestMainClass.init  s    	$"5 	))+{CCC**;DDDF 	**;DDDF 	))+{CCCF= 	$$&&&F$/$;[[
# M
 

 	T]R$-/"47HH$(TbcrTsTsuy  vC  	D  	D  	D|Z#	
 
 !mT]KK> 	NNN(###4,,..//0014446R444X&&&66{CC&)))Ar   c                    |t          | j                                                  }|                    d          }t	          |          dk    rpt          dt	          |                    D ]R}||         }t          dt	          |                    D ]*}||         }||k    r| j                            |           +St	          | j                  dk    rd S |S )N,r5   r   )r   rW   r   splitr   r   ra   append)r   r   test_file_namespossible_method_namesr   test_file_namejmethod_names           r    r   z.testMainClass.check_if_specific_test_is_chosen>  s    ""4?#7#7#9#9::O$/$5$5c$:$:!())Q..q#o"6"677 L LA%4Q%7N"1c*?&@&@AA L L&;A&>)[88 4;;NKKKL
 4+,,q00tr   c                     t          |j                                                  }|                    d           t	          || j                  | _        d S )NloadMarkets)r   hasr   r   r   r   rW   )r   r   r   s      r    r   ztestMainClass.import_filesN  sH    (,++--..
-((((T]CCr   c                    |j         }t          |d          }t          |                                          }t	          dt          |                    D ]k}||         }||         }|rWt          ||          G|dz   |z   }|                                }	|	| j        v r| j        |	         nd }
|
rt          |||
           ld S )NrequiredCredentialsr   r{   )	idr   r   r   r   r   upperr]   r   )r   r   r   	req_credsobjkeysr   
credentialis_requiredfull_keycredential_env_namecredential_values              r    load_credentials_from_envz'testMainClass.load_credentials_from_envS  s    k%h0JKK	y~~''((q#g,,'' 	N 	NA J#J/K N0:FFN&,z9&.nn&6&6#J]aeanJnJn4=1D#E#Euy # N%h
<LMMM	N 	Nr   c                    |j         }| j        dz   }| j        dz   }t          |          }t          |          }|rt          |          ni }|rt          |          ni }|                    ||          }	|                    |	|i           }
|
rt          |
                                          }t          dt          |                    D ]v}||         }|
|         rdd }t          |
|         t                    r.t          ||i           }|                    ||
|                   }n|
|         }t          |||           w| j        r|                     |           | j        dz   }t          |          }|                    ||i           | _        | j        }|                    |d          }||                    |          |_        t)          d          rl|                    |d          |_        |                    |d          |_        |                    |d	          |_        |                    |d
          |_        |                    |di           | _        i | _        d S )Nz	keys.jsonzkeys.local.jsonr   zskip-tests.jsonr   r*   	httpProxy
httpsProxywsProxywssProxyskipMethods)r
  r[   r   r   deep_extend
safe_valuer   r   r   r   
isinstancedictr   r   rS   r  r`   rT   parse_to_intr   rK   safe_string
http_proxyhttps_proxyws_proxy	wss_proxyrU   checked_public_tests)r   r   r   keys_global
keys_localkeys_global_existskeys_local_existsglobal_settingslocal_settingsall_settingsexchange_settingssetting_keysr   keyfinal_valueexistingskipped_fileskipped_settingsrT   r   s                       r    r   ztestMainClass.expand_settingsa  s   kmk1]%66
+K88*:667IQ,{333r5FNj111B++O^LL$//k2NN 	B 1 6 6 8 899L1c,//00 	B 	B"1o$S) B"&K!"3C"8$?? =#4XsB#G#G&.&:&:8EVWZE[&\&\&7&<%h[AAA> 	5**8444.1BB'55-5-@-@AQS^`b-c-c*(,(J%%%&CYOO'44W==H\** 	a"*"6"67TVa"b"bH#+#7#78UWc#d#dH  ( 4 45RT] ^ ^H!)!5!56SU_!`!`H'223PR_acdd$&!!!r   c                 z    d}t          |          }||z
  dz
  }|dk    rt          d|          D ]}|dz  }||z   S )Nr@   r   re   )r   r   )r   r   sizer   message_lengthmissing_spacer   s          r    add_paddingztestMainClass.add_padding  sZ    W~-111m,,  s
}r   Nc                 F   |                     |j        ddd          }|                     |j        dd          }|6|d         }|d         rd}n#|d         rd}n|                    |d          rd}d	|j        v }|rd
nd}|j        dz   |z   dz   |z   }||dz   |z   dz   }|S )NdefaultTyper/   r@   defaultSubTypesubTypelinearinversequantor   z(WS)re   z [subType: r   )safe_string_2optionsr  r  r
  )r   r   marketmarket_typemarket_sub_typer   ws_flagresults           r    exchange_hintztestMainClass.exchange_hint  s    ,,X-=}fVXYY"001ACSU^__ .Kh +"*	" +"+$$VX66 +"*%!)&&rs"W,s2[@&m+o=DFr   c                 |   d|v r| j         dk    r
d|j        d<   d|v r| j         dk    rd S |                     ||          }|dk    }|dk    }|| j        k    }|s|| j        v r|sd S d }	||j        v o|j        |         }
|s6t          | j                  dk    r|                    || j                  sd	}	n,|s|
s|sd
}	n#t          |t                    rd}	n|| j        vrd}	|r|                    d           |	rA| j        r8t          |                     |	d          |                     |          |           d S | j        rTdd                    |          z   dz   }t          |                     dd          |                     |          ||           t%          | j        ||||           |r
d| j        |<   d S )N	OrderBookcsFchecksumphpr  fetchCurrenciesr   z[INFO] IGNORED_TESTz[INFO] UNSUPPORTED_TESTz[INFO] SKIPPED_TESTz[INFO] UNIMPLEMENTED_TESTT   (r   )z[INFO] TESTING)r^   r@  	get_skipsrc   r$  r  r   ra   in_arrayr  rh   rW   load_marketsr   r6   r7  rF  r7   r   )r   r  r   rl   	is_publicskipped_properties_for_methodis_load_marketsis_fetch_currenciesis_proxy_testskip_messagesupported_by_exchangeargs_stringifieds               r    test_methodztestMainClass.test_method  s>   +%%$(d*:*:+0HZ(+%%$(e*;*;F(,x(M(M%&-7*.??$(AA 	kT-FFFPcFF!,!< [(,{B[ 	7C(@$A$AA$E$EhN_N_`kmq  nF  OG  OG$E0LL  	7)> 	7} 	74LL5s;; 	70LL006L 	(!!$''' 	y dT%%lB779K9KH9U9UWbcccF9 	v"SXXd^^3c9!!"2B779K9KH9U9UWbdtuuuDO[(<Y[_``` 	:59D%k2r   c                 H   i }||dz   | j         z   g}t          dt          |                    D ]c}||         }|| j        v rPt	          | j        |         t
                    r| j        |         c S |                    || j        |                   }dg dg dg dg dddgg d	d
dgd}t          |                                          }t          dt          |                    D ]}||         }	||	         }
|	                    ||
          rj|	| j        v r/t	          | j        |	         t
                    r| j        |	         c S |
                    | j        |	i           }|                    ||          }d|v rd|vr|d         |d<   d|v rd|vr|d         |d<   |S )N.r   )fetchOrderBookfetchOrderBooksfetchL2OrderBookwatchOrderBookwatchOrderBookForSymbols)fetchTickerfetchTickerswatchTickerwatchTickers)fetchTradeswatchTradeswatchTradesForSymbols)
fetchOHLCV
watchOHLCVwatchOHLCVForSymbolsfetchLedgerfetchLedgerEntry)fetchDepositsWithdrawalsfetchDepositsfetchWithdrawalsfetchDepositWithdrawFeefetchDepositWithdrawFees)	orderBooktickertrader}   ledgerdepositWithdrawdepositWithdrawFee	timestampdatetimebidask)r^   r   r   rU   r  rh   r  r   r   rQ  	safe_dict)r   r   r  final_skipsmethod_namesr   m_nameobject_skipsobject_namesobject_nameobject_methodsextra_skipss               r    rP  ztestMainClass.get_skips  s   #[3%6%ABq#l++,, 	b 	bA!!_F---d26:C@@ b/7777"*"6"6{DDXY_D`"a"aK A  A  ATTTLLLIII$&89```#<>X"Y
 
 L--//00q#l++,, 	M 	MA&q/K)+6N  n== M4#777jI]^iIjlo>p>p7/<<<<&001E{TVWW&22;LL ;&&{1J1J&1+&>K
#[  5K+?+?!,U!3Kr   Fc                    d}|                     |          }t          d|          D ])}	 |                     ||||            dS # t          $ r}|dk    }	t	          |t
                    }
t	          |t                    }t	          |t                    }|r||dz
  k    rt	          |t                    }t	          |t                    }d }d }|	r
d}|rd}nd}n|r|sd}d}nd}d}|rdnd}t          |d	d
|                     |          ||t          |                     |cY d }~c S |                    |dz             Y d }~#|	r;t          ddt          |          |                     |          ||           Y d }~ dS |rA| j        r3t          dt          |          |                     |          ||           Y d }~ dS |rD|
rB| j        r4t          ddt          |          |                     |          ||           Y d }~ dS t          dt          |          |                     |          ||           Y d }~ dS d }~ww xY wdS )N   r   Tr  r5   F[TEST_FAILURE]z[TEST_WARNING]zHMethod could not be tested due to a repeated Network/Availability issues | i  zExchange can not load marketsz[INFO] NOT_SUPPORTED[INFO]z(Authentication problem for public method)rq   r   r[  	Exceptionr  r
   r   r   r	   r   r6   rF  r   sleepr   )r   r  r   rl   rS  max_retriesrZ  r   erU  is_auth_erroris_not_supportedis_operation_failedis_on_maintenanceis_exchange_not_availableshould_failreturn_success	fail_types                     r    	test_safeztestMainClass.test_safe  s    #==..q+&& =	% =	%A<%  hiHHHtt 9% 9% 9%#.-#?!+A/B!C!C$.q,$?$? '1!_'E'E#& 4%K!O++-7=-I-I)5?CW5X5X1&*)-* 6-2N0 3.3.2  9 6AR 6.216 /4158C$Y$4$4IY	Y(rty{  |N  |N  OW  |X  |X  Ze  gw  yJ  KL  yM  yM  N  N  N--------- !q4x000  ' %-/NPabcPdPdfjfxfx  zB  gC  gC  EP  Rb  c  c  c$uuuuuu ( $9 L !79J19M9MtOaOabjOkOkmx  {K  L  L  L#tttttt  %] %9 j +UWhijWkWkmqmm  AI  nJ  nJ  LW  Yi  j  j  j#tttttt-/@/C/CTEWEWX`EaEacn  qA  B  B  B$uuuuuus9%t ts<   AICI%I-I6I<I?I3IIc                 J   g |g|g|g|g|g|g|gg g g g d}| j         r|g|g|g|g|g|g|gg|g|ggd	}|                    |          }|d         }| j         s,|rg |d<   n$|g|d<   |g|d<   |g|d<   |g|d<   |g|d	<   |g|d
<   || _        |                     ||d           d S )N)rL  rc  rd  fetchLastPricesrj  rg  r^  r`  r_  fetchBidsAsksfetchStatus	fetchTime)	rk  rl  re  rf  watchBidsAsksra  rb  rh  ri  spotrL  fetchFundingRatesfetchFundingRatefetchFundingRateHistoryfetchIndexOHLCVfetchMarkOHLCVfetchPremiumIndexOHLCVT)r   rA  rX   	run_tests)r   r   r   r   rA  is_spots         r    run_public_testsztestMainClass.run_public_tests@  s7   !"8#H &x!("8%h!'!
 
 = 	%h)/ &x!'"(#)(.4XJ &x+1(
 
E ((.} 		; ;+-'((.4X)*-3H()4:8/0,28'(+1(&'39(./!x-----r   c           	         t          |                                          }g }t          dt          |                    D ]=}||         }||         }|                    |                     ||||                     >|}	g }
t          dt          |                    D ])}||         }|	|         }|s|
                    |           *|rdnd}t          |
          r=d                    |
          }t          d|                     |          |d|z              | j	        rAt          | 
                    d|z   dz   |                     |          z   d	                     d S d S )
Nr   PUBLIC_TESTSPRIVATE_TESTSz, r  zFailed methods : z[INFO] END re   rM  )r   r   r   r   r   r  r7   r6   rF  r   r7  )r   r   r   is_public_test
test_namespromisesr   	test_name	test_argsresultsfailed_methodstest_returned_valuetest_prefix_stringerrors_strings                 r    r  ztestMainClass.run_testsj  s   %**,,''
q#j//** 	\ 	\A"1Ii(IOODNN9h	>ZZ[[[[ q#j//** 	1 	1A"1I")!*& 1%%i000/=R^^?~ 	z IIn55M!4#5#5h#?#?ASUhkxUxyyy9 	p!!-2D"Ds"JTM_M_`hMiMi"ikmnnooooo	p 	pr   c                     |                      d|g d          }|sdS t          |j                  }t          d|d           dS )Nr  TFz[INFO:MAIN] Exchange loadedsymbols)r  r   r  r6   )r   r   rE  exchange_symbols_lengths       r    load_exchangeztestMainClass.load_exchange  sP    xTBB 	5"%h&6"7"7*,CYOOOtr   c                 T   d }|                     | j        d          }|                     | j        d          }|r|r|S |s|r|S t          dt          |                    D ]E}||         }|                    |j        |          }	|	|                    |	d          }
|
s|
|} nF|S )NpreferredSpotSymbolpreferredSwapSymbolr   active)r  rT   r   r   r  markets)r   r   r  r  r   preferred_spot_symbolpreferred_swap_symbolr   srA  r  s              r    get_test_symbolztestMainClass.get_test_symbol  s     ( 4 4T5WYn o o ( 4 4T5WYn o o 	), 	)(( 	)2 	)((q#g,,'' 	 	A
A(()91==F!!,,VX>> fnFEr   c                     |g d}|d         }t          dt          |                    D ]}||         |j        v r
||         c S |S )N)	BTCETHXRPLTCBCHEOSBNBBSVUSDTr   )r   r   
currencies)r   r   codesr   r   s        r    get_exchange_codeztestMainClass.get_exchange_code  sc    =TTTEQxq#e**%% 	  	 AQx8...Qx /r   Tc                    i }|j         }t          |                                          }t          dt	          |                    D ]=}||         }||         }|r|d         r|||d         <   (|s|d         s|||d         <   >|S )Nr   r  r   )r  r   r   r   r   )	r   r   r  r   r  r   r   r.  rA  s	            r    get_markets_from_exchangez'testMainClass.get_markets_from_exchange  s    "GLLNN##q#d))$$ 	/ 	/Aq'CS\F /v /(.F8$%% /&. /(.F8$%
r   c                 B   |                      ||          }g d}g d}g d}|r|n|}|                     |||          }|t          dt          |                    D ]}	||	         }
|                    |d|
          }|                    |d          }t          |                                          }t          |          }|r|                     |||          } n|q|                    |dd          }g }t          dt          |                    D ]#}	|                    ||	         d                    $|                     |||          }|Ht          |	                                          }t          |          }|dk    r|d         }||d         }|S )	N)r  r  r  r  r  DASHDOGEETCTRXr  USDCUSDEURTUSDCNYJPYBRL)BTC/USDTBTC/USDCzBTC/USDzBTC/CNYzBTC/EURzBTC/AUDzBTC/BRLzBTC/JPYzETH/USDTzETH/USDCzETH/USDzETH/CNYzETH/EURzETH/AUDzETH/BRLzETH/JPYzEUR/USDTzEUR/USDzEUR/USDCzUSDT/EURzUSD/EURzUSDC/EURzBTC/ETHzETH/BTC)BTC/USDT:USDTBTC/USDC:USDCzBTC/USD:USDzETH/USDT:USDTzETH/USDC:USDCzETH/USD:USDBTC/USD:BTCzETH/USD:ETHr   baser   r  T)
r  r  r   r   	filter_byindex_byr   r   r   values)r   r   r  current_type_marketsr  spot_symbolsswap_symbolstarget_symbolsr   r   current_codemarkets_array_for_current_codeindexed_mktssymbols_array_for_current_codesymbols_lengthactive_marketsactive_symbolsr  values_lengthfirsts                       r    get_valid_symbolztestMainClass.get_valid_symbol  s   #==hMM M  M  M h  h  h X  X  X)-?<%%hnEE>1c%jj))  $Qx191C1CDXZ`bn1o1o.'001OQYZZ15l6G6G6I6I1J1J.!$%C!D!D! !11(DB`aaFE >%//0DhPTUUNN1c.1122 C C%%nQ&7&ABBBB))(D.IIF>.557788FKKMq  q	$"8_Fr   c                 2   d }d }|#|                     |          }|d         r|}nI|}nF|j        d         r|                     |d          }|j        d         r|                     |d          }|t          d|           |t          d|           | j        s|j        d         r8|6| j        rt          d           d|j        d<   |                     ||           |j        d         r8|6| j        rt          d	           d|j        d<   |                     ||           | j        s| j        r`|j        d         r"| d|j        d<   | 	                    ||           |j        d         r&|&d|j        d<   | 	                    ||           d S d S d S d S )
Nr  TswapFz![INFO:MAIN] Selected SPOT SYMBOL:z![INFO:MAIN] Selected SWAP SYMBOL:z[INFO] ### SPOT TESTS ###r9  z[INFO] ### SWAP TESTS ###)
rA  r  r  r6   r   r   r@  r  r   run_private_tests)r   r   provided_symbolspot_symbolswap_symbolrA  s         r    test_exchangeztestMainClass.test_exchange  s   &___55Ff~ .--|F# D"33HdCC|F# E"33HeDD"4kBBB"4kBBB% 	=|F# =(?9 6455528 /%%h<<<|F# =(?9 6455528 /%%h<<< 	> 6 	>|F# >(?28 /&&x===|F# >(?28 /&&x=====	> 	>> >(?(?r   c                 >   |                     d          st          dd           d S |                     |          }i dg dg dg dg dg d	g d
|gd|gd|gd|gd|ggd|gd|gd|gd|gd||gd|g|g|g|g|g|g|g|g|g|g|gd
}| j        r|g|g|g|g|gd}|                    |          }|d         }| j        s8|rg |d<   n0|g|d<   |g|d<   |g|d<   |g|d<   |g|d<   |g|d<   |g|d<   |g|d <   |                     ||d           d S )!NFz[INFO] Skipping private testszKeys not foundsignInfetchBalancefetchAccountsfetchTransactionFeesfetchTradingFeesr  fetchOrdersfetchOpenOrdersfetchClosedOrdersfetchMyTradesfetchLeverageTiersrm  fetchTransactionsrp  rq  fetchBorrowInterestcancelAllOrders)
fetchCanceledOrdersfetchMarginModesfetchPositionfetchDepositcreateDepositAddressfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchBorrowRateHistoryrn  )watchBalancewatchMyTradeswatchOrderswatchPositionwatchPositionsr  rL  fetchPositionsr  fetchPositionRisksetPositionModesetMarginModefetchOpenInterestHistoryr  fetchFundingHistory)check_required_credentialsr6   r  r   rA  r  )r   r   r   r   r   rA  r  s          r    r  ztestMainClass.run_private_tests  s_   22599 	02BCCCF%%h//
b
B
 R
 #B	

 
 2
 F8
 x
  &
 fX
 !F8*
 D6
  $
 dV
 
  "D&>!
" x#
$ %+8!'$X!F%)F$(6&*V/3f'+f!%7
 
 
: = 	!%"( &x"(#)( E ((.} 	8 8+-'(( ,2(&'*0o&.4X)*,28'(*0o&5;H014:8/006x+,x.....r   c                    | j         }| j        dk    r	| j        rd S d}d }t          d|          D ]5}	 |                     ||g d            n# t
          $ r}|}Y d }~.d }~ww xY w|rd|z   dz   t          |          z   }d S d S )Nr=   r  r   Tz[TEST_FAILURE] Failed z : )rc   r^   rP   r   r[  r  r   )r   r   proxy_test_namer  	exceptionr  r  error_messages           r    test_proxiesztestMainClass.test_proxies<  s    38t 3F	q+&& 	 	A  (BEEE   						  	n4FNQbclQmQmmMMM	n 	ns   A
A#AA#c                 R   |j         rd S | j        st          |d          r|                    d           	 |                     |          }|st          |           d S |                     ||           t          |           d S # t          $ r}t          |           |d }~ww xY w)Nr   T)r   r   r   set_sandbox_moder  r   r  r  )r   r   r   rE  r  s        r    r   ztestMainClass.start_testO  s    > 	F< 	,,XyAA 	,%%d+++	''11F h
 x000(OOOOO 	 	 	(OOOG	s   &B %B 
B&B!!B&c                     t          |          }t          |          }|dz   |z   dz   |z   }|d|z   dz   dz   |z   dz   |z   }|s
J |            d S )Nz
 computed z	 stored: r  zcomputed value: z stored value: )ry   )	r   condr   calculated_outputstored_outputr.  calculated_stringstored_stringr"  s	            r    assert_static_errorz!testMainClass.assert_static_errord  s}     ++<==&}55,.>LO``?!CK%/2DD}TWhhk||M""]""t""r   c                 D    | j         dz   |z   dz   }t          |          }|S )Nz./ts/src/test/static/markets/.jsonr[   r   r   r
  filenamer   s       r    load_markets_from_filez$testMainClass.load_markets_from_fileo  s-    
 =#BBRG'Qx((r   c                 D    | j         dz   |z   dz   }t          |          }|S )Nz ./ts/src/test/static/currencies/r.  r/  r0  s       r    load_currencies_from_filez'testMainClass.load_currencies_from_filex  s+    =#EEJWTx((r   c                 T   i }|r?||z   dz   }t          |          st          d|z              d S t          |          ||<   |S t          |          }t	          dt          |                    D ]7}||         }|                    dd          }t          ||z             }	|	||<   8|S )Nr.  z[WARN] tests not found: r   r@   )r   r6   r   r   r   r   rD   )
r   foldertarget_exchangerE  r   filesr   fileexchange_namer   s
             r    load_static_dataztestMainClass.load_static_data}  s     	O+g5D!$'' /$6777t&24&8&8F?#MF##q#e**%% 	, 	,A8D LL"55M"6D=11G$+F=!!r   c                 ,   |d S |                     d          }d}t          dt          |                    D ]Z}|dk    rR||         }|                    d          dk    r'|                     d          }|dz  }||d         z  } n|dz  }||z  }[|S )Nr   r@   r      r0   )r   r   r   find)r   r   	url_partsr   r   currentcurrent_partss          r    remove_hostnamefrom_urlz%testMainClass.remove_hostnamefrom_url  s    ;4IIcNN	q#i..)) 
	 
	A1uu#A,<<$$r))$+MM#$6$6M3JC=++CEs
w
r   c                 z   i }|                     d          }t          dt          |                    D ]}||         }|                     d          }t          |          }|dk    r5|d         }|d         }	|	9|	                    d          s|	                    d          rt	          |	          }	|	||<   |S )N&r   =r=  r5   r   {)r   r   r   
startswithru   )
r   r   rE  partsr   part	key_valuekeys_lengthr.  r9   s
             r    urlencoded_to_dictz testMainClass.urlencoded_to_dict  s    		#q#e**%% 	  	 A8D

3Ii..KaA,CaLE!)9)9#)>)>!EDTDTUXDYDY!"5))F3KKr   c           	      &	   t          |          rt          |          rdS |s|sdS t          |t                    r.t          |t                    rt          |                                          }t          |                                          }t          |          }	t          |          }
|                     |	|
k    d||           t          dt          |                    D ]|}||         }|                    ||          r!|                    ||          s|                     dd|z   ||           ||         }||         }| 	                    ||||||           }n&t          |t                    rt          |t                    rt          |          }t          |          }|                     ||k    d||           t          dt          |                    D ]+}||         }||         }| 	                    |||||           ,nw|sd n|}|sd n|}|rt          |          nd}|rt          |          nd}d|z   dz   |z   }|r*| j        d	k    r|                     ||k    ||||           nt          |t                    pt          |t                    }t          |t                    pt          |t                    }|d u p|d u }|s|s|r| j        d	k    rd}	 |                    |           d}n# t          $ r}d}Y d }~nd }~ww xY w|rE|                     |                    |          |                    |          k    ||||           dS |                     t          |          t          |          k    ||||           dS |                     t          |          t          |          k    ||||           dS | j        d	k    rb|                    |          }|                    |          }|                     t          |          t          |          k    ||||           nG|                    |          }|                    |          } |                     || k    ||||           dS )
NTzoutput length mismatchr   Fzoutput key missing: 	undefinedzoutput value mismatch:z != C#)r   r  r  r   r   r   r,  r   rQ  assert_new_and_stored_outputrh   rO   boolparse_to_numericr  ro   number_to_string)!r   r   	skip_keys
new_outputr)  strict_type_checkasserting_keystored_output_keysnew_output_keysstored_keys_lengthnew_keys_lengthr   r.  stored_value	new_valuestored_array_lengthnew_array_lengthstored_itemnew_itemsanitized_new_outputsanitized_stored_outputnew_output_stringstored_output_stringmessage_error
is_boolean	is_stringis_undefined	is_numberr  stringified_new_outputstringified_stored_outputnumeric_new_outputnumeric_stored_outputs!                                    r    rQ  z*testMainClass.assert_new_and_stored_output  s   $$ 	})E)E 	4 	- 	4}d++ B	W*Z2N2N B	W!%m&8&8&:&:!;!;":??#4#455O!$%7!8!8!/22O$$%7?%JLdfsu  A  A  A1c"45566 x x(+$$S)44  ))#?? m,,U4JS4PR_aklll,S1&sO	11(IyR^`qsvwwwwx t,, 2	W*Z2N2N 2	W"%m"4"4":$$%8<L%LNfhu  xB  C  C  C1c-0011 q q+A.%a=11(IxQ\^oppppq 1;#K44 3@&Tdd}#=Q b$8 9 9 9WbCZ#k3'>#?#?#?`k 47HH6QThhM  #Wdi4&7&7 (()=AX)XZgiv  yC  ER  S  S  S  S()=tDDt*UlnrJsJs
'(<cBBq
SjloHpHp	 4 <bBY]aBa W Wl WyD(($)	.$556JKKK(,II( . . .(-IIIIII. % ( 44X5N5NOc5d5dhp  iB  iB  CZ  i[  i[  6[  ]j  ly  {E  GT  U  U  U#'4 44]CT5U5UYfg{Y|Y|5|  L  N[  ]g  iv  w  w  w#'400?P1Q1QUbcwUxUx1x  {H  JW  Yc  er  s  s  s#tyD((191J1JK_1`1`.4<4M4MNe4f4f1005K1L1LPSTmPnPn1np}  @M  OY  [h  i  i  i  i-5-F-FGX-Y-Y*080I0IJ^0_0_-001CG\1\^kmz  }G  IV  W  W  Wts   3L 
L!LL!c                     ||k    rF|                      |          }|                      |          }	|                     ||	k    d||	           |||||                    d          }
|                    d          }|                    |
d          }|                    |d          }||d S |                     |          }|                     |          }|                     ||||           d S |dk    rM|K|It          |t                    rt          |          }t          |t                    rt          |          }n|dk    r/|-|+|                     |          }|                     |          }ny|dk    rs|	                    d          s|	                    d          rt          |          }t          |          }n*|                     |          }|                     |          }|                     ||||           d S )	Nzurl mismatchr0   r5   rq   
urlencodedbothrG  r   )
rC  r,  r   r  rM  rQ  r  rh   ru   rH  )r   r   r/   rU  
stored_urlrequest_urlr)  rV  
first_pathsecond_pathstored_url_partsnew_url_partsstored_url_querynew_url_querystored_url_paramsnew_url_paramss                   r    assert_static_request_outputz*testMainClass.assert_static_request_output  s@   $$55jAAJ66{CCK$$Z;%>PZ\ghhh !
(:&[-D#-#3#3C#8#8  + 1 1# 6 6#+#6#67G#K#K  ( 3 3M1 E E$,=3H F$($;$;<L$M$M!!%!8!8!G!G11(I~Whiii6>>}8z?U--- : *= 9 9*c** 4'
33
\!!}'@zG] 33MBBM00<<JJV^^'',, A0H0H0M0M A *= 9 9'
33

 $ 7 7 F F!44Z@@
))(Iz=YYYYYr   c                 8    |                      ||||d           d S )NF)rQ  )r   r   rU  computed_resultstored_results        r    assert_static_response_outputz+testMainClass.assert_static_response_output#  s&    ))(IP]_deeeeer   c                     |d S g }t          dt          |                    D ]D}||         }t          |          r|                    d            /|                    |           E|S )Nr   )r   r   r   r   )r   input	new_inputr   rA  s        r    sanitize_data_inputz!testMainClass.sanitize_data_input&  s}    =4	q#e**%% 	* 	*AAhGW%% *  &&&&  ))))r   c           	      R   d }d }	 t          |||                     |d                              n<# t          $ r/}t          |t                    s||j        }|j        }Y d }~nd }~ww xY w	 |                    |d          }	|                     ||||d         ||	|           d S # t          $ ru}d| _	        d| j
        z   dz   dz   |                     |          z   dz   dz   |z   dz   dz   |d         z   dz   t          |          z   }
t          d	|
z              Y d }~d S d }~ww xY w)
Nr  outputr   Tr   z][STATIC_REQUEST_TEST_FAILURE]]descriptionr  )r   r  r  r  r   last_request_bodylast_request_urlr  r}  rQ   rO   rF  rh   r6   )r   r   r   r   r/   rU  r  rt  r  call_outputr"  s              r    test_method_staticallyz$testMainClass.test_method_statically3  s   	4,Xvt?W?WX\]dXe?f?fgggg 	4 	4 	4q*-- /F"3KKKKKK		4
	3"--dH==K--hieVacnpvwwwww 	3 	3 	3(,D%$)O.NNQTTW[WiWijrWsWssvyy|  CI  I  LO  O  RU  U  X\  ]j  Xk  k  nq  q  tw  xy  tz  tz  zM!M1222222222	3s-   *1 
A*%A%%A*.7B' '
D&1A*D!!D&c                    |                     |d          }t          ||d                   }	 t          |||                     |d                             }|                     ||||           n# t
          $ rt}d| _        d| j        z   dz   dz   |                     |          z   dz   dz   |z   dz   dz   |d         z   dz   t          |          z   }	t          d	|	z              Y d }~nd }~ww xY wt          |d            d S )
NparsedResponsehttpResponser  Tr   z][STATIC_RESPONSE_TEST_FAILURE]r  r  r  )r  r   r   r  r  r  rQ   rO   rF  rh   r6   )
r   r   r   rU  r   expected_resultmocked_exchangeunified_resultr  r"  s
             r    test_response_staticallyz&testMainClass.test_response_staticallyE  s   "--d4DEE,XtN7KLL	3=hPTPhPhimnuivPwPwxxN..	>[jkkkk 	3 	3 	3(,D%$)O.OORUUX\XjXjksXtXttwzz  ~A  A  DJ  J  MP  P  SV  V  Y]  ^k  Yl  l  or  r  ux  yz  u{  u{  {M!M122222222	3 	8T*****s   AA1 1
C/;A*C**C/c                     |                      |          }|                     |          }t          |||dddddddddd	d
ddddddgddd
di dd          }||_        |S )NFr5   zhttp://fake:8080r.  secretsecretpasswordwalletB0xff3bdd43534543d421f05aec535965b5050ad6ac15345435345435453495e771uidtoken	myAccountr  )r
  r   r  Tl   I5 )enableUnifiedAccountenableUnifiedMarginaccessTokenexpiresleverageBrackets)r  r  r   	rateLimitr  r  apiKeysecretr  walletAddress
privateKeyr  r  accountsr@  )r2  r4  r   r  )r   r:  r  r  r   s        r    init_offline_exchangez#testMainClass.init_offline_exchangeQ  s    --m<<33MBB
 $$+,$"%^
    )-',&*$& +1
 1
  : )r   c           	         |                      |          }|                    |di           }|                    |           |                    |di           }t	          |                                          }t          dt          |                    D ]*}||         }	||	         }
t          dt          |
                    D ]}|
|         }|j        }|                    |di           }|                    |	                    ||                     |                    |d          }|||k    rp|
                    |dd          }|r|                    |d          }|                    |dg           }|                     ||	|||           |                    |	                    |i                      ,t          |           d	S )
Nr@  methodsr   r  disabledF
outputTypeskipKeysT)r  r~  extend_exchange_optionsr  r   r   r   r   r@  r  	safe_boolr  r  r   )r   r:  exchange_datar  r   global_optionsr  methods_namesr   r   r  r  rE  old_exchange_optionstest_exchange_optionsr  is_disabledr/   rU  s                      r     test_exchange_request_staticallyz.testMainClass.test_exchange_request_staticallyt  s   --m<<!++M9bII((888%%mYCCW\\^^,,q#m,,-- 	a 	aA"1%FfoG1c'll++ a a '/'7$(0(;(;FIr(R(R%001E1EFZ\q1r1rsss&11&-HH)	[0H0H&00UKK ++M<HH$//z2NN	++HffdIVVV 001E1EFZ\^1_1_````#a$ 	htr   c                    |                      |          }|                    |di           }|                    |di           }|                    |           t          |                                          }t          dt          |                    D ]_}||         }	||	         }
t          dt          |
                    D ]-}|
|         }|                    |d          }|j        }|                    |di           }|                    |                    ||                     |	                    |dd          }|r|	                    |dd          }|r| j
        dk    r|	                    |d	d          }|r| j
        d
k    r|||k    r|                    |dg           }|                     ||	||           |                    |                    |i                      /at          |           dS )Nr  r@  r   r  r  F
disabledCSrP  disabledPHPPHPr  T)r  r  r  r   r   r   r   r@  r  r  rO   r  r   )r   r:  r  r  r   r  r@  r  r   r   r  r  rE  r  r  r  r  is_disabled_c_sharpis_disabled_phprU  s                       r    !test_exchange_response_staticallyz/testMainClass.test_exchange_response_statically  s.   --m<<%%mYCC%%mYCC((111W\\^^,,q#m,,-- 	a 	aA"1%FfoG1c'll++ a a &11&-HH'/'7$(0(;(;FIr(R(R%001E1EFZ\q1r1rsss&00UKK &.&8&8u&U&U#& DI,=,="*"4"4V]E"R"R" 	U(:(:)	[0H0H$//z2NN	--h	6RRR 001E1EFZ\^1_1_````-a. 	htr   c                    |dS d}|d         }t          |                                          }t          dt          |                    D ]7}||         }||         }	t          |	          }
|                    ||
          }8|S )Nr5   r   r  )r   r   r   r   sum)r   r   r  r  r  r  r  r   r   r  results_lengths              r    !get_number_of_tests_from_exchangez/testMainClass.get_number_of_tests_from_exchange  s     1	*W\\^^,,q#m,,-- 	4 	4A"1%FfoG \\N,,sN33CC
r   c                 4    |                      d||           d S )Nrequestrun_static_tests)r   r7  r  s      r    r   z&testMainClass.run_static_request_tests  s     i)DDDDDr   c                 6   | j         dz   |z   dz   }|                     ||          }|d S t          |                                          }t	          di           }g }d}	|rt          d|z              |rt          d|z              t          dt          |                    D ]}
||
         }||         }|                     |||          }|	                    |	|          }	|dk    r+|
                    |                     |||                     p|
                    |                     |||                     | | j        s| j        rt          d           d S d	| j        z   d
z   t#          |	          z   dz   |z   dz   }t          d|z              d S )Nz./ts/src/test/static/r   Exchanger   z[INFO:MAIN] Exchange to test: z[INFO:MAIN] Testing only: r  r5   r   z][TEST_SUCCESS] z static z tests passed.r  )r[   r;  r   r   r   r6   r   r   r  r  r   r  r  rQ   rR   r   rO   rh   )r   r/   r7  r  r6  static_data	exchangesr   r  r  r   r:  r  number_of_testssuccess_messages                  r    r  ztestMainClass.run_static_tests  s   !884?#E++FODDF))++,,	 R00 	E1OCDDD 	;-	9:::q#i..)) 	q 	qA%aLM'6M"DDX}^ghhO,,sO44Cy   E EmUbdm n noooo F F}Vcen o opppp	$ 	-(B 	-NNNNN!DIo0BBSXXMPZZ]aadttOO+,,,,,r   c                 4    |                      d||           d S )Nresponser  )r   r:  tests      r    r   z'testMainClass.run_static_response_tests  s"     	j->>>>>r   c                    |                                  |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 | 	                                | 
                                |                                 |                                 |                                 |                                 |                                 |                                 |                                 g}| d| j        z   dz   }t'          d|z              t)          d           d S )Nr   z&][TEST_SUCCESS] brokerId tests passed.r  r   )test_binancetest_okxtest_cryptocom
test_bybittest_kucointest_kucoinfuturestest_bitget	test_mexctest_htxtest_wootest_bitmarttest_coinex
test_bingxtest_phemextest_blofintest_hyperliquidtest_coinbaseinternationaltest_coinbase_advancedrO   r6   r   )r   r  r  s      r    r   z!testMainClass.run_broker_id_tests  sL    %%''$:M:M:O:OQUQ`Q`QbQbdhdtdtdvdvx|  yP  yP  yR  yR  TX  Td  Td  Tf  Tf  hl  hv  hv  hx  hx  z~  zG  zG  zI  zI  KO  KX  KX  KZ  KZ  \`  \m  \m  \o  \o  qu  qA  qA  qC  qC  EI  ET  ET  EV  EV  X\  Xh  Xh  Xj  Xj  lp  l|  l|  l~  l~  @D  @U  @U  @W  @W  Y]  Yx  Yx  Yz  Yz  |@  |W  |W  |Y  |Y  Z		/,TTX'(((Ar   c                    |                      d          }d}d }	 |                    ddddd           n1# t          $ r$}|                     |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               d}d }	 |                    ddddd           n1# t          $ r$}|                     |j                  }Y d }~nd }~ww xY wd }		 |                    ddddd           n1# t          $ r$}|                     |j                  }	Y d }~nd }~ww xY w|d         }
t          |          }|
                    |          sJ d|
z   dz   |z               |	d         }|                    |          sJ d|z   dz   |z               t          |           dS )Nbinancez
x-R4BD3S82r  r   buyr5    N  newClientOrderIdzbinance - spot clientOrderId: z does not start with spotIdz
x-xcKtGhcur  r  zbinance - swap clientOrderId: z does not start with swapIdz%binance - swap clientOrderIdInverse: T)r  create_orderr  rM  r  rh   rH  r   )r   r   spot_idspot_order_requestr  client_order_idspot_id_stringswap_idswap_order_requestswap_inverse_order_requestclient_order_id_swapswap_id_stringclient_order_id_inverses                r    r  ztestMainClass.test_binance  s   --i88!	U!!*guaGGGG 	U 	U 	U!%!8!89S!T!T	U,-?@W)).99  	_  	_;[^m;m  qN  <N  Q_  <_  	_  	_9!	U!!/7E1eLLLL 	U 	U 	U!%!8!89S!T!T	U%)"	]!!-%EJJJJ 	] 	] 	])-)@)@A[)\)\&&&&&&	]12DEW#..~>>  	i  	i@`cw@w  {X  AX  [i  Ai  	i  	i>"<=O"P&11.AA  	v  	vCj  nE  DE  He  De  hv  Dv  	v  	vAhtsD   5 
A#AA#*C 
C2C--C28D 
E D;;E c                    |                      d          }d}d }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         d	         }t          |          }|                    |          sJ d
|z   dz   |z               |d         d         }||k    sJ d|z   dz   |z               d }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         d	         }	|	                    |          sJ d|	z   dz   |z               |d         d         }
|
|k    sJ d|z   dz   |
z               t          |           dS )Nokxe847386590ce4dBCr  r   r  r5   r  r   clOrdIdzokx - spot clientOrderId:  does not start with id: tagz
okx - id: z different from spot tag: r  zokx - swap clientOrderId: z different from swap tag: Tr  r  r  ru   r  rh   rH  r   )r   r   r
  r  r  r  	id_stringspot_tagr  r  swap_tags              r    r  ztestMainClass.test_okx  s4   --e44!	H!!*guaGGGG 	H 	H 	H!+H,F!G!G	H,Q/	:GG	)))44  	O  	O6RUd6d  hC  7C  FO  7O  	O  	O4%a(/2~~~|b03OORZZ~~~!	H!!/7E1eLLLL 	H 	H 	H!+H,F!G!G	H1!4Y?#..y99  	Y  	Y;WZn;n  rM  <M  PY  <Y  	Y  	Y9%a(/2~~~|b03OORZZ~~~hts,   5 
AAAC) )
D3DDc                 X   |                      d          }d}|                                 d }	 |                    ddddd           n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d         d	         }||k    sJ d
|z   dz   |z               t          |           dS )N	cryptocomCCXTr  r   r  r5   r  params	broker_idzcryptocom - id: z different from  broker_id: T)r  rR  r  r  ru   r  r   r   r   r
  r  r  r   s         r    r  ztestMainClass.test_cryptocom,  s    --k::	=!!*guaGGGG 	= 	= 	= !;<<GGGGGG	=H%k2	B 2R 7:X X[d dhts   A	 	
A1A,,A1c                 6   |                      d          }d }d}|j        d         |k    s
J d            	 |                    ddddd	           n# t          $ r}|j        }Y d }~nd }~ww xY w|d
         |k    sJ d|z   dz               t          |           dS )Nbybitr  brokerIdid not in optionsr  r   r  r5   r  Refererzbybit - id:  not in headers.Tr  r@  r  r  last_request_headersr   r   r   req_headersr
  r  s        r    r  ztestMainClass.test_bybit:  s    --g66
+r1113F111	8!!*guaGGGG 	8 	8 	8"7KKKKKK	8 9%+++^b-@CU-U+++hts   A 
A+A&&A+c                    |                      d          }d }|j        d         d         d         }|j        d         d         d         }|dk    sJ d|z   dz               |d	k    sJ d
|z   dz               	 |                    ddddd           n# t          $ r}|j        }Y d }~nd }~ww xY wd}|d         |k    sJ d|z   dz               t          |           dS )Nkucoinpartnerr  r
  r.  r   zkucoin - id:  not in optionsz$9e58cc35-5b5e-4133-92ec-166e3f077cb8zkucoin - key:  not in options.r  r   r  r5   r  KC-API-PARTNERr  Tr  )r   r   r  r  spot_keyr  r
  s          r    r  ztestMainClass.test_kucoinH  s)   --h77"9-f5d;#I.v6u=&   /G";>O"O   AAAACSV^C^asCsAAA	8!!*guaGGGG 	8 	8 	8"7KKKKKK	8 +,222Ob4HK]4]222hts   7B 
B,B''B,c                    |                      d          }d }d}|j        d         d         d         }|j        d         d         d         }||k    sJ d|z   dz               |d	k    sJ d
|z   dz               	 |                    ddddd           n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t          |           dS )Nkucoinfuturesccxtfuturesr  futurer
  r.  zkucoinfutures - id: r  z$1b327198-f30c-4f14-a0ac-918871282f15zkucoinfutures - key: r  r   r  r5   r  r  r  Tr  )r   r   r  r
  	future_id
future_keyr  s          r    r  z testMainClass.test_kucoinfuturesY  s#   --o>>$Y/9$?	%i0:5A
B 6 BEW WCCCCE\_iEil~E~CCC	8!!/7E1eLLLL 	8 	8 	8"7KKKKKK	8+,2224JR4ORd4d222hts   9B 
B.B))B.c                 B   |                      d          }d }d}|j        d         |k    sJ d|z   dz               	 |                    dddd	d
           n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t          |           dS )Nbitgetp4svebrokerzbitget - id: r  r  r   r  r5   r  zX-CHANNEL-API-CODEr  Tr  r
  s        r    r  ztestMainClass.test_bitgeti  s    --h77)R///21EHY1Y///	8!!*guaGGGG 	8 	8 	8"7KKKKKK	8/0B666"8LOa8a666ht   A 
A1 A,,A1c                 j   |                      d          }d }d}|j        d         |k    sJ d|z   dz               |                                 	 |                    dddd	d
           n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t          |           dS )Nmexcr  r  zmexc - id: r  r  r   r  r5   r  sourcer  Tr  r@  rR  r  r  r	  r   r
  s        r    r  ztestMainClass.test_mexcv  s    --f55)R///1CFW1W///	8!!*guaGGGG 	8 	8 	8"7KKKKKK	88$***MB,>AS,S***ht   A* *
B4B  Bc                 @   |                      d          }d}d }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               d }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY wd }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }	|	                    |          sJ d|	z   d
z   |z               |d         }
|
                    |          sJ d|
z   d
z   |z               t          |           dS )Nhtx
AA03022abcr  r   r  r5   r  zclient-order-idzhtx - spot clientOrderId r  r  r  channel_codezhtx - swap channel_code z htx - swap inverse channel_code Tr  )r   r   r
  r  r  r  r  r  r  r  r  s              r    r  ztestMainClass.test_htx  s   --e44!	H!!*guaGGGG 	H 	H 	H!+H,F!G!G	H,->?GG	)))44  	N  	N6QTc6c  gB  7B  EN  7N  	N  	N4!	H!!/7E1eLLLL 	H 	H 	H!+H,F!G!G	H%)"	P!!-%EJJJJ 	P 	P 	P)3H4N)O)O&&&&&&	P1.A#..y99  	W  	W;UXl;l  pK  <K  NW  <W  	W  	W9"<^"L&11)<<  	e  	e>`cz>z  ~Y  ?Y  \e  ?e  	e  	e<htsD   5 
AAA"B< <
C$CC$*D 
D,D''D,c           	      b   |                      d          }d}d }	 |                    ddddd           n1# t          $ r$}|                     |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               d }	 |                    dddddddi           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }|                    |          sJ d|z   d
z   |z               t          |           dS )Nwooz$bc830de7-50f3-460b-9ee0-f430f83f9dadr  r   r  r5   r  r   zwoo - broker_id: r  r  	stopPricer   r  zwoo - brokerId: T)	r  r  r  rM  r  rh   rH  ru   r   )	r   r   r
  r  r  r   r  stop_order_requestclient_order_id_stops	            r    r  ztestMainClass.test_woo  s   --e443!	U!!*guaGGGG 	U 	U 	U!%!8!89S!T!T	U&{3	GG	##I..yy0Ci0ORm0mpy0yyy.!	H!!/7E1eUN      	H 	H 	H!+H,F!G!G	H1*=#..y99  	O  	O;MPd;d  hC  <C  FO  <O  	O  	O9hts,   5 
A#AA#(C 
C-C((C-c                 j   |                      d          }d }d}|j        d         |k    sJ d|z   dz               |                                 	 |                    dddd	d
           n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t          |           dS )NbitmartCCXTxBitmart000r  zbitmart - id: r  r  r   r  r5   r  zX-BM-BROKER-IDz not in headersTr!  r
  s        r    r  ztestMainClass.test_bitmart  s    --i88
+r1113Cb3HK\3\111	8!!*guaGGGG 	8 	8 	8"7KKKKKK	8+,2224Dr4IL]4]222htr"  c                    |                      d          }d}|j        d         |k    sJ d|z   dz               d }	 |                    dddd	d
           n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d|z   dz   |z               t          |           dS )Ncoinexzx-167673045r  zcoinex - id: r  r  r   r  r5   r  	client_idzcoinex - clientOrderId: r  T)	r  r@  r  r  ru   r  rh   rH  r   )r   r   r
  r  r  r  r  s          r    r  ztestMainClass.test_coinex  s(   --h77
+r111?R3GJ[3[111!	H!!*guaGGGG 	H 	H 	H!+H,F!G!G	H,[9GG	)))44  	M  	M6PSb6b  fA  7A  DM  7M  	M  	M4hts   A 
A> A99A>c                 B   |                      d          }d }d}|j        d         |k    sJ d|z   dz               	 |                    dddd	d
           n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t          |           d S )Nbingxr  r  zbingx - id: r  r  r   r  r5   r  zX-SOURCE-KEYr  r  r
  s        r    r  ztestMainClass.test_bingx  s    --g66)R///"1DGX1X///	8!!*guaGGGG 	8 	8 	8"7KKKKKK	8 >*b000.22EHZ2Z000hr  c                 `   |                      d          }d}d }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               t          |           d S )Nphemex
CCXT123456r  r   r  r5   r  clOrdIDzphemex - clOrdID: r  r  )r   r   r
  r  r  r  r  s          r    r  ztestMainClass.test_phemex  s    --h77	=!!*guaGGGG 	= 	= 	= !;<<GGGGGG	=!),GG	)))44  	G  	G6J_6\_z6z  ~G  7G  	G  	G4h   5 
AAAc                 ^   |                      d          }d}d }	 |                    dddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d|z   d	z   |z               t          |           d S )
Nblofinec6dd3a7dd982d0bzLTC/USDT:USDTrA  r  r5   r  zblofin - brokerId: r  r  )r   r   r
  r  r  r   r  s          r    r  ztestMainClass.test_blofin  s    --h77	=!!/8UAFFFF 	= 	= 	= !;<<GGGGGG	=J'	GG	##I..{{0E	0QTo0or{0{{{.hs   4 
AAAc                 J   |                      d          }d}d }	 |                    ddddd           n+# t          $ r}t          |j                  }Y d }~nd }~ww xY wt          |d         d	                   }||k    sJ d
|z   dz   |z               t          |           d S )Nhyperliquid1zSOL/USDC:USDCr   r  r5   d   r#   
brokerCodezhyperliquid - brokerId: r  )r  r  r  ru   r  rh   r   r  s         r    r  ztestMainClass.test_hyperliquid  s    --m<<	=!!/7E1cJJJJ 	= 	= 	= !;<<GGGGGG	=*<8::	B :Y FId dgi ihr8  c                    |                      d          }d|j        d<   d}|j        d         |k    s
J d            d }	 |                    ddd	d
d           n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d         }|                    t          |                    s
J d            t          |           dS )Ncoinbaseinternationalrandom	portfolionfqkvdjpr  r  r  r   r  r5   r  r  $clientOrderId does not start with idT	r  r@  r  r  ru   r  rH  rh   r   r   r   r
  r  r  r  s         r    r  z(testMainClass.test_coinbaseinternational  s    --.EFF(0%
+r1113F111	=!!/7E1eLLLL 	= 	= 	= !;<<GGGGGG	=!"34))#b''22ZZ4ZZZ2hts    A 
B$A==Bc                    |                      d          }d}|j        d         |k    s
J d            d }	 |                    ddddd	           n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d
         }|                    t          |                    s
J d            t          |           dS )Ncoinbaser   r  r  r  r   r  r5   r  r  rF  TrG  rH  s         r    r  z$testMainClass.test_coinbase_advanced  s    --j99
+r1113F111	=!!*guaGGGG 	= 	= 	= !;<<GGGGGG	=!"34))#b''22ZZ4ZZZ2hts   A 
A8A33A8rn   T)TN)NN)?r   r   r   r   r   r   r   r  r   r7  rF  r[  rP  r  r  r  r  r  r  r  r  r  r  r#  r   r,  r2  r4  r;  rC  rM  rQ  r}  r  r  r  r  r  r  r  r  r   r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r    r   r   
  s       2 2 2$ $ $L   D D D
N N N(' (' ('T     $& & &P' ' 'R 57% F F F FP(. (. (.Tp p p0    $             D$> $> $> $>L@/ @/ @/Dn n n&  *	# 	# 	# 	#    
   $  $  "H H H HT%Z %Z %ZNf f f  3 3 3$
+ 
+ 
+! ! !F   @" " " "H   E E E E- - - -:? ? ? ?    <  2      "         <  2          
 
 
      r   r   __main__rK  )r   rn   )F)Oargparserq   r   sysr:   r   r   r   r~   r   dirnameabspath__file__r   rootr   r   ccxt.pror   r   ccxt.base.errorsr   r   r   r   r	   r
   objectr   rB   ArgumentParserparseradd_argumentintrh   
parse_argsr  Errorr;   
excepthookbasenamerP   rZ   r_   environr\   r   r^   rb   rK   	isWsTestsrM   r6   ro   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r    <module>r`     s     				 



 1 1 1 1 1 1 1 1     				
 7??27??84455	wrwx0011           
 * ) ) ) ) ) ' ' ' ' ' ' , , , , , , 1 1 1 1 1 1 * * * * * * 0 0 0 0 0 0	 	 	 	 	6 	 	 	& tvv	 	 	"	"   K;P  Q Q Q   OL?W  X X X   K;N  O O O   K;R  S S S   F<6J  K K K   H\8L  M M M   J|:L  M M M   L<N  O O O   K;O  P P P   %lAU  V V V   $\@T  U U U   ICi  8 8 8   JS/IQT  U U U   H3-B#  N N N   D  ! ! ! 
wt}%%bgoodm4444
)  i  j  j  j 	  
 1
  0 0 : ::
\
!\)
* 
 H H H f%%		 	 	 	 	 	 	 	.0 0 0      - - -
  
          a a a
0 0 0H H H        : : :+ + + +   &        \ \ \ \ \% \ \ \D) z K1T[[TF]__$-00000 r   