
    0j>)                       d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZmZmZmZmZmZ d dlZddlmZ erddlmZmZ dd	lmZ  e
d
          Z G d de	e                   Z G d de	e                   Z  G d d          Z! G d d          Z"e G d de                      Z#ddZ$ddd dZ%dS )!    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericTypeVarIteratorOptionalAsyncIteratorcast)SelfProtocol	TypeGuardoverride
get_originruntime_checkable   )extract_type_var_from_base)ParallelAsyncParallel)FinalRequestOptions_Tc                  |    e Zd ZU dZded<   dZded<   ded<   dd	d#dZd$dZd%dZd&dZ	d%dZ
d'dZd(d!Zd)d"ZdS )*StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseNOptional[FinalRequestOptions]_optionsSSEBytesDecoder_decoderoptionscast_totype[_T]clientr   r"   returnNonec                   || _         || _        || _        || _        |                                | _        |                                 | _        d S Nr   _cast_to_clientr   _make_sse_decoderr    
__stream__	_iteratorselfr#   r   r%   r"   s        [/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/parallel/_streaming.py__init__zStream.__init__   H     !0022**    r   c                4    | j                                         S r)   )r/   __next__r1   s    r2   r7   zStream.__next__,   s    ~&&(((r5   Iterator[_T]c              #  &   K   | j         D ]}|V  d S r)   r/   r1   items     r2   __iter__zStream.__iter__/   s,      N 	 	DJJJJ	 	r5   Iterator[ServerSentEvent]c              #  x   K   | j                             | j                                                  E d {V  d S r)   )r    
iter_bytesr   r8   s    r2   _iter_eventszStream._iter_events3   sB      =++DM,D,D,F,FGGGGGGGGGGGr5   c              #  8  K   t          t          | j                  }| j        }| j        j        }|                                 }	 |D ]$} ||                                ||          V  %	 |                                 d S # |                                 w xY wN)datar#   r   )	r   r   r+   r   r,   _process_response_datarB   jsoncloser1   r#   r   process_dataiteratorsses         r2   r.   zStream.__stream__6   s      sDM**=|:$$&&	 X X"l

GhWWWWWWWX NNHNNs   'B Br   c                    | S r)    r8   s    r2   	__enter__zStream.__enter__C   s    r5   exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                .    |                                   d S r)   rH   r1   rP   rR   rT   s       r2   __exit__zStream.__exit__F   s     	

r5   c                8    | j                                          dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r   rH   r8   s    r2   rH   zStream.closeN   s     	r5   )
r#   r$   r   r   r%   r   r"   r   r&   r'   r&   r   )r&   r9   )r&   r?   r&   r   rP   rQ   rR   rS   rT   rU   r&   r'   r&   r'   )__name__
__module____qualname____doc____annotations__r   r3   r7   r>   rB   r.   rO   rY   rH   rN   r5   r2   r   r      s         TT.2H2222 26+ + + + + +) ) ) )   H H H H              r5   r   c                  |    e Zd ZU dZded<   dZded<   ded<   dd	d#dZd$dZd%dZd&dZ	d%dZ
d'dZd(d!Zd)d"ZdS )*AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   Nr   r   zSSEDecoder | SSEBytesDecoderr    r!   r#   r$   r%   r   r"   r&   r'   c                   || _         || _        || _        || _        |                                | _        |                                 | _        d S r)   r*   r0   s        r2   r3   zAsyncStream.__init__^   r4   r5   r   c                D   K   | j                                          d {V S r)   )r/   	__anext__r8   s    r2   ri   zAsyncStream.__anext__m   s,      ^--/////////r5   AsyncIterator[_T]c               4   K   | j         2 3 d {V }|W V  6 d S r)   r;   r<   s     r2   	__aiter__zAsyncStream.__aiter__p   sF      . 	 	 	 	 	 	 	$JJJJJ )..s   AsyncIterator[ServerSentEvent]c                  K   | j                             | j                                                  2 3 d {V }|W V  6 d S r)   )r    aiter_bytesr   )r1   rL   s     r2   rB   zAsyncStream._iter_eventst   se      224=3L3L3N3NOO 	 	 	 	 	 	 	#IIIII POOs   Ac               ^  K   t          t          | j                  }| j        }| j        j        }|                                 }	 |2 3 d {V } ||                                ||          W V  +6 	 |                                 d {V  d S # |                                 d {V  w xY wrD   )	r   r   r+   r   r,   rF   rB   rG   acloserI   s         r2   r.   zAsyncStream.__stream__x   s      sDM**=|:$$&&	$% X X X X X X Xc"l

