
    QЦi                        % S SK JrJr  S SKJr  S SKJrJrJrJ	r	  S SK
Jr  SSS0SS0SS0SS S	.S
.S.r\\\4   \S'    " S S\5      rS\S-  S\S-  4S jr " S S\5      rSSSSSS.S\\S-  \" S5      4   S\\S-  \" S5      4   S\\S-  \" S5      4   S\\S-  \" S5      4   S\\S-  \" S5      4   S\4S  jjrS!rS"r\\S#'   g)$    )	AnnotatedAny)Doc)AfterValidator	BaseModelFieldmodel_validator)StreamingResponseobjecttypestringinteger)r   minimum)dataeventidretry)r   
properties_SSE_EVENT_SCHEMAc                       \ rS rSrSrSrSrg)EventSourceResponse   a  Streaming response with `text/event-stream` media type.

Use as `response_class=EventSourceResponse` on a *path operation* that uses `yield`
to enable Server Sent Events (SSE) responses.

Works with **any HTTP method** (`GET`, `POST`, etc.), which makes it compatible
with protocols like MCP that stream SSE over `POST`.

The actual encoding logic lives in the FastAPI routing layer. This class
serves mainly as a marker and sets the correct `Content-Type`.
ztext/event-stream N)__name__
__module____qualname____firstlineno____doc__
media_type__static_attributes__r       J/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/fastapi/sse.pyr   r      s    
 %Jr!   r   vNreturnc                 .    U b  SU ;   a  [        S5      eU $ )N z)SSE 'id' must not contain null characters)
ValueError)r#   s    r"   _check_id_no_nullr(   $   s    }DEEHr!   c                   D   \ rS rSr% SrSr\\\" S5      4   \	S'   Sr
\\S-  \" S5      4   \	S'   Sr\\S-  \" S5      4   \	S	'   Sr\\S-  \" \5      \" S
5      4   \	S'   Sr\\S-  \" SS9\" S5      4   \	S'   Sr\\S-  \" S5      4   \	S'   \" SS9SS j5       rSrg)ServerSentEvent*   aL  Represents a single Server-Sent Event.

When `yield`ed from a *path operation function* that uses
`response_class=EventSourceResponse`, each `ServerSentEvent` is encoded
into the [SSE wire format](https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream)
(`text/event-stream`).

If you yield a plain object (dict, Pydantic model, etc.) instead, it is
automatically JSON-encoded and sent as the `data:` field.

All `data` values **including plain strings** are JSON-serialized.

For example, `data="hello"` produces `data: "hello"` on the wire (with
quotes).
NaB  
            The event payload.

            Can be any JSON-serializable value: a Pydantic model, dict, list,
            string, number, etc. It is **always** serialized to JSON: strings
            are quoted (`"hello"` becomes `data: "hello"` on the wire).

            Mutually exclusive with `raw_data`.
            r   aQ  
            Raw string to send as the `data:` field **without** JSON encoding.

            Use this when you need to send pre-formatted text, HTML fragments,
            CSV lines, or any non-JSON payload. The string is placed directly
            into the `data:` field as-is.

            Mutually exclusive with `data`.
            raw_dataz
            Optional event type name.

            Maps to `addEventListener(event, ...)` on the browser. When omitted,
            the browser dispatches on the generic `message` event.
            r   z
            Optional event ID.

            The browser sends this value back as the `Last-Event-ID` header on
            automatic reconnection. **Must not contain null (`\0`) characters.**
            r   r   )gez
            Optional reconnection time in **milliseconds**.

            Tells the browser how long to wait before reconnecting after the
            connection is lost. Must be a non-negative integer.
            r   z
            Optional comment line(s).

            Comment lines start with `:` in the SSE wire format and are ignored by
            `EventSource` clients. Useful for keep-alive pings to prevent
            proxy/load-balancer timeouts.
            commentafter)modec                 P    U R                   b  U R                  b  [        S5      eU $ )NzCannot set both 'data' and 'raw_data' on the same ServerSentEvent. Use 'data' for JSON-serialized payloads or 'raw_data' for pre-formatted strings.)r   r,   r'   )selfs    r"   _check_data_exclusive%ServerSentEvent._check_data_exclusive   s.    99 T]]%>; 
 r!   r   )r$   r*   )r   r   r   r   r   r   r   r   r   __annotations__r,   strr   r   r   r(   r   intr   r.   r	   r3   r    r   r!   r"   r*   r*   *   sF   : 	 	)
	
	 6 	 id

	
	 0 	 
9d
	
	
 
, 	 	d
()	
			 . 	 
9d
	
		 . 	 Yd
	
		  '" #r!   r*   )data_strr   r   r   r.   r8   zQ
            Pre-serialized data string to use as the `data:` field.
            r   zD
            Optional event type name (`event:` field).
            r   z:
            Optional event ID (`id:` field).
            r   zV
            Optional reconnection time in milliseconds (`retry:` field).
            r.   z@
            Optional comment line(s) (`:` prefix).
            c                    / nUb+  UR                  5        H  nUR                  SU 35        M     Ub  UR                  SU 35        U b+  U R                  5        H  nUR                  SU 35        M     Ub  UR                  SU 35        Ub  UR                  SU 35        UR                  S5        UR                  S5        SR                  U5      R                  S5      $ )	z|Build SSE wire-format bytes from **pre-serialized** data.

    The result always ends with `

` (the event terminator).
    z: zevent: zdata: zid: zretry:  
zutf-8)
splitlinesappendjoinencode)r8   r   r   r   r.   lineslines          r"   format_sse_eventrB      s    ^ E&&(DLL2dV% ) wug&''')DLL6$) * 
~tB4[!wug&'	LL	LL99U""7++r!   s   : ping

g      .@_PING_INTERVAL)typingr   r   annotated_docr   pydanticr   r   r   r	   starlette.responsesr
   r   dictr6   r5   r   r(   r*   r7   bytesrB   KEEPALIVE_COMMENTrC   floatr   r!   r"   <module>rL      s   ! !  F F 1
 "(#x #2	% 4S> %+ % t d
 ei eb 	 	 	 	 	SD,d
	
	D, d
	
	D,$ 	d
	
		%D,4 d
	
	5D,D d
	
	ED,T UD,P "   r!   