
    vKgp^                        S SK r S SKrS SKrS SKrS SKrS SKJrJrJrJ	r	  SSK
Jr  SSKJr  SSKJrJr  SSKJrJrJr  SSKJr  SS	KJr   S
/rS qS\SS4S jr " S S5      r " S S\5      r " S S\5      r " S S5      r  " S S
5      r!g)    N)AnyCallableOptionalUnion   )_logging)ABNF)	WebSocketgetdefaulttimeout)"WebSocketConnectionClosedExceptionWebSocketExceptionWebSocketTimeoutException)SSLEOFError)	parse_urlWebSocketAppreconnectIntervalreturnc                     U q g N)	RECONNECT)r   s    N/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/websocket/_app.pysetReconnectr   +   s    !I    c                   r    \ rS rSrSrS\S\\\S4   SS4S jr	S\\\S4   S	\
SS4S
 jrS\S\
SS4S jrSrg)DispatcherBase0   z
DispatcherBase
appping_timeoutNr   c                     Xl         X l        g r   r   r   )selfr   r   s      r   __init__DispatcherBase.__init__5   s    (r   secondscallbackc                 >    [         R                  " U5        U" 5         g r   )timesleepr!   r$   r%   s      r   timeoutDispatcherBase.timeout9   s    

7
r   reconnectorc           	      
    [         R                  " SU S[        [        R                  " 5       5       S35        [
        R                  " U5        U" SS9  g ! [         a   n[         R                  " SU 35        UeS nAff = f)Nzreconnect() - retrying in z
 seconds [ frames in stack]T)reconnectingzUser exited )r   infoleninspectstackr'   r(   KeyboardInterrupt)r!   r$   r,   es       r   	reconnectDispatcherBase.reconnect=   sp    	MM,WIZGMMO@T?UUfg JJwT*  	MML,-G	s   AA 
B"A==Br    )__name__
__module____qualname____firstlineno____doc__r   r   floatintr"   r   r*   r6   __static_attributes__ r   r   r   r   0   sm    )C )uUC5E/F )4 )uUC%56 ( t 	 	8 	 	r   r   c                   F    \ rS rSrSrS\R
                  S\S\SS4S jrS	rg)

DispatcherI   z
Dispatcher
sockread_callbackcheck_callbackr   Nc                    [         R                  " 5       nUR                  U R                  R                  R                  [         R
                  5         U R                  R                  (       aQ  UR                  U R                  5      (       a  U" 5       (       d  O$U" 5         U R                  R                  (       a  MQ  UR                  5         g ! UR                  5         f = fr   )
	selectorsDefaultSelectorregisterr   rD   
EVENT_READkeep_runningselectr   closer!   rD   rE   rF   sels        r   readDispatcher.readN   s     '')TXX]]'')=)=>	((''::d//00(?? 	 ((''' IIKCIIKs   A*C C$r@   )	r8   r9   r:   r;   r<   socketr   rQ   r?   r@   r   r   rB   rB   I   s6    mm   !	
 
r   rB   c                   h    \ rS rSrSrS\R
                  S\S\SS4S jrS	\R                  4S
 jr
Srg)SSLDispatcher`   z
SSLDispatcher
rD   rE   rF   r   Nc                    U R                   R                  R                  n[        R                  " 5       nUR	                  U[        R
                  5         U R                   R                  (       aG  U R                  X5      (       a  U" 5       (       d  O$U" 5         U R                   R                  (       a  MG  UR                  5         g ! UR                  5         f = fr   )	r   rD   rH   rI   rJ   rK   rL   rM   rN   rO   s        r   rQ   SSLDispatcher.reade   s     xx}}!!'')T9//0	(('';;t))(?? 	 ((''' IIKCIIKs   A C
 
CrP   c                     U R                   R                  R                  nUR                  5       (       a  U/$ UR                  U R                  5      n[        U5      S:  a  US   S   $ g )Nr   )r   rD   pendingrM   r   r1   )r!   rD   rP   rs       r   rM   SSLDispatcher.selectw   s`    xx}}!!<<>>  JJt(()q6A:Q47N r   r@   )r8   r9   r:   r;   r<   rS   r   rQ   rH   rI   rM   r?   r@   r   r   rU   rU   `   sH    mm   !	
 
$
	 9 9 
r   rU   c                       \ rS rSrSrS\\\S4   SS4S jrS\	R                  S\
S	\
SS4S
 jrS\S\
SS4S jrS\S\
SS4S jrSrg)WrappedDispatcher   z
WrappedDispatcher
r   Nr   c                 `    Xl         X l        X0l        UR                  SUR                  5        g )N   )r   r   
dispatchersignalabort)r!   r   r   rb   s       r   r"   WrappedDispatcher.__init__   s(    ($!Z--.r   rD   rE   rF   c                     U R                   R                  X5        U R                  =(       a    U R                  U R                  U5        g   g r   )rb   rQ   r   r*   )r!   rD   rE   rF   s       r   rQ   WrappedDispatcher.read   s8     	T1Mdll4+<+<nMMr   r$   r%   c                 :    U R                   R                  X5        g r   )rb   r*   r)   s      r   r*   WrappedDispatcher.timeout   s    2r   r,   c                 &    U R                  X5        g r   )r*   )r!   r$   r,   s      r   r6   WrappedDispatcher.reconnect   s    W*r   )r   rb   r   )r8   r9   r:   r;   r<   r   r=   r>   r"   rS   r   rQ   r*   r6   r?   r@   r   r   r^   r^      s    /%sD0@*A /RV /NmmN  N !	N
 
