Ë
    Å[êj  ã                  ól   — d Z 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	 ddl
mZ ddlmZ ddlmZ d
d	„Zy)u(  
CyberBrain26 LAB â€” FÃ¡ze 3F + 3G integrace do webapp.py
=======================================================

Tento modul NEMODIFIKUJE stÃ¡vajÃ­cÃ­ webapp.py. Pouze se zaregistruje
pÅ™es `register(app)` a pÅ™idÃ¡:

- 3F-2: publikovÃ¡nÃ­ systÃ©movÃ½ch udÃ¡lostÃ­ (startup, enqueue)
- 3F-3: SSE endpointy /v1/events/recent a /v1/events/stream
- 3G:   task queue endpointy /v1/queue/status a /v1/queue/enqueue

PouÅ¾itÃ­ na konci webapp.py:

    from cyberbrain26.core.webapp_phase3fg import register as register_phase3fg
    register_phase3fg(app)
é    )ÚannotationsN)ÚAny)ÚFastAPIÚRequest)ÚStreamingResponse)ÚEventBus)Ú	TaskQueuec                óÐ  ‡‡— t        d¬«      Št        d‰¬«      Š‰| j                  _        ‰| j                  _        | j                  d«      dˆˆfd„«       }| j                  ddg¬	«      dˆfd
„«       }| j                  ddg¬	«      dˆˆfd„«       }| j                  ddg¬	«      ddˆfd„«       }| j                  ddg¬	«      dˆfd„«       }ddˆfd„}|| j                  _        y )Nzdata-lab/events/events.jsonl)Ústorage_pathé   )Úmax_concurrentÚ	event_busÚstartupc               “  ó\   •K  — ‰j                  d«       ‰ j                  dddddœ«       y ­w)Nr   zsystem.startedz
webapp-labiô  Ú3F)ÚserviceÚportÚphase)ÚstartÚpublish)ÚbusÚqueues   €€úG/home/oem/CyberBrain26-unified/src/cyberbrain26/core/webapp_phase3fg.pyÚ_phase3fg_startupz#register.<locals>._phase3fg_startup)   s+   øè ø€ à�‰�AŒØ�‰ØØ$¨d¸TÑBõ	
ùs   ƒ),z/v1/queue/statusr   )Útagsc               “  ó2   •K  — d‰ j                  «       dœS ­w)NÚok)Ústatusr   )Ú
get_status)r   s   €r   Úqueue_statuszregister.<locals>.queue_status4   s   øè ø€ à¨×)9Ñ)9Ó);Ñ<Ð<ùs   ƒz/v1/queue/enqueuec              “  ór  •K  — | j                  «       ƒ d {  –—† }|j                  d«      xs& dt        j                  «       j	                  «       d›�}|j                  di «      }‰j                  ||«      ƒ d {  –—†  ‰j                  d|t        |j                  «       «      dœ«       d|dd	œS 7 Œ›7 Œ8­w)
NÚtask_idÚtask_z.0fÚpayloadztask.enqueued)r"   Úpayload_keysr   zTask vlozen do fronty)r   r"   Úmessage)	ÚjsonÚgetÚasyncioÚget_event_loopÚtimeÚenqueuer   ÚlistÚkeys)ÚrequestÚdatar"   r$   r   r   s       €€r   Úqueue_enqueuezregister.<locals>.queue_enqueue8   s    øè ø€ à—\‘\“^×#ˆØ—(‘(˜9Ó%ÒV¨5´×1GÑ1GÓ1I×1NÑ1NÓ1PÐQTÐ0UÐ)VˆØ—(‘(˜9 bÓ)ˆØ�m‰m˜G WÓ-×-Ð-Ø�‰�O°Ì$ÈwÏ|É|Ë~ÓJ^Ñ%_Ô`Ø¨7Ð?VÑWÐWð $øð 	.ús"   ƒB7—B3˜A$B7Á<B5Á=7B7Â5B7z/v1/events/recentÚeventsc              “  ó4   •K  — d‰j                  | «      dœS ­w)Nr   )r   r2   )Ú
get_recent)Úlimitr   s    €r   Úevents_recentzregister.<locals>.events_recentD   s   øè ø€ à¨#¯.©.¸Ó*?Ñ@Ð@ùs   ƒz/v1/events/streamc               “  óh   •‡K  — ‰j                  «       Šˆˆfd„} t         | «       dddddœ¬«      S ­w)Nc                ó  •K  — 	 d­–— 	 	 t        j                  ‰j                  «       d¬«      ƒ d {  –—† } dt        j                  | d¬«      › d�­–— ŒM7 Œ## t
        $ r d­–— Y Œw xY w# ‰j                  ‰«       w xY w­w)	Nz: connected

g      .@)Útimeoutzdata: F)Úensure_asciiz

z: ping

)r)   Úwait_forr(   r'   ÚdumpsÚTimeoutErrorÚunregister_queue)Úeventr   Úsubscriber_queues    €€r   Úevent_generatorz8register.<locals>.events_stream.<locals>.event_generatorL   sƒ   øè ø€ ð7à'Ó'Øð+Ü&-×&6Ñ&6Ð7G×7KÑ7KÓ7MÐW[Ô&\× \˜Ø &¤t§z¡z°%ÀeÔ'LÐ&MÈTÐRÓRð à \ùä'ò +à*Õ*ð+ûð ×$Ñ$Ð%5Õ6üsI   ƒB…A. Œ(A ´Aµ"A ÁA. ÁA ÁA+Á(A. Á*A+Á+A. Á.BÂBztext/event-streamzno-cacheÚnoz
keep-alive)zCache-ControlzX-Accel-BufferingÚ
Connection)Ú
media_typeÚheaders)Úregister_queuer   )rA   r@   r   s    @€r   Úevents_streamzregister.<locals>.events_streamH   sA   ùè ø€ à*-×*<Ñ*<Ó*>Ðõ	7ô !ÙÓØ*à!+Ø%)Ø*ñô
ð 	
ùs   „.2c                ó2   •— ‰j                  | |xs i «       y)u4   PomocnÃ¡ funkce pro publish z jakÃ©hokoli endpointu.N)r   )Ú
event_typer$   r   s     €r   Úpublish_eventzregister.<locals>.publish_eventg   s   ø€ à�‰�J ¢¨2Õ.ó    )ÚreturnÚNone)rL   údict[str, Any])r/   r   rL   rN   )é2   )r5   ÚintrL   rN   )rL   r   )N)rI   Ústrr$   zdict | NonerL   rM   )	r   r	   Ústater   Ú
task_queueÚon_eventr(   ÚpostrJ   )	Úappr   r    r1   r6   rG   rJ   r   r   s	          @@r   ÚregisterrW      sö   ù€ ä
Ð >Ô
?€CÜ Q°#Ô6€Eà€C‡I�IÔØ €C‡I�IÔð
 	‡\�\�)Óõ
ó ð
ð 	‡W�WÐ w i€WÓ0ô=ó 1ð=ð 	‡X�XÐ!¨¨	€XÓ2õXó 3ðXð 	‡W�WÐ ¨ z€WÓ2õAó 3ðAð 	‡W�WÐ ¨ z€WÓ2ô
ó 3ð
ö</ð ,€C‡I�IÕrK   )rV   r   rL   rM   )Ú__doc__Ú
__future__r   r)   r'   Útypingr   Úfastapir   r   Úfastapi.responsesr   Úcyberbrain26.core.event_busr   Úcyberbrain26.core.task_queuer	   rW   © rK   r   ú<module>r`      s*   ðñõ  #ã Û Ý ç $Ý /å 0Ý 2ôM,rK   