
    !Yw`                         d dl Z d dlZ	 d dlZn# e$ r d dlZY nw xY w e j        e          Z G d d          Z G d d          Z	dS )    Nc                   <    e Zd Zd Zd Zd Zd Zed             ZdS )JsonRpcStreamReaderc                     || _         d S N)_rfile)selfrfiles     5lib/python3.11/site-packages/pylsp_jsonrpc/streams.py__init__zJsonRpcStreamReader.__init__   s        c                 8    | j                                          d S r   )r   closer   s    r
   r   zJsonRpcStreamReader.close   s    r   c                    | j         j        s	 |                                 }n9# t          $ r, | j         j        rY dS t                              d           Y nw xY w|dS 	  |t          j        |                    d                               n+# t          $ r t                              d|           Y w xY w| j         j        dS dS )zBlocking call to listen for messages on the rfile.

        Args:
            message_consumer (fn): function that is passed each message as it is read off the socket.
        NzFailed to read from rfileutf-8zFailed to parse JSON message %s)	r   closed_read_message
ValueErrorlog	exceptionjsonloadsdecode)r   message_consumerrequest_strs      r
   listenzJsonRpcStreamReader.listen   s    +$ 	;"0022 ; ; ;;% FF9:::::;
 "  K,>,>w,G,G!H!HIIII   ?MMM +$ 	 	 	 	 	s&   # AAA!0B %B:9B:c                 ,   | j                                         }|sdS |                     |          }|rC|                                r/| j                                         }|r|                                /|sdS | j                             |          S )zmReads the contents of a message.

        Returns:
            body of message if parsable else None
        N)r   readline_content_lengthstripread)r   linecontent_lengths      r
   r   z!JsonRpcStreamReader._read_message-   s     {##%% 	4--d33  	*tzz|| 	*;''))D  	*tzz|| 	*  	4 {///r   c                    |                      d          rq|                     d          \  }}|                                }	 t          |          S # t          $ r(}t	          d                    |                    |d}~ww xY wdS )z.Extract the content length from an input line.s   Content-Length: z!Invalid Content-Length header: {}N)
startswithsplitr    intr   format)r"   _valuees       r
   r   z#JsonRpcStreamReader._content_lengthD   s     ??.// 	[zz"566HAuKKMME[5zz! [ [ [ !D!K!KE!R!RSSYZZ[ ts   A 
B#A??BN)	__name__
__module____qualname__r   r   r   r   staticmethodr    r   r
   r   r      sk              .0 0 0. 
 
 \
 
 
r   r   c                        e Zd Zd Zd Zd ZdS )JsonRpcStreamWriterc                 R    || _         t          j                    | _        || _        d S r   )_wfile	threadingLock_wfile_lock_json_dumps_args)r   wfilejson_dumps_argss      r
   r   zJsonRpcStreamWriter.__init__S   s'    $>++ /r   c                 x    | j         5  | j                                         d d d            d S # 1 swxY w Y   d S r   )r7   r4   r   r   s    r
   r   zJsonRpcStreamWriter.closeX   s     	  	 K	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   /33c                 F   | j         5  | j        j        r	 d d d            d S 	 t          j        |fi | j        }t          |t                    rt          |          n!t          |	                    d                    }d
                    ||          }| j                            |	                    d                     | j                                         n+# t          $ r t                              d|           Y nw xY wd d d            d S # 1 swxY w Y   d S )Nr   zPContent-Length: {}
Content-Type: application/vscode-jsonrpc; charset=utf8

{}z)Failed to write message to output file %s)r7   r4   r   r   dumpsr8   
isinstancebyteslenencoder(   writeflush	Exceptionr   r   )r   messagebodyr#   responses        r
   rB   zJsonRpcStreamWriter.write\   s    	T 	T{! 	T 	T 	T 	T 	T 	T 	T 	TTz'CCT-BCC /9u.E.E!dT3t{{[bOcOcKdKd55  !!(//'":":;;;!!#### T T TI7SSSSST#	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts5   DB9CD%DDDDDDN)r,   r-   r.   r   r   rB   r0   r   r
   r2   r2   R   sF        0 0 0
     T T T T Tr   r2   )
loggingr5   ujsonr   rD   	getLoggerr,   r   r   r2   r0   r   r
   <module>rK      s           KKKKK g!!@ @ @ @ @ @ @ @FT T T T T T T T T Ts    	