N3u 3 3T 3+ +8 + +r   r^   c            #          \ rS rSrSr               S8S\S\\\\	S4   S\
\	\/S4      S\
\	\/S4      S\
\	\\/S4      S	\
\	\\/S4      S
\
\	\\\/S4      S\
\	   S\
\	   S\
\	   S\S\
\	   S\
\   S\
\   S\
\	   S\
\R                     SS4"S jjr\R"                  4S\\\4   S\SS4S jjrS\SS4S jrS\\\4   SS4S jrS9S jrS9S jrS9S jrS9S jr                 S:S \S!\S"\\\4   S#\\\S4   S$\S%\S&\\\4   S'\S(\S)\
\   S*\S+\S,\S-\S.\S/\S\4"S0 jjr  S;S#\\\S4   S1\
\   S2\S\\ \!\"4   4S3 jjr#S4\S\4S5 jr$S9S6 jr%S7r&g)<r      zW
Higher level of APIs are provided. The interface is like JavaScript WebSocket object.
Nurlheaderon_openon_reconnect
on_messageon_erroron_closeon_pingon_pongon_cont_messagerL   get_mask_keycookiesubprotocolson_datarS   r   c                    Xl         Ub  UO/ U l        Xl        X0l        X@l        XPl        Xl        X`l        Xpl        Xl	        Xl
        Xl        SU l        Xl        SU l        [        S5      U l        [        S5      U l        SU l        SU l        [        S5      U l        SU l        SU l        Xl        UU l        SU l        SU l        [6        R8                  " 5       U l        g)a	  
WebSocketApp initialization

Parameters
----------
url: str
    Websocket url.
header: list or dict or Callable
    Custom header for websocket handshake.
    If the parameter is a callable object, it is called just before the connection attempt.
    The returned dict or list is used as custom header value.
    This could be useful in order to properly setup timestamp dependent headers.
on_open: function
    Callback object which is called at opening websocket.
    on_open has one argument.
    The 1st argument is this class object.
on_reconnect: function
    Callback object which is called at reconnecting websocket.
    on_reconnect has one argument.
    The 1st argument is this class object.
on_message: function
    Callback object which is called when received data.
    on_message has 2 arguments.
    The 1st argument is this class object.
    The 2nd argument is utf-8 data received from the server.
on_error: function
    Callback object which is called when we get error.
    on_error has 2 arguments.
    The 1st argument is this class object.
    The 2nd argument is exception object.
on_close: function
    Callback object which is called when connection is closed.
    on_close has 3 arguments.
    The 1st argument is this class object.
    The 2nd argument is close_status_code.
    The 3rd argument is close_msg.
on_cont_message: function
    Callback object which is called when a continuation
    frame is received.
    on_cont_message has 3 arguments.
    The 1st argument is this class object.
    The 2nd argument is utf-8 string which we get from the server.
    The 3rd argument is continue flag. if 0, the data continue
    to next frame data
on_data: function
    Callback object which is called when a message received.
    This is called before on_message or on_cont_message,
    and then on_message or on_cont_message is called.
    on_data has 4 argument.
    The 1st argument is this class object.
    The 2nd argument is utf-8 string which we get from the server.
    The 3rd argument is data type. ABNF.OPCODE_TEXT or ABNF.OPCODE_BINARY will be came.
    The 4th argument is continue flag. If 0, the data continue
keep_running: bool
    This parameter is obsolete and ignored.
get_mask_key: function
    A callable function to get new mask keys, see the
    WebSocket.set_mask_key's docstring for more information.
cookie: str
    Cookie value.
subprotocols: list
    List of available sub protocols. Default is None.
socket: socket
    Pre-initialized stream socket.
NFr    )rn   ro   ry   rp   rq   rr   r{   rs   rt   ru   rv   rw   rL   rx   rD   r=   last_ping_tmlast_pong_tmping_thread	stop_pingping_intervalr   ping_payloadrz   prepared_sockethas_erroredhas_done_teardown	threadingLockhas_done_teardown_lock)r!   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rL   rx   ry   rz   r{   rS   s                    r   r"   WebSocketApp.__init__   s    h  & 2f($  .!()-	!!H!!H7;48"1X59(% !&&/nn&6#r   dataopcodec                 z    U R                   (       a  U R                   R                  X5      S:X  a  [        S5      eg)z
send message

Parameters
----------
data: str
    Message to send. If you set opcode to OPCODE_TEXT,
    data must be utf-8 string or unicode.
opcode: int
    Operation code of data. Default is OPCODE_TEXT.
r   Connection is already closed.N)rD   sendr   )r!   r   r   s      r   r   WebSocketApp.send  s0     yyDIINN48A=45TUU >r   	text_datac                     U R                   (       a.  U R                   R                  U[        R                  5      S:X  a  [	        S5      eg)z
Sends UTF-8 encoded text.
r   r   N)rD   r   r	   OPCODE_TEXTr   )r!   r   s     r   	send_textWebSocketApp.send_text%  s9     yyDIINN9d6F6FG1L45TUU Mr   c                     U R                   (       a.  U R                   R                  U[        R                  5      S:X  a  [	        S5      eg)z
Sends a sequence of bytes.
r   r   N)rD   r   r	   OPCODE_BINARYr   )r!   r   s     r   
send_bytesWebSocketApp.send_bytes,  s9     yyDIINN41C1CDI45TUU Jr   c                 |    SU l         U R                  (       a$  U R                  R                  " S0 UD6  SU l        gg)z
Close websocket connection.
FNr@   )rL   rD   rN   )r!   kwargss     r   rN   WebSocketApp.close3  s2     "99IIOO%f%DI r   c                    [        S5      =U l        U l        [        R                  " 5       U l        [        R                  " U R                  S9U l        SU R                  l	        U R                  R                  5         g )Nr   )targetT)r=   r~   r   r   Eventr   Thread
_send_pingr   daemonstartr!   s    r   _start_ping_threadWebSocketApp._start_ping_thread<  s[    05a8D-"*$++4??C"& r   c                    U R                   (       a  U R                   R                  5         U R                  (       a:  U R                  R                  5       (       a  U R                  R	                  S5        [        S5      =U l        U l        g )N   r   )r   setr   is_alivejoinr=   r~   r   r   s    r   _stop_ping_threadWebSocketApp._stop_ping_threadC  s^    >>NN  0 0 9 9 ; ;!!!$05a8D-r   c                    U R                   R                  U R                  5      (       d  U R                  SL a  g U R                   R                  U R                  5      (       d  U R                  SL a  U R                  (       aV  [
        R
                  " 5       U l         [        R                  " S5        U R                  R                  U R                  5        U R                   R                  U R                  5      (       d  U R                  SL a  M  g g g g ! [         a#  n[        R                  " SU 35         S nANgS nAff = f)NFTzSending pingzFailed to send ping: )r   waitr   rL   rD   r'   r~   r   debugpingr   	Exception)r!   r5   s     r   r   WebSocketApp._send_pingJ  s    >>t1122d6G6G56P..%%d&8&899d>O>OSW>Wyy$(IIK!@NN>2IINN4#4#45 ..%%d&8&899d>O>OSW>W9>W9 ! @NN%:1##>??@s    ;D 
E$EEsockoptssloptr   r   r   http_proxy_hosthttp_proxy_porthttp_no_proxyhttp_proxy_authhttp_proxy_timeoutskip_utf8_validationhostoriginsuppress_origin
proxy_typer6   c                   ^ ^^^^^^	^
^^^^^^^^^^^^^ Tc  [         mUb  US::  a  [        S5      eUb  US:  a  [        S5      eU(       a  U(       a  X4::  a  [        S5      eT(       d  SmT(       d  0 mT R                  (       a  [        S5      eUT l        UT l        UT l        ST l        S	T l        SS
[        4U 4S jjjmSS[        SS4UUUUUU	UUU
UUUU UUUU4S jjjmS[        4UUUU UU4S jjmS[        4U 4S jjm SS[        [        [        [        [        [        4   S[        S[        4UUUU UU4S jjjm[        T5      mT R!                  UT[#        T R$                  5      S   5      m T" 5         T(       ds  T(       al  T R                  (       a[  [&        R(                  " S[+        [,        R.                  " 5       5       S35        TR1                  TT5        T R                  (       a  M[  T(       d  T" 5         T R4                  $ ! [        [        4 a*  n[&        R2                  " SU 35        T" 5          SnANOSnAff = f! T(       d  T" 5         f f = f)a%  
Run event loop for WebSocket framework.

This loop is an infinite loop and is alive while websocket is available.

Parameters
----------
sockopt: tuple
    Values for socket.setsockopt.
    sockopt must be tuple
    and each element is argument of sock.setsockopt.
sslopt: dict
    Optional dict object for ssl socket option.
ping_interval: int or float
    Automatically send "ping" command
    every specified period (in seconds).
    If set to 0, no ping is sent periodically.
ping_timeout: int or float
    Timeout (in seconds) if the pong message is not received.
ping_payload: str
    Payload message to send with each ping.
http_proxy_host: str
    HTTP proxy host name.
http_proxy_port: int or str
    HTTP proxy port. If not set, set to 80.
http_no_proxy: list
    Whitelisted host names that don't use the proxy.
http_proxy_timeout: int or float
    HTTP proxy timeout, default is 60 sec as per python-socks.
http_proxy_auth: tuple
    HTTP proxy auth information. tuple of username and password. Default is None.
skip_utf8_validation: bool
    skip utf8 validation.
host: str
    update host header.
origin: str
    update origin header.
dispatcher: Dispatcher object
    customize reading data from socket.
suppress_origin: bool
    suppress outputting origin header.
proxy_type: str
    type of proxy from: http, socks4, socks4a, socks5, socks5h
reconnect: int
    delay interval when reconnecting

Returns
-------
teardown: bool
    False if the `WebSocketApp` is closed or caught KeyboardInterrupt,
    True if any other exception was raised during a loop.
Nr   zEnsure ping_timeout > 0zEnsure ping_interval >= 0z#Ensure ping_interval > ping_timeoutr@   zsocket is already openedFTclose_framec                   > TR                      TR                  (       a
   SSS5        gSTl        SSS5        TR                  5         STl        TR                  (       a  TR                  R                  5         TR                  U (       a  U OS5      u  pSTl        TR                  TR                  X5        g! , (       d  f       N= f)z
Tears down the connection.

Parameters
----------
close_frame: ABNF frame
    If close_frame is set, the on_close handler is invoked
    with the statusCode and reason from the provided frame.
NTF)	r   r   r   rL   rD   rN   _get_close_args	_callbackrt   )r   close_status_codeclose_reasonr!   s      r   teardown*WebSocketApp.run_forever.<locals>.teardown  s     ,,)) -, *.& -
 ""$ %Dyy		!.2.B.B*/+ DI NN4==*;J -,s   B;B;;
C	r/   r   c                   > U (       a+  TR                   (       a  TR                   R                  5         [        TR                  TTTR                  S LTSS9Tl         TR                   R                  [        5       5         [        TR                  5      (       a  TR                  5       OTR                  nTR                   R                  TR                  UTR                  T	T
TTTTR                  TTTTTR                  S9  [        R                  " S5        TR                   (       a  TR#                  5         U (       a-  TR$                  (       a  TR'                  TR$                  5        OTR'                  TR(                  5        TR+                  TR                   R                   TT5        g ! [,        [.        [0        [2        [4        4 a  nT" X 5         S nAg S nAff = f)NT)r   r   fire_cont_framer   enable_multithread)ro   ry   r   r   r   r   r   rz   r   r   r   r   rS   zWebsocket connected)rD   shutdownr
   rx   rw   
settimeoutr   callablero   connectrn   ry   rz   r   r   r0   r   r   rq   r   rp   rQ   r   ConnectionRefusedErrorr4   
SystemExitr   )r/   ro   r5   checkrb   handleDisconnectr   r   r   r   r   r   r   r   rQ   r!   r   r   r   r   s      r   setSock)WebSocketApp.run_forever.<locals>.setSock  ss   				""$!!! $ 4 4D @%9#'DI II  !2!45&2*24;;*?*?T[[		!!HH!;;$3$3"/$3'9!%!2!2!$3)// " " 34%%++-D$5$5NN4#4#45NN4<<0		e<2&! 2 !112s   D1F3 3G$GG$c                  `  > TR                   (       d  T	" 5       $  TR                  R                  S5      u  pU [        R                  :X  a  T	" U5      $ U [        R                  :X  a'  TR                  TR                  UR                  5        gU [        R                  :X  aA  [        R                  " 5       Tl        TR                  TR                   UR                  5        gU [        R"                  :X  a  TR$                  (       an  TR                  TR&                  UR                  UR(                  UR*                  5        TR                  TR$                  UR                  UR*                  5        gUR                  nU [        R,                  :X  a  T(       d  UR/                  S5      nTR                  TR&                  X1R(                  S5        TR                  TR0                  U5        g! [        [        [
        4 a%  nT(       a  T" U[        T5      5      s S nA$ UeS nAff = f)NTutf-8)rL   rD   recv_data_framer   r4   r   boolr	   OPCODE_CLOSEOPCODE_PINGr   ru   r   OPCODE_PONGr'   r   rv   OPCODE_CONTrw   r{   r   finr   decoderr   )
op_codeframer5   r   custom_dispatcherr   r6   r!   r   r   s
       r   rQ   &WebSocketApp.run_forever.<locals>.read	  s   $$z!
!%!:!:4!@ $+++&D,,,t||UZZ8  D,,,$(IIK!t||UZZ8  D,,,1E1Et||UZZuyyQt33UZZK  zzd...7K;;w/Dt||T<<Ft55 3! 
 %+AtI??Gs#   G3 3H-H( H-&H((H-c                  l  > TR                   (       a  [        R                  " 5       TR                  -
  TR                   :  n TR                  TR                  -
  S:  nTR                  TR                  -
  TR                   :  nTR                  (       a   U (       a  U(       d  U(       a  [	        S5      eg)Nr   zping/pong timed outT)r   r'   r~   r   r   )has_timeout_expired$has_pong_not_arrived_after_last_pinghas_pong_arrived_too_later!   s      r   r   'WebSocketApp.run_forever.<locals>.check,  s      IIK$"3"33d6G6GG $ %%(9(99A= 5 %%(9(99D<M<MM *
 %%+<4 44IJJr   r5   c                   > STl         TR                  5         U(       d  TR                  TR                  U 5        [	        U [
        [        45      (       a  T" 5         e T(       aj  [        R                  " U  S35        T(       aI  [        R                  " S[        [        R                  " 5       5       S35        TR                  TT5        g g [        R                  " U  S35        T" 5         g )NTz - reconnectz%Calling custom dispatcher reconnect [r.   z
 - goodbye)r   r   r   rs   
isinstancer4   r   r   r0   r   r1   r2   r3   r6   error)r5   r/   r   rb   r6   r!   r   r   s     r   r   2WebSocketApp.run_forever.<locals>.handleDisconnectC  s      $D""$t}}a0!/<==
<01$NN?GMMO@T?UUfg ((G<	 % !J/0
r   r   zCalling dispatcher reconnect [r.   ztearing down on exception r   )F)r   r   rD   r   r   r   r   rL   r	   r   r   r   r   r4   r   r   create_dispatcherr   rn   r   r   r1   r2   r3   r6   r0   r   )r!   r   r   r   r   r   r   r   r   r   r   r   r   r   rb   r   r   r6   r5   r   r   r   rQ   r   r   s   ```   ```````````` @@@@@@r   run_foreverWebSocketApp.run_foreverV  s&   R !I#(9$%>??$):$%@AAMm.K$%JKKGF99$%?@@*((!& 	K$ 	K 	K<4	2$ 4	24 4	2 4	2 4	2 4	2l!	d !	 !	F	t 	> "'	2&!		 	 	 	> !,++*i&9!&<

	I$''NN8W]]_9M8NN_` ((G<	 ''' %
 "9- 	MM6qc:;JJ	 %
 %s+   <A?H I' II II I%rb   is_sslc                 x    U(       a  [        XU5      $ U=(       d    SnU(       a  [        X5      $ [        X5      $ )N
   )r^   rU   rB   )r!   r   rb   r   r*   s        r   r   WebSocketApp.create_dispatchery  s7     $TDD$" //$((r   r   c                 n   U R                   (       a  U(       d  SS/$ UR                  (       a  [        UR                  5      S:  al  S[        UR                  S   5      -  [        UR                  S   5      -   nUR                  SS n[	        U[
        5      (       a  UR                  S5      nX#/$ SS/$ )z
_get_close_args extracts the close code and reason from the close body
if it exists (RFC6455 says WebSocket Connection Close Code is optional)
Nra      r   r   r   )rt   r   r1   r>   r   bytesr   )r!   r   r   reasons       r   r   WebSocketApp._get_close_args  s     }}K$< K$4$4 5 : #c+*:*:1*=&> >  #B ! !%%ab)F&%((w/%.. $<r   c                     U(       a   U" U /UQ76   g g ! [          aM  n[        R                  " SU SU 35        U R                  (       a  U R                  X5         S nAg  S nAg S nAff = f)Nzerror from callback z: )r   r   r   rs   )r!   r%   argsr5   s       r   r   WebSocketApp._callback  sc    +%%   +!5hZr!EF==MM$** !+s   	 
A+>A&&A+)ry   rx   r   r   r   ro   rL   r~   r   rt   rw   r{   rs   rr   rp   ru   rv   rq   r   r   r   r   r   rD   r   rz   rn   )NNNNNNNNNTNNNNN)r   N)NNr   Nr}   NNNNNFNNNFNN)NF)'r8   r9   r:   r;   r<   strr   listdictr   r   r
   r   r   rS   r"   r	   r   r   r>   r   r   	bytearrayr   rN   r   r   r   tupler=   r   r   rB   rU   r^   r   r   r   r?   r@   r   r   r   r      s    599=>BAE?CDH&*&*.2!+/ $'+&**.#o7o7 dD(D01o7 (I;#456	o7
 xT(9:;o7 Xy#&6&<=>o7 8Y$4d$:;<o7 8YS$94$?@Ao7 (#o7 (#o7 "(+o7 o7 x(o7 o7 tno7  (#!o7" '#o7$ 
%o7b ;?:J:J Vucz* VC Vt V V3 V4 VVuUI%56 V4 V!9
@ +,04#+/"!%.2%* %%a a  a  UCZ(	a 
 E3,-a  a  a  sCxa  a  a  %UOa  #a  a  a   !a " #a $ %a & 
'a L	 04	)E3,-) ^,) 	)
 
z=*;;	<) 4  D  .+r   )"r2   rH   rS   r   r'   typingr   r   r   r   r}   r   _abnfr	   _corer
   r   _exceptionsr   r   r   _ssl_compatr   _urlr   __all__r   r>   r   r   rB   rU   r^   r   r@   r   r   <module>r     s         1 1   / 
 % & 
	"C "D "
 2 .!N !H+ +6F+ F+r   