GhWWWWWWWW &X //###########(//##########s   B A2&B B,r   c                
   K   | S r)   rN   r8   s    r2   
__aenter__zAsyncStream.__aenter__   s      r5   rP   rQ   rR   rS   rT   rU   c                >   K   |                                   d {V  d S r)   rW   rX   s       r2   	__aexit__zAsyncStream.__aexit__   s.       jjllr5   c                H   K   | j                                          d{V  dS r[   )r   rq   r8   s    r2   rH   zAsyncStream.close   s4       m""$$$$$$$$$$$r5   )
r#   r$   r   r   r%   r   r"   r   r&   r'   r\   )r&   rj   )r&   rm   r]   r^   r_   )r`   ra   rb   rc   rd   r   r3   ri   rl   rB   r.   rs   ru   rH   rN   r5   r2   rf   rf   W   s         VV.2H2222**** 26+ + + + + +0 0 0 0      $ $ $ $      % % % % % %r5   rf   c                      e Zd ZdddddddZedd            Zedd            Zedd            Zedd            ZddZ	e
dd            ZdS )ServerSentEventNeventrE   idretryrz   
str | NonerE   r{   r|   
int | Noner&   r'   c               J    |d}|| _         || _        |pd | _        || _        d S )N )_id_data_event_retry)r1   rz   rE   r{   r|   s        r2   r3   zServerSentEvent.__init__   s2     <D
mtr5   c                    | j         S r)   )r   r8   s    r2   rz   zServerSentEvent.event   
    {r5   c                    | j         S r)   )r   r8   s    r2   r{   zServerSentEvent.id   s	    xr5   c                    | j         S r)   )r   r8   s    r2   r|   zServerSentEvent.retry   r   r5   strc                    | j         S r)   )r   r8   s    r2   rE   zServerSentEvent.data   s
    zr5   r   c                4    t          j        | j                  S r)   )rG   loadsrE   r8   s    r2   rG   zServerSentEvent.json   s    z$)$$$r5   c           	     H    d| j          d| j         d| j         d| j         d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)ry   r8   s    r2   __repr__zServerSentEvent.__repr__   s5    i
ii49ii47ii\`\fiiiir5   )
rz   r}   rE   r}   r{   r}   r|   r~   r&   r'   )r&   r}   )r&   r~   )r&   r   )r&   r   )r`   ra   rb   r3   propertyrz   r{   r|   rE   rG   r   r   rN   r5   r2   rx   rx      s         !           X    X    X    X% % % % j j j Xj j jr5   rx   c                  h    e Zd ZU ded<   ded<   ded<   ded<   dd
ZddZddZddZddZddZ	dS )
SSEDecoderz	list[str]r   r}   r   r~   r   _last_event_idr&   r'   c                >    d | _         g | _        d | _        d | _        d S r)   )r   r   r   r   r8   s    r2   r3   zSSEDecoder.__init__   s#    
"r5   rK   Iterator[bytes]r?   c              #     K   |                      |          D ]I}|                                D ]2}|                    d          }|                     |          }|r|V  3JdS )^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder1   rK   chunkraw_linelinerL   s         r2   rA   zSSEDecoder.iter_bytes   s      &&x00 	 	E!,,..  w//kk$'' III		 	r5   c              #     K   d}|D ];}|                     d          D ]"}||z  }|                    d          r|V  d}#<|r|V  dS dS )^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunksr5   Tkeependss   s   

s   

