U
    ?f6                     @  s`  d dl mZ d dlZd dl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 d dlmZmZmZmZmZmZ d dlZddlmZmZ e	rddlmZmZ ed	ZG d
d dejZ G dd dee e dZ!G dd dejZ"G dd dee e"dZ#G dd dZ$G dd dZ%eG dd deZ&dddddZ'dddddd d!d"Z(dS )#    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericTypeVarIteratorAsyncIteratorcast)SelfProtocol	TypeGuardoverride
get_originruntime_checkable   )is_dictextract_type_var_from_base)	AnthropicAsyncAnthropic_Tc                   @  s    e Zd ZedddddZdS )_SyncStreamMetar   boolinstancereturnc                 C  s.   ddl m} t||r*tjdtdd dS dS )Nr   )MessageStreamzUsing `isinstance()` to check if a `MessageStream` object is an instance of `Stream` is deprecated & will be removed in the next major version   
stacklevelTF)lib.streamingr   
isinstancewarningswarnDeprecationWarning)selfr   r    r&   W/home/ankuromar296_gmail_com/.local/lib/python3.8/site-packages/anthropic/_streaming.py__instancecheck__   s    
z!_SyncStreamMeta.__instancecheck__N__name__
__module____qualname__r   r(   r&   r&   r&   r'   r      s   r   c                   @  s   e Zd ZU dZded< ded< ddddd	d
dZddddZddddZddddZddddZ	ddddZ
ddddddd Zddd!d"Zd#S )$StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseSSEBytesDecoder_decodertype[_T]r   Nonecast_tor/   clientr   c                C  s*   || _ || _|| _| | _|  | _d S Nr/   _cast_to_clientZ_make_sse_decoderr1   
__stream__	_iteratorr%   r5   r/   r6   r&   r&   r'   __init__3   s
    
zStream.__init__r   r   c                 C  s
   | j  S r7   )r<   __next__r%   r&   r&   r'   r@   @   s    zStream.__next__zIterator[_T]c                 c  s   | j D ]
}|V  qd S r7   r<   r%   itemr&   r&   r'   __iter__C   s    
zStream.__iter__Iterator[ServerSentEvent]c                 c  s   | j | j E d H  d S r7   )r1   
iter_bytesr/   rA   r&   r&   r'   _iter_eventsG   s    zStream._iter_eventsc           
   	   c  s8  t t| j}| j}| jj}|  }|D  ]}|jdkrJ|| ||dV  |jdks|jdks|jdks|jdks|jdks|jdkr| }t	|rd	|kr|j|d	< ||||dV  |jd
krq&|jdkr&|j
}z| }| }W n* tk
r   |j
p
d|j }Y nX | jj||| jdq&|D ]}	q,d S N
completion)datar5   r/   message_startZmessage_deltaZmessage_stopZcontent_block_startZcontent_block_deltaZcontent_block_stoptypeZpingerrorzError code: )bodyr/   r
   r   r9   r/   r:   Z_process_response_datarH   eventjsonr   rK   	Exceptionstatus_codeZ_make_status_error
r%   r5   r/   Zprocess_dataiteratorsserK   rO   err_msgZ_sser&   r&   r'   r;   J   sN    





zStream.__stream__r   c                 C  s   | S r7   r&   rA   r&   r&   r'   	__enter__x   s    zStream.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbr   c                 C  s   |    d S r7   closer%   r^   r_   r`   r&   r&   r'   __exit__{   s    zStream.__exit__c                 C  s   | j   dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r/   rb   rA   r&   r&   r'   rb      s    zStream.closeN)r*   r+   r,   __doc____annotations__r>   r@   rE   rH   r;   rY   rd   rb   r&   r&   r&   r'   r-   ,   s   
.r-   )	metaclassc                   @  s    e Zd ZedddddZdS )_AsyncStreamMetar   r   r   c                 C  s.   ddl m} t||r*tjdtdd dS dS )Nr   )AsyncMessageStreamzUsing `isinstance()` to check if a `AsyncMessageStream` object is an instance of `AsyncStream` is deprecated & will be removed in the next major versionr   r   TF)r    rj   r!   r"   r#   r$   )r%   r   rj   r&   r&   r'   r(      s    
z"_AsyncStreamMeta.__instancecheck__Nr)   r&   r&   r&   r'   ri      s   ri   c                   @  s   e Zd ZU dZded< ded< ddddd	d
dZddddZddddZddddZddddZ	ddddZ
ddddddd Zddd!d"Zd#S )$AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r.   r/   zSSEDecoder | SSEBytesDecoderr1   r2   r   r3   r4   c                C  s*   || _ || _|| _| | _|  | _d S r7   r8   r=   r&   r&   r'   r>      s
    
zAsyncStream.__init__r   r?   c                   s   | j  I d H S r7   )r<   	__anext__rA   r&   r&   r'   rl      s    zAsyncStream.__anext__zAsyncIterator[_T]c                 C s    | j 2 z3 d H W }|V  q6 d S r7   rB   rC   r&   r&   r'   	__aiter__   s    zAsyncStream.__aiter__AsyncIterator[ServerSentEvent]c                 C s,   | j | j 2 z3 d H W }|V  q6 d S r7   )r1   aiter_bytesr/   )r%   rW   r&   r&   r'   rH      s    zAsyncStream._iter_eventsc           
   	   C sL  t t| j}| j}| jj}|  }|2 z3 d H W }|jdkrR|| ||dV  |jdks|jdks|jdks|jdks|jdks|jdkr| }t	|rd	|kr|j|d	< ||||dV  |jd
