� L�gp^��<�ddlZddlZddlZddlZddlZddlmZmZmZm Z ddl m Z ddl m Z ddlmZmZddlmZmZmZddlmZdd lmZ d gZdad ed dfd �ZGd�d��ZGd�de��ZGd�de��ZGd�d��Z Gd�d ��Z!dS)�N)�Any�Callable�Optional�Union�)�_logging)�ABNF)� WebSocket�getdefaulttimeout)�"WebSocketConnectionClosedException�WebSocketException�WebSocketTimeoutException)� SSLEOFError)� parse_url� WebSocketApp�reconnectInterval�returnc� �|adS�N)� RECONNECT)rs �^/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/websocket/_app.py� setReconnectr+s ��!�I�I�I�c�r�eZdZdZdedeeedfddfd�Zdeeedfde ddfd �Z ded e ddfd �Z dS) �DispatcherBasez DispatcherBase �app� ping_timeoutNrc�"�||_||_dSr)rr)�selfrrs r�__init__zDispatcherBase.__init__5s�����(����r�seconds�callbackc�B�tj|��|��dSr)�time�sleep�rr!r"s r�timeoutzDispatcherBase.timeout9s!�� � �7������ � � � � r� reconnectorc �� tjd|�dttj�����d���t j|��|d���dS#t$r}tjd|����|�d}~wwxYw)Nzreconnect() - retrying in z seconds [� frames in stack]T)� reconnectingz User exited )r�info�len�inspect�stackr$r%�KeyboardInterrupt)rr!r(�es r� reconnectzDispatcherBase.reconnect=s��� � �M�g�W�g�g��G�M�O�O�@T�@T�g�g�g� � � � �J�w� � � � �K�T� *� *� *� *� *� *�� � � � � �M�,��,�,� -� -� -��G����� ���s�AA� B�'B�B) �__name__� __module__� __qualname__�__doc__rr�float�intr rr'r2�rrrr0s���������)�C�)�u�U�C��5E�/F�)�4�)�)�)�)��u�U�C��%5�6��(��t����� �� �8� �� � � � � � rrc�4�eZdZdZdejdededdfd�ZdS)� Dispatcherz Dispatcher �sock� read_callback�check_callbackrNc�t�tj��}|�|jjjtj�� |jjr;|�|j��r |��sn|��|jj�;|� ��dS#|� ��wxYwr) � selectors�DefaultSelector�registerrr<� EVENT_READ� keep_running�selectr�close�rr<r=r>�sels r�readzDispatcher.readNs��� �'�)�)�� � � �T�X�]�'��)=�>�>�>� ��(�'� !��:�:�d�/�0�0��(�=�?�?����� � � � �(�'� !� �I�I�K�K�K�K�K��C�I�I�K�K�K�K���s �AB!�!B7)r3r4r5r6�socketrrIr9rrr;r;IsZ����������m�� ��!� � � �����rr;c�J�eZdZdZdejdededdfd�Zdejfd �Z dS) � SSLDispatcherz SSLDispatcher r<r=r>rNc�p�|jjj}tj��}|�|tj�� |jjr7|�||��r |��sn|��|jj�7|���dS#|���wxYwr) rr<r@rArBrCrDrErFrGs rrIzSSLDispatcher.reades��� �x�}�!���'�)�)�� � � �T�9�/�0�0�0� ��(�'� !��;�;�t�S�)�)��(�=�?�?����� � � � �(�'� !� �I�I�K�K�K�K�K��C�I�I�K�K�K�K���s �AB�B5rHc���|jjj}|���r|gS|�|j��}t |��dkr|ddSdS)Nr)rr<�pendingrErr-)rr<rH�rs rrEzSSLDispatcher.selectwsd���x�}�!�� �<�<�>�>� ��� � �J�J�t�(� )� )�� �q�6�6�A�:�:��Q�4��7�N� �:r) r3r4r5r6rJrrIr@rArEr9rrrLrL`sx����������m�� ��!� � � ����$ � � 9� � � � � � rrLc�~�eZdZdZdeeedfddfd�Zdejde de ddfd �Z d ed e ddfd �Z d ed e ddfd�Z dS)�WrappedDispatcherz WrappedDispatcher rNrc�f�||_||_||_|�d|j��dS)N�)rr� dispatcher�signal�abort)rrrrUs rr zWrappedDispatcher.__init__�s7�����(���$������!�Z�-�.�.�.�.�.rr<r=r>c��|j�||��|jo|�|j|��dSdSr)rUrIrr')rr<r=r>s rrIzWrappedDispatcher.read�sJ�� ����T�=�1�1�1� ��M�d�l�l�4�+<�n�M�M�M�M�M�M�M�Mrr!r"c�<�|j�||��dSr)rUr'r&s rr'zWrappedDispatcher.timeout�s �� ������2�2�2�2�2rr(c�2�|�||��dSr)r')rr!r(s rr2zWrappedDispatcher.reconnect�s�� � � �W�k�*�*�*�*�*r) r3r4r5r6rr7r8r rJrrIr'r2r9rrrRrR�s���������/�%��s�D�0@�*A�/�RV�/�/�/�/� N��m�N� �N�!� N� � N�N�N�N�3�u�3��3�T�3�3�3�3�+��+�8�+��+�+�+�+�+�+rrRc#�0�eZdZdZ d:dedeeeedfde ee gdfde ee gdfde ee e gdfd e ee e gdfd e ee e e gdfd e ed e ed e ede de ede ede ede ede e j ddf"d�Zejfdeeefdeddfd�Zdeddfd�Zdeeefddfd�Zd;d�Zd;d�Zd;d�Zd;d�Z d<d#ed$ed%eeefd&eeedfd'ed(ed)eeefd*ed+ed,e ed-e d.ed/ed0e d1ed2ede f"d3�Z d=d&eeedfd4e ed5e deee e!ffd6�Z"d7edefd8�Z#d;d9�Z$dS)>rz_ Higher level of APIs are provided. The interface is like JavaScript WebSocket object. NT�url�header�on_open� on_reconnect� on_message�on_error�on_close�on_ping�on_pong�on_cont_messagerD� get_mask_key�cookie� subprotocols�on_datarJrc���||_|�|ng|_| |_||_||_||_||_||_||_||_ | |_ | |_ d|_ | |_ d|_td��|_td��|_d|_d|_td��|_d|_d|_||_||_d|_d|_t7j��|_dS)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�)r\r]rgr^r_r`rirarbrcrdrerDrfr<r7� last_ping_tm� last_pong_tm� ping_thread� stop_ping� ping_intervalr� ping_payloadrh�prepared_socket� has_errored�has_done_teardown� threading�Lock�has_done_teardown_lock)rr\r]r^r_r`rarbrcrdrerDrfrgrhrirJs rr zWebSocketApp.__init__�s���h��� &� 2�f�f��� ��� ��� �(���$����� � �� � �� ��� ��� �.���!���(���)-�� �!�!�H�H���!�!�H�H���7;���48���"�1�X�X���59������(���%��� ���!&���&/�n�&6�&6��#�#�#r�data�opcodec�p�|jr|j�||��dkrtd���dS)a 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)r<�sendr )rrxrys rr|zWebSocketApp.sends@���y� V�D�I�N�N�4��8�8�A�=�=�4�5T�U�U� U�>�=r� text_datac��|jr)|j�|tj��dkrt d���dS)z+ Sends UTF-8 encoded text. rr{N)r<r|r � OPCODE_TEXTr )rr}s r� send_textzWebSocketApp.send_text%sD���y� V�D�I�N�N�9�d�6F�G�G�1�L�L�4�5T�U�U� U�M�Lrc��|jr)|j�|tj��dkrt d���dS)z, Sends a sequence of bytes. rr{N)r<r|r � OPCODE_BINARYr )rrxs r� send_byteszWebSocketApp.send_bytes,sD���y� V�D�I�N�N�4��1C�D�D��I�I�4�5T�U�U� U�J�Irc �X�d|_|jr|jjdi|��d|_dSdS)z- Close websocket connection. FNr9)rDr<rF)r�kwargss rrFzWebSocketApp.close3sE��"��� �9� � �D�I�O� %� %�f� %� %� %��D�I�I�I� � rc���td��x|_|_tj��|_tj|j���|_d|j_ |j� ��dS)Nr)�targetT) r7rlrmru�Eventro�Thread� _send_pingrn�daemon�start�rs r�_start_ping_threadzWebSocketApp._start_ping_thread<se��05�a���8���D�-�"��*�*���$�+�4�?�C�C�C���"&���� ���� � � � � rc���|jr|j���|jr3|j���r|j�d��t d��x|_|_dS)N�r)ro�setrn�is_alive�joinr7rlrmr�s r�_stop_ping_threadzWebSocketApp._stop_ping_threadCst�� �>� !� �N� � � � � � � � %�� 0� 9� 9� ;� ;� %� � � !� !�!� $� $� $�05�a���8���D�-�-�-rc� �|j�|j��s |jdurdS|j�|j��s�|jdur�|jr{t j��|_ tjd��|j� |j ��n.#t$r!}tjd|����Yd}~nd}~wwxYw|j�|j��s|jdu��dSdSdSdS)NFTz Sending pingzFailed to send ping: ) ro�waitrprDr<r$rlr�debug�pingrq� Exception)rr1s rr�zWebSocketApp._send_pingJs=�� �>� � �t�1� 2� 2� �d�6G�5�6P�6P� �F��.�%�%�d�&8�9�9� @�d�>O�SW�>W�>W��y� @�$(�I�K�K��!�@��N�>�2�2�2��I�N�N�4�#4�5�5�5�5�� �@�@�@��N�#>�1�#>�#>�?�?�?�?�?�?�?�?�����@���� �.�%�%�d�&8�9�9� @�d�>O�SW�>W�>W�>W�>W� @� @�>W�>W� @� @s�33B'�' C�1C � CrrkF�sockopt�ssloptrprrq�http_proxy_host�http_proxy_port� http_no_proxy�http_proxy_auth�http_proxy_timeout�skip_utf8_validation�host�origin�suppress_origin� proxy_typer2c�������� � � � � �������������t�|�|dkrtd���|�|dkrtd���|r|r||krtd����sd��si��jrtd���|�_|�_|�_d�_d �_dd tf�fd � �dd td df���� �� ��� � ���� ���fd� �d tf����� �fd� �d tf�fd� � ddttttttfd td tf������fd� �t������|�t#�j��d��� ����s\�rZ�jrSt'jdt+t-j�����d����������j�Sn?#ttf$r+}t'jd|�������Yd}~nd}~wwxYw�s ���n#�s ���wwxYw�jS)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. NrzEnsure ping_timeout > 0zEnsure ping_interval >= 0z#Ensure ping_interval > ping_timeoutr9zsocket is already openedFT� close_framec�r���j5�jr ddd��dSd�_ddd��n #1swxYwY����d�_�jr�j�����|r|nd��\}}d�_���j||��dS)a 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) rwrtr�rDr<rF�_get_close_args� _callbackrb)r��close_status_code� close_reasonrs �r�teardownz*WebSocketApp.run_forever.<locals>.teardown�s,����,� .� .��)��� .� .� .� .� .� .� .� .�*.��&� .� .� .� .� .� .� .� .� .� .� .���� .� .� .� .� � "� "� $� $� $� %�D� ��y� "�� ���!�!�!�.2�.B�.B�*�4� � ��/�/� +� �|��D�I� �N�N�4�=�*;�\� J� J� J� J� Js� 2�2�6�6r+rc�R��|r �jr�j���t�j���jdu�d����_�j�t ���� t�j��r����n�j}�j� �j |�j � � ��� �j �� �� �j ���tjd���jr����|r"�jr���j��n���j�����jj����dS#t,t.t0t2t4f$r}�||��Yd}~dSd}~wwxYw)NT)r�r��fire_cont_framer��enable_multithread) r]rgr�r�r�r�r�rhr�r�r�r�rJzWebsocket connected)r<�shutdownr rfre� settimeoutr �callabler]�connectr\rgrhrrrr,rpr�r_r�r^rIr �ConnectionRefusedErrorr0� SystemExitr�)r+r]r1�checkrU�handleDisconnectr�r�r�r�r�r�r�r�rIrr�r�r�r�s �����������������r�setSockz)WebSocketApp.run_forever.<locals>.setSock�s����� %�� � %�� �"�"�$�$�$�!��!��� $� 4�D� @�%9�#'� ���D�I� �I� � �!2�!4�!4� 5� 5� 5�& 2�*2�4�;�*?�*?�P�������T�[��� �!�!��H�!��;�$3�$3�"/�$3�'9�!%�!2��!�$3�)��/�"����"� �3�4�4�4��%�.��+�+�-�-�-��1�D�$5�1��N�N�4�#4�5�5�5�5��N�N�4�<�0�0�0����� ���e�<�<�<�<�<��2�&�!��� � 2� 2� 2�!� ��L�1�1�1�1�1�1�1�1�1����� 2���s�1C9E,�,#F&� F!�!F&c�����js � ��S �j�d��\}}nA#ttt f$r'}�r�|t �����cYd}~S|�d}~wwxYw|tjkr � |��S|tj kr"�� �j |j ���n|tj kr9tj���_�� �j|j ��n�|tjkrZ�jrS�� �j|j |j|j���� �j|j |j��nk|j }|tjkr�s|�d��}�� �j||jd���� �j|��dS)NT�utf-8)rDr<�recv_data_framer r0r�boolr � OPCODE_CLOSE� OPCODE_PINGr�rcrx� OPCODE_PONGr$rmrd� OPCODE_CONTreriry�finr�decoder`) �op_code�framer1rx�custom_dispatcherr�r2rr�r�s ������rrIz&WebSocketApp.run_forever.<locals>.read s�����$� "��x�z�z�!� �!%��!:�!:�4�!@�!@������2�!��� � � � %��+�+�A�t�I���?�?�?�?�?�?�?�?��G����� �����$�+�+�+��x����&��D�,�,�,����t�|�U�Z�8�8�8�8��D�,�,�,�$(�I�K�K��!����t�|�U�Z�8�8�8�8��D�,�,�,��1E�,����t�|�U�Z���u�y�Q�Q�Q����t�3�U�Z���K�K�K�K��z���d�.�.�.�7K�.��;�;�w�/�/�D����t�|�T�5�<��F�F�F����t���5�5�5��4s!�2�A0� A+�#A0�)A+�+A0c�����jrktj���jz �jk}�j�jz dk}�j�jz �jk}�jr|r|s|rt d���dS)Nrzping/pong timed outT)rr$rlrmr)�has_timeout_expired�$has_pong_not_arrived_after_last_ping�has_pong_arrived_too_laters �rr�z'WebSocketApp.run_forever.<locals>.check,s����� � K��I�K�K�$�"3�3�d�6G�G�$��%��(9�9�A�=�5��%��(9�9�D�<M�M�*� �%�K�+�K�=� K� 5� K�4�4I�J�J�J��4rr1c����d�_����|s���j|��t |t t f��r �����ritj|�d����rNtj dttj �����d����� ����dSdStj|�d������dS)NTz - reconnectz%Calling custom dispatcher reconnect [r*z - goodbye)rsr�r�ra� isinstancer0r�rr,r�r-r.r/r2�error)r1r+r�rUr2rr�r�s ������rr�z2WebSocketApp.run_forever.<locals>.handleDisconnectCs��� $�D� � � "� "� $� $� $�� 1����t�}�a�0�0�0��!�/��<�=�=� ��� � � ��� �� ��0�0�0�1�1�1�$�=��N�g��G�M�O�O�@T�@T�g�g�g�����(�(��G�<�<�<�<�<� =�=� ��!�/�/�/�0�0�0��� � � � � rr�zCalling dispatcher reconnect [r*ztearing down on exception r)F)rr r<rprrqrtrDr r�rr r�r0r�r��create_dispatcherrr\rr�r-r.r/r2r,rs)rr�r�rprrqr�r�r�r�r�r�r�r�rUr�r�r2r1r�r�r�rIr�r�s``` ```````````` @@@@@@r� run_foreverzWebSocketApp.run_foreverVs������������������������R � �!�I� � #� ��(9�(9�$�%>�?�?� ?� � $���):�):�$�%@�A�A� A� � L�M� L�m�|�.K�.K�$�%J�K�K� K�� ��G�� ��F� �9� A�$�%?�@�@� @�*���(���(���!&��� ��� K� K�$� K� K� K� K� K� K�<4 2�4 2�$�4 2�4�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�4 2�l! �d�! �! �! �! �! �! �! �! �! �! �! �F �t� � � � � � �>"'� � ��2�&�!��� �� �� �� � � � � � � � � � � �>!��,�,���+�+� �*�i���&9�&9�!�&<� � � � � �G�I�I�I�$� =�� =��'�=��N�`��W�]�_�_�9M�9M�`�`�`�����(�(��G�<�<�<� �'�=��� "�9�-� � � � �M�:�q�:�:� ;� ;� ;� �H�J�J�J�J�J�J�J�J����� ����%� ��� � � ���%� ��� � � � � ������s1�9A(G"�!H.�"H�3!H�H.�H�H.�.H=rU�is_sslc�t�|rt|||��S|pd}|rt||��St||��S)N� )rRrLr;)rrrUr�r's rr�zWebSocketApp.create_dispatcherysQ�� � E�$�T�<��D�D� D��$�"�� � 0� ��w�/�/� /��$��(�(�(rr�c�L�|jr|sddgS|jr�t|j��dkrudt|jd��zt|jd��z}|jdd�}t |t ��r|�d��}||gSddgS)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) NrT�rrr�)rbrxr-r8r��bytesr�)rr�r��reasons rr�zWebSocketApp._get_close_args�s����}� �K� ��$�<� � � � ��K�$4� 5� 5�� :� :� #�c�+�*:�1�*=�&>�&>� >��� ��#�B�B�!� �!�%�a�b�b�)�F��&�%�(�(� 0����w�/�/��%�v�.� .��$�<� rc���|ra ||g|�R�dS#t$rH}tjd|�d|����|jr|�||��Yd}~dSYd}~dSd}~wwxYwdS)Nzerror from callback z: )r�rr�ra)rr"�argsr1s rr�zWebSocketApp._callback�s��� � +� +����%��%�%�%�%�%�%��� +� +� +���E�h�E�E�!�E�E�F�F�F��=�+��M�M�$��*�*�*�*�*�*�*�*�*�+�+�+�+�+�+����� +����  +� +s� � A!�7A�A!)NNNNNNNNNTNNNNN)rN)NNrNrkNNNNNFNNNFNN)NF)%r3r4r5r6�strr�list�dictrrr rr�rJr r rr�r8r|r�� bytearrayr�rFr�r�r��tupler7r�rr;rLrRr�r�r�r9rrrr�sy��������59�9=�>B�AE�?C�DH�&*�&*�.2�!�+/� $�'+�&*�*.�#o7�o7� �o7��d�D�(�D�0�1�o7��(�I�;��#4�5�6� o7� �x�� �T�(9�:�;� o7� �X�y�#�&6��&<�=�>� o7��8�Y��$4�d�$:�;�<�o7��8�Y��S�$9�4�$?�@�A�o7��(�#�o7��(�#�o7�"�(�+�o7��o7��x�(�o7��� �o7��t�n�o7� �(�#�!o7�"���'�#o7�$ �%o7�o7�o7�o7�b;?�:J�V�V��u�c�z�*�V�C�V�t�V�V�V�V� V�3�V�4�V�V�V�V�V�u�U�I�%5�6�V�4�V�V�V�V�����!�!�!�!�9�9�9�9� @� @� @� @���+,�04��#�+/�"�!%�.2�%*���� %���%a �a ��a ��a ��U�C�Z�(� a � �E�3��,�-� a � � a ��a ��s�C�x��a ��a ��a �%�U�O�a �#�a ��a ��a � �!a �"�#a �$�%a �& �'a �a �a �a �L 04�� )� )��E�3��,�-� )��^�,� )�� )� �z�=�*;�;� <� )� )� )� )� �4� �D� � � � �.+�+�+�+�+�+r)"r.r@rJrur$�typingrrrrrkr�_abnfr �_corer r � _exceptionsr r r� _ssl_compatr�_urlr�__all__rr8rrr;rLrRrr9rr�<module>r�s���������� � � � ����� � � � �1�1�1�1�1�1�1�1�1�1�1�1�������������/�/�/�/�/�/�/�/����������� %�$�$�$�$�$��������& � �� � �"�C�"�D�"�"�"�"� ��������2���������.!�!�!�!�!�N�!�!�!�H+�+�+�+�+�+�+�+�6F+�F+�F+�F+�F+�F+�F+�F+�F+�F+r
Memory