Nr   endswithr1   rK   rE   r   r   s        r2   r   zSSEDecoder._iter_chunks   s       	 	E(($(77  ==!@AA JJJD	
  	JJJJJ	 	r5   AsyncIterator[bytes]rm   c                  K   |                      |          2 3 d{V }|                                D ]3}|                    d          }|                     |          }|r|W V  4P6 dS )r   Nr   )_aiter_chunksr   r   r   s         r2   ro   zSSEDecoder.aiter_bytes   s      --h77 	 	 	 	 	 	 	%!,,..  w//kk$'' IIII	 877s   A(c                  K   d}|2 3 d{V }|                     d          D ]#}||z  }|                    d          r|W V  d}$B6 |r|W V  dS dS )r   r5   NTr   r   r   r   s        r2   r   zSSEDecoder._aiter_chunks   s      # 	 	 	 	 	 	 	%(($(77  ==!@AA JJJJD	 $  	JJJJJJ	 	s   A	r   r   ServerSentEvent | Nonec                r   |so| j         s| j        s| j        s	| j        d S t	          | j         d                    | j                  | j        | j                  }d | _         g | _        d | _        |S |                    d          rd S |                    d          \  }}}|                    d          r
|dd          }|dk    r|| _         nh|dk    r| j                            |           nG|dk    rd	|v rn<|| _        n4|d
k    r-	 t          |          | _        n# t          t          f$ r Y nw xY w	 d S )N
ry   : r   rz   rE   r{    r|   )r   r   r   r   rx   join
startswith	partitionappendint	TypeError
ValueError)r1   r   rL   	fieldname_values         r2   r   zSSEDecoder.decode   s     	; tz $:M RVR]Ret!kYYtz**&k	  C DKDJDKJ??3 	4"nnS11	1eC   	!""IEDKK&  Je$$$$$u}}&+##'!!!%jjz*    ts   
D D32D3Nr_   rK   r   r&   r?   )rK   r   r&   r   rK   r   r&   rm   )rK   r   r&   r   )r   r   r&   r   )
r`   ra   rb   rd   r3   rA   r   ro   r   r   rN   r5   r2   r   r      s               
 
 
 
   
 
 
 
. . . . . .r5   r   c                      e Zd Zd
dZddZd	S )r   rK   r   r&   r?   c                    dS )r   NrN   r1   rK   s     r2   rA   zSSEBytesDecoder.iter_bytes-      r5   r   rm   c                    dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNrN   r   s     r2   ro   zSSEBytesDecoder.aiter_bytes1  r   r5   Nr   r   )r`   ra   rb   rA   ro   rN   r5   r2   r   r   +  s<                r5   r   typtyper&   ;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]]c                    t          |           p| }t          j        |          ot          |t          t
          f          S )zaTypeGuard for determining whether or not the given type is a subclass of `Stream` / `AsyncStream`)r   inspectisclass
issubclassr   rf   )r   origins     r2   is_stream_class_typer   6  s6    __#F?6""Pz&6;:O'P'PPr5   )failure_message
stream_clsr   r}   c          	     X    ddl m}m} t          | dt	          d||f          |          S )a  Given a type like `Stream[T]`, returns the generic type variable `T`.

    This also handles the case where a concrete subclass is given, e.g.
    ```py
    class MyStream(Stream[bytes]):
        ...

    extract_stream_chunk_type(MyStream) -> bytes
    ```
    r   )r   rf   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   rf   r   r   )r   r   r   rf   s       r2   extract_stream_chunk_typer   <  sO     21111111%-/DEE'	   r5   )r   r   r&   r   )r   r   r   r}   r&   r   )&
__future__r   rG   r   typesr   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   r   r   r   r   r   httpx_utilsr   r,   r   r   _modelsr   r   r   rf   rx   r   r   r   r   rN   r5   r2   <module>r      s?   " " " " " "         ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `  . . . . . . -00000000,,,,,, WT]]> > > > >WR[ > > >B?% ?% ?% ?% ?%'"+ ?% ?% ?%D&j &j &j &j &j &j &j &jRf f f f f f f fR     h   Q Q Q Q #'       r5   