krq&|jdkr&|j
}z| }| }W n* tk
r   |j
pd|j }Y nX | jj||| jdq&6 |2 z3 d H W }	q66 d S rI   rP   rU   r&   r&   r'   r;      sN    





zAsyncStream.__stream__r   c                   s   | S r7   r&   rA   r&   r&   r'   
__aenter__   s    zAsyncStream.__aenter__rZ   r[   r\   r]   c                   s   |   I d H  d S r7   ra   rc   r&   r&   r'   	__aexit__   s    zAsyncStream.__aexit__c                   s   | j  I dH  dS re   )r/   acloserA   r&   r&   r'   rb      s    zAsyncStream.closeN)r*   r+   r,   rf   rg   r>   rl   rm   rH   r;   rp   rq   rb   r&   r&   r&   r'   rk      s   
.rk   c                   @  s   e Zd ZdddddddddddddZedd	d
dZedd	ddZedd	ddZedd	ddZdd	ddZ	e
dd	ddZdS )ServerSentEventNrQ   rK   idretry
str | None
int | Noner3   )rQ   rK   ru   rv   r   c                C  s,   |d krd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r%   rQ   rK   ru   rv   r&   r&   r'   r>     s    
zServerSentEvent.__init__r?   c                 C  s   | j S r7   )r|   rA   r&   r&   r'   rQ     s    zServerSentEvent.eventc                 C  s   | j S r7   )rz   rA   r&   r&   r'   ru     s    zServerSentEvent.idc                 C  s   | j S r7   )r}   rA   r&   r&   r'   rv     s    zServerSentEvent.retrystrc                 C  s   | j S r7   )r{   rA   r&   r&   r'   rK     s    zServerSentEvent.datar   c                 C  s   t | jS r7   )rR   loadsrK   rA   r&   r&   r'   rR   #  s    zServerSentEvent.jsonc              	   C  s&   d| j  d| j d| j d| j d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)rt   rA   r&   r&   r'   __repr__&  s    zServerSentEvent.__repr__)r*   r+   r,   r>   propertyrQ   ru   rv   rK   rR   r   r   r&   r&   r&   r'   rs     s    rs   c                   @  s   e Zd ZU ded< ded< ded< ded< dd	d
dZdddddZdddddZdddddZdddddZdddddZ	dS )
SSEDecoderz	list[str]r{   rw   r|   rx   r}   _last_event_idr3   r?   c                 C  s   d | _ g | _d | _d | _d S r7   )r|   r{   r   r}   rA   r&   r&   r'   r>   1  s    zSSEDecoder.__init__Iterator[bytes]rF   rV   r   c                 c  s@   |  |D ]0}| D ]"}|d}| |}|r|V  qq
dS )^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder%   rV   chunkZraw_linelinerW   r&   r&   r'   rG   7  s    

zSSEDecoder.iter_bytesc                 c  sJ   d}|D ]2}|j ddD ] }||7 }|dr|V  d}qq|rF|V  dS )^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunks    Tkeependss   s   

s   

Nr   endswithr%   rV   rK   r   r   r&   r&   r'   r   A  s    
zSSEDecoder._iter_chunksAsyncIterator[bytes]rn   c                 C sJ   |  |2 z83 dH W }| D ]"}|d}| |}|r|V  qq
6 dS )r   Nr   )_aiter_chunksr   r   r   r&   r&   r'   ro   M  s    

zSSEDecoder.aiter_bytesc                 C sT   d}|2 z:3 dH W }|j ddD ] }||7 }|dr |V  d}q q6 |rP|V  dS )r   r   NTr   r   r   r   r&   r&   r'   r   W  s    

zSSEDecoder._aiter_chunksr~   zServerSentEvent | None)r   r   c              	   C  s  |sX| j s$| js$| js$| jd kr$d S t| j d| j| j| jd}d | _ g | _d | _|S |drfd S |d\}}}|dr|dd  }|dkr|| _ nb|dkr| j| nL|dkrd	|krq|| _n2|d
krzt	|| _W q t
tfk
r   Y qX n d S )N
rt   : r   rQ   rK   ru    rv   )r|   r{   r   r}   rs   join
startswith	partitionappendint	TypeError
ValueError)r%   r   rW   	fieldname_valuer&   r&   r'   r   c  s@    


zSSEDecoder.decodeN)
r*   r+   r,   rg   r>   rG   r   ro   r   r   r&   r&   r&   r'   r   +  s   


r   c                   @  s,   e Zd ZdddddZddddd	Zd
S )r0   r   rF   r   c                 C  s   dS )r   Nr&   r%   rV   r&   r&   r'   rG     s    zSSEBytesDecoder.iter_bytesr   rn   c                 C  s   dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr&   r   r&   r&   r'   ro     s    zSSEBytesDecoder.aiter_bytesN)r*   r+   r,   rG   ro   r&   r&   r&   r'   r0     s   r0   rM   z;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]])typr   c                 C  s$   t | p
| }t|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-   rk   )r   originr&   r&   r'   is_stream_class_type  s    r   )failure_messagerw   )
stream_clsr   r   c                C  s*   ddl m}m} t| dtd||f|d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-   rk   r   ztuple[type, ...])indexZgeneric_basesr   )Z_base_clientr-   rk   r   r
   )r   r   r-   rk   r&   r&   r'   extract_stream_chunk_type  s    r   ))
__future__r   abcrR   r   r"   typesr   typingr   r   r   r   r   r	   r
   Ztyping_extensionsr   r   r   r   r   r   Zhttpx_utilsr   r   r:   r   r   r   ABCMetar   r-   ri   rk   rs   r   r0   r   r   r&   r&   r&   r'   <module>   s.   $ `a)i
	