Ë
    cQêj�?  ã                   ó–  — d 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 ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ  ej$                  ej&                  ¬	«        ej(                  e«      Z ed
dddd¬«      Zej1                  e
dgddgdg¬«       defd„Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d e«      Z G d!„ d"e«      Z  G d#„ d$e«      Z!ejE                  d%e!¬&«      de!fd'„«       Z#ejE                  d(e!¬&«      de!fd)„«       Z$ejK                  d*e ¬&«      d+ede fd,„«       Z&ejE                  d*e ¬&«      	 	 	 	 	 	 dRd-e'd.e'd/e'd0e'dz  d1e(d2e(d3e'de fd4„«       Z)ejK                  d5e ¬&«      d+ede fd6„«       Z*ejE                  d5e ¬&«      	 	 	 	 	 	 	 	 	 	 	 dSd-e'd.e'd/e'd0e'dz  d1e(d2e(d3e'd7e'dz  d8e'dz  d9e'dz  d:e'dz  d;e'dz  de fd<„«       Z+ejK                  d=e ¬&«      d+ede fd>„«       Z,ejE                  d=e ¬&«      	 	 	 	 	 	 dRd-e'd.e'd/e'd0e'dz  d1e(d2e(d3e'de fd?„«       Z-ejK                  d@e ¬&«      d+ede fdA„«       Z.ejE                  d@e ¬&«      	 	 	 	 	 	 	 	 	 dTd-e'd.e'd/e'd0e'dz  d1e(d2e(d3e'dBe'dz  dCe'dz  dDe'dz  de fdE„«       Z/ejK                  dFe ¬&«      d+ede fdG„«       Z0ejE                  dFe ¬&«      	 	 	 dUd-e'd1e(d2e(d3e'de f
dH„«       Z1ejK                  dI«      d+ede2e'e'e3z  f   fdJ„«       Z4ejE                  dI«      dVdKe'dLe'de2e'e'e3z  f   fdM„«       Z5edNk(  rddl6Z6 e6jn                  edOdP¬Q«       yy)Wz!FastAPI application for DDGS API.é    N)ÚAny)ÚFastAPIÚHTTPException)ÚCORSMiddleware)Ú	BaseModelÚField)ÚDDGS)Ú_expand_proxy_tb_alias)ÚlevelúDDGS APIzFA FastAPI wrapper for the DDGS (Dux Distributed Global Search) libraryú1.0.0z/docsz/redoc)ÚtitleÚdescriptionÚversionÚdocs_urlÚ	redoc_urlÚ*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersÚreturnc                  óf   — t        t        t        j                  j	                  d«      «      ¬«      S )zACreate a DDGS instance with proxy configuration from environment.Ú
DDGS_PROXY)Úproxy)r	   r
   ÚosÚenvironÚget© ó    úX/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/ddgs/api_server/api.pyÚ	_get_ddgsr"   &   s    € äÔ,¬R¯Z©Z¯^©^¸LÓ-IÓJÔKÐKr    c                   óð   — e Zd ZU dZ edd¬«      Zeed<    edd¬«      Zeed<    ed	d
¬«      Z	eed<    edd¬«      Z
edz  ed<    edd¬«      Zedz  ed<    edd¬«      Zeed<    edd¬«      Zeed<   y)ÚTextSearchRequestú$Request model for search operations..úSearch query©r   Úqueryúus-enú-Region for search (e.g., us-en, uk-en, ru-ru)ÚregionÚmoderateú'Safe search setting (on, moderate, off)Ú
safesearchNú,Time limit (d, w, m, y) or custom date rangeÚ	timelimité
   ú#Maximum number of results to returnÚmax_resultsé   úPage number of resultsÚpageÚautoú)Search backend (auto, or specific engine)Úbackend©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   ÚstrÚ__annotations__r+   r.   r0   r3   Úintr6   r9   r   r    r!   r$   r$   ,   óŠ   … Ù.á�s¨Ô7€Eˆ3Ó7Ù˜Ð-\Ô]€FˆCÓ]Ù˜JÐ4]Ô^€J�Ó^Ù! $Ð4bÔc€Iˆs�T‰zÓcÙ# BÐ4YÔZ€K��t‘ÓZÙ�aÐ%=Ô>€Dˆ#Ó>Ù˜Ð-XÔY€GˆSÔYr    r$   c                   ó¤  — e Zd ZU dZ edd¬«      Zeed<    edd¬«      Zeed<    ed	d
¬«      Z	eed<    edd¬«      Z
edz  ed<    edd¬«      Zedz  ed<    edd¬«      Zeed<    edd¬«      Zeed<    edd¬«      Zedz  ed<    edd¬«      Zedz  ed<    edd¬«      Zedz  ed<    edd¬«      Zedz  ed<    edd ¬«      Zedz  ed!<   y)"ÚImagesSearchRequestz*Request model for image search operations..zImage search queryr'   r(   r)   r*   r+   r,   r-   r.   Nr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   z,Image size (Small, Medium, Large, Wallpaper)ÚsizeziImage color (Monochrome, Red, Orange, Yellow, Green, Blue, Purple, Pink, Brown, Black, Gray, Teal, White)Úcolorz3Image type (photo, clipart, gif, transparent, line)Ú
type_imagez!Image layout (Square, Tall, Wide)ÚlayoutzQImage license (any, Public, Share, ShareCommercially, Modify, ModifyCommercially)Úlicense_image)r;   r<   r=   r>   r   r(   r?   r@   r+   r.   r0   r3   rA   r6   r9   rE   rF   rG   rH   rI   r   r    r!   rD   rD   8   s  … Ù4á�sÐ(<Ô=€Eˆ3Ó=Ù˜Ð-\Ô]€FˆCÓ]Ù˜JÐ4]Ô^€J�Ó^Ù! $Ð4bÔc€Iˆs�T‰zÓcÙ# BÐ4YÔZ€K��t‘ÓZÙ�aÐ%=Ô>€Dˆ#Ó>Ù˜Ð-XÔY€GˆSÓYÙ˜TÐ/]Ô^€Dˆ#�‰*Ó^ÙØØô€Eˆ3�‰:ó ñ # 4Ð5jÔk€J��d‘
ÓkÙ˜tÐ1TÔU€FˆC�$‰JÓUÙ %ØÐmô!€M�3˜‘:ô r    rD   c                   óð   — e Zd ZU dZ edd¬«      Zeed<    edd¬«      Zeed<    ed	d
¬«      Z	eed<    edd¬«      Z
edz  ed<    edd¬«      Zedz  ed<    edd¬«      Zeed<    edd¬«      Zeed<   y)ÚNewsSearchRequestr%   .r&   r'   r(   r)   r*   r+   r,   r-   r.   Nr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r   r    r!   rK   rK   N   rB   r    rK   c                   ó\  — e Zd ZU dZ edd¬«      Zeed<    edd¬«      Zeed<    ed	d
¬«      Z	eed<    edd¬«      Z
edz  ed<    edd¬«      Zedz  ed<    edd¬«      Zeed<    edd¬«      Zeed<    edd¬«      Zedz  ed<    edd¬«      Zedz  ed<    edd¬«      Zedz  ed<   y)ÚVideosSearchRequestz*Request model for video search operations..zVideo search queryr'   r(   r)   r*   r+   r,   r-   r.   Nz)Time limit (d, w, m) or custom date ranger0   r1   r2   r3   r4   r5   r6   r7   r8   r9   z!Video resolution (high, standard)Ú
resolutionz$Video duration (short, medium, long)Údurationz'Video license (creativeCommon, youtube)Úlicense_videos)r;   r<   r=   r>   r   r(   r?   r@   r+   r.   r0   r3   rA   r6   r9   rN   rO   rP   r   r    r!   rM   rM   Z   sÍ   … Ù4á�sÐ(<Ô=€Eˆ3Ó=Ù˜Ð-\Ô]€FˆCÓ]Ù˜JÐ4]Ô^€J�Ó^Ù! $Ð4_Ô`€Iˆs�T‰zÓ`Ù# BÐ4YÔZ€K��t‘ÓZÙ�aÐ%=Ô>€Dˆ#Ó>Ù˜Ð-XÔY€GˆSÓYÙ" 4Ð5XÔY€J��d‘
ÓYÙ  Ð3YÔZ€Hˆc�D‰jÓZÙ!& tÐ9bÔ!c€N�C˜$‘JÔcr    rM   c                   ó�   — e Zd ZU dZ edd¬«      Zeed<    edd¬«      Ze	dz  ed	<    ed
d¬«      Z
e	ed<    edd¬«      Zeed<   y)ÚBooksSearchRequestz)Request model for book search operations..zBooks search queryr'   r(   r1   r2   Nr3   r4   r5   r6   r7   r8   r9   )r;   r<   r=   r>   r   r(   r?   r@   r3   rA   r6   r9   r   r    r!   rR   rR   i   sQ   … Ù3á�sÐ(<Ô=€Eˆ3Ó=Ù# BÐ4YÔZ€K��t‘ÓZÙ�aÐ%=Ô>€Dˆ#Ó>Ù˜Ð-XÔY€GˆSÔYr    rR   c                   óN   — e Zd ZU dZ edd¬«      Zeed<    edd¬«      Zeed<   y	)
ÚExtractRequestz)Request model for URL content extraction..zURL to extract content fromr'   ÚurlÚtext_markdownz;Format: text_markdown, text_plain, text_rich, text, contentÚformatN)	r;   r<   r=   r>   r   rU   r?   r@   rW   r   r    r!   rT   rT   r   s)   … Ù3á�SÐ&CÔD€CˆÓDÙ˜Ð5rÔs€FˆCÔsr    rT   c                   ó,   — e Zd ZU dZeeeef      ed<   y)ÚSearchResponsez%Response model for search operations.ÚresultsN)	r;   r<   r=   r>   ÚlistÚdictr?   r   r@   r   r    r!   rY   rY   y   s   … Ù/à�$�s˜C�x‘.Ñ!Ô!r    rY   c                   ó0   — e Zd ZU dZeed<   eed<   eed<   y)ÚHealthResponsez Response model for health check.Ústatusr   ÚserviceN)r;   r<   r=   r>   r?   r@   r   r    r!   r^   r^      s   … Ù*àƒKØƒLØ„Lr    r^   ú/)Úresponse_modelc               ƒ   ó&   K  — t        ddd¬«      S ­w)z-Root endpoint with basic service information.Úhealthyr   r   ©r_   r   r`   ©r^   r   r    r!   Úrootrg   ‡   ó   è ø€ ô  °GÀZÔPÐPùó   ‚z/healthc               ƒ   ó&   K  — t        ddd¬«      S ­w)zHealth check endpoint.rd   r   r   re   rf   r   r    r!   Úhealth_checkrk   �   rh   ri   z/search/textÚrequestc              ƒ   óÚ   ‡ K  — 	 t        j                  ˆ fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)zPerform a text search.c            	      óÐ   •— t        «       j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  ‰ j                  ¬«      S ©N)r(   r+   r.   r0   r3   r6   r9   )	r"   Útextr(   r+   r.   r0   r3   r6   r9   ©rl   s   €r!   ú<lambda>zsearch_text.<locals>.<lambda>˜   óP   ø€ ”I“K×$Ñ$Ø—m‘mØ—~‘~Ø"×-Ñ-Ø!×+Ñ+Ø#×/Ñ/Ø—\‘\ØŸ™ð %ó € r    N©rZ   zError in text search: %séô  úSearch failed: ©Ústatus_codeÚdetail©ÚasyncioÚ	to_threadrY   Ú	ExceptionÚloggerÚwarningr   ©rl   rZ   Úes   `  r!   Úsearch_textr‚   “   sr   øè ø€ ðTÜ×)Ñ)óó

÷ 

ˆô  gÔ.Ð.ð

ùô ò TÜ�‰Ð1°1Ô5Ü¨°oÀaÀUÐ4KÔLÐRSÐSûðTüó0   ƒA+…3  1¡3 °A+±3 ³	A(¼'A#Á#A(Á(A+r(   r+   r.   r0   r3   r6   r9   c           	   ƒ   óò   ‡ ‡‡‡‡‡‡K  — 	 t        j                  ˆˆˆˆ ˆˆˆfd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z&Perform a text search via GET request.c            	      óD   •— t        «       j                  ‰‰‰‰‰‰‰ ¬«      S ro   )r"   rp   ©r9   r3   r6   r(   r+   r.   r0   s   €€€€€€€r!   rr   z!search_text_get.<locals>.<lambda>¶   ó.   ø€ ”I“K×$Ñ$ØØØ%Ø#Ø'ØØð %ó € r    Nrt   zError in text search (GET): %sru   rv   rw   rz   ©	r(   r+   r.   r0   r3   r6   r9   rZ   r�   s	   ```````  r!   Úsearch_text_getr‰   ©   sw   þè ø€ ðTÜ×)Ñ)÷ñ ó

÷ 

ˆô  gÔ.Ð.ð

ùô ò TÜ�‰Ð7¸Ô;Ü¨°oÀaÀUÐ4KÔLÐRSÐSûðTüó1   ‰A7‹!? ¬=­? ¼A7½? ¿	A4Á'A/Á/A4Á4A7z/search/imagesc              ƒ   óÚ   ‡ K  — 	 t        j                  ˆ fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)zPerform an image search.c                  ó>  •— t        «       j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ¬«      S ©N)r(   r+   r.   r0   r3   r6   r9   rE   rF   rG   rH   rI   )r"   Úimagesr(   r+   r.   r0   r3   r6   r9   rE   rF   rG   rH   rI   rq   s   €r!   rr   zsearch_images.<locals>.<lambda>Ì   sw   ø€ ”I“K×&Ñ&Ø—m‘mØ—~‘~Ø"×-Ñ-Ø!×+Ñ+Ø#×/Ñ/Ø—\‘\ØŸ™Ø—\‘\Ø—m‘mØ"×-Ñ-Ø—~‘~Ø%×3Ñ3ð 'ó € r    Nrt   zError in image search: %sru   úImage search failed: rw   rz   r€   s   `  r!   Úsearch_imagesr�   Ç   ss   øè ø€ ðZÜ×)Ñ)óó
÷ 
ˆô"  gÔ.Ð.ð#
ùô$ ò ZÜ�‰Ð2°AÔ6Ü¨Ð6KÈAÈ5Ð4QÔRÐXYÐYûðZürƒ   rE   rF   rG   rH   rI   c              ƒ   ó  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡K  — 	 t        j                  ˆˆˆ
ˆˆˆˆ ˆˆˆˆˆ	fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z(Perform an image search via GET request.c                  óN   •— t        «       j                  ‰‰‰‰
‰‰‰ ‰	‰‰‰‰¬«      S r�   )r"   rŽ   )r9   rF   rH   rI   r3   r6   r(   r+   r.   rE   r0   rG   s   €€€€€€€€€€€€r!   rr   z#search_images_get.<locals>.<lambda>ô   s=   ø€ ”I“K×&Ñ&ØØØ%Ø#Ø'ØØØØØ%ØØ+ð 'ó € r    Nrt   zError in image search (GET): %sru   r�   rw   rz   )r(   r+   r.   r0   r3   r6   r9   rE   rF   rG   rH   rI   rZ   r�   s   ````````````  r!   Úsearch_images_getr“   â   sy   ÿûè ø€ ð ZÜ×)Ñ)÷ö ó
÷ 
ˆô"  gÔ.Ð.ð#
ùô$ ò ZÜ�‰Ð8¸!Ô<Ü¨Ð6KÈAÈ5Ð4QÔRÐXYÐYûðZüs8   ŽB�&A	 ¶A·A	 ÁBÁA	 Á		A>Á'A9Á9A>Á>Bz/search/newsc              ƒ   óÚ   ‡ K  — 	 t        j                  ˆ fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)zPerform a news search.c            	      óÐ   •— t        «       j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  ‰ j                  ¬«      S ro   )	r"   Únewsr(   r+   r.   r0   r3   r6   r9   rq   s   €r!   rr   zsearch_news.<locals>.<lambda>  rs   r    Nrt   zError in news search: %sru   úNews search failed: rw   rz   r€   s   `  r!   Úsearch_newsr˜   
  ss   øè ø€ ðYÜ×)Ñ)óó

÷ 

ˆô  gÔ.Ð.ð

ùô ò YÜ�‰Ð1°1Ô5Ü¨Ð6JÈ1È%Ð4PÔQÐWXÐXûðYürƒ   c           	   ƒ   óò   ‡ ‡‡‡‡‡‡K  — 	 t        j                  ˆˆˆˆ ˆˆˆfd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z&Perform a news search via GET request.c            	      óD   •— t        «       j                  ‰‰‰‰‰‰‰ ¬«      S ro   )r"   r–   r†   s   €€€€€€€r!   rr   z!search_news_get.<locals>.<lambda>-  r‡   r    Nrt   zError in news search (GET): %sru   r—   rw   rz   rˆ   s	   ```````  r!   Úsearch_news_getr›      sx   þè ø€ ðYÜ×)Ñ)÷ñ ó

÷ 

ˆô  gÔ.Ð.ð

ùô ò YÜ�‰Ð7¸Ô;Ü¨Ð6JÈ1È%Ð4PÔQÐWXÐXûðYürŠ   z/search/videosc              ƒ   óÚ   ‡ K  — 	 t        j                  ˆ fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)zPerform a video search.c                  ó  •— t        «       j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ¬«
      S ©N)
r(   r+   r.   r0   r3   r6   r9   rN   rO   rP   )r"   Úvideosr(   r+   r.   r0   r3   r6   r9   rN   rO   rP   rq   s   €r!   rr   zsearch_videos.<locals>.<lambda>C  sk   ø€ ”I“K×&Ñ&Ø—m‘mØ—~‘~Ø"×-Ñ-Ø!×+Ñ+Ø#×/Ñ/Ø—\‘\ØŸ™Ø"×-Ñ-Ø ×)Ñ)Ø&×5Ñ5ð 'ó € r    Nrt   zError in video search: %sru   úVideo search failed: rw   rz   r€   s   `  r!   Úsearch_videosr¡   >  ss   øè ø€ ðZÜ×)Ñ)óó
÷ 
ˆô  gÔ.Ð.ð
ùô  ò ZÜ�‰Ð2°AÔ6Ü¨Ð6KÈAÈ5Ð4QÔRÐXYÐYûðZürƒ   rN   rO   rP   c
              ƒ   óþ   ‡ ‡‡‡‡‡‡‡‡‡	K  — 	 t        j                  ˆˆˆ	ˆˆˆ ˆˆˆˆf
d„«      ƒ d{  –—† }
t        |
¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z'Perform a video search via GET request.c                  óJ   •
— t        «       j                  ‰‰‰‰	‰‰‰ ‰‰‰¬«
      S rž   )r"   rŸ   )
r9   rO   rP   r3   r6   r(   r+   rN   r.   r0   s
   €€€€€€€€€€r!   rr   z#search_videos_get.<locals>.<lambda>g  s7   ø€ ”I“K×&Ñ&ØØØ%Ø#Ø'ØØØ%Ø!Ø-ð 'ó € r    Nrt   zError in video search (GET): %sru   r    rw   rz   )r(   r+   r.   r0   r3   r6   r9   rN   rO   rP   rZ   r�   s   ``````````  r!   Úsearch_videos_getr¤   W  sy   ÿùè ø€ ðZÜ×)Ñ)÷ô ó
÷ 
ˆô  gÔ.Ð.ð
ùô  ò ZÜ�‰Ð8¸!Ô<Ü¨Ð6KÈAÈ5Ð4QÔRÐXYÐYûðZüs8   ŒA=Ž$A ²A³A ÁA=ÁA Á	A:Á'A5Á5A:Á:A=z/search/booksc              ƒ   óÚ   ‡ K  — 	 t        j                  ˆ fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)zPerform a book search.c                  óŽ   •— t        «       j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ¬«      S ©N)r(   r3   r6   r9   )r"   Úbooksr(   r3   r6   r9   rq   s   €r!   rr   zsearch_books.<locals>.<lambda>€  s7   ø€ ”I“K×%Ñ%Ø—m‘mØ#×/Ñ/Ø—\‘\ØŸ™ð	 &ó € r    Nrt   zError in book search: %sru   úBook search failed: rw   rz   r€   s   `  r!   Úsearch_booksrª   {  ss   øè ø€ ðYÜ×)Ñ)óó
÷ 
ˆô  gÔ.Ð.ð
ùô ò YÜ�‰Ð1°1Ô5Ü¨Ð6JÈ1È%Ð4PÔQÐWXÐXûðYürƒ   c              ƒ   óæ   ‡ ‡‡‡K  — 	 t        j                  ˆˆˆˆ fd„«      ƒ d{  –—† }t        |¬«      S 7 Œ# t        $ r,}t        j                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z&Perform a book search via GET request.c                  ó>   •— t        «       j                  ‰‰‰‰ ¬«      S r§   )r"   r¨   )r9   r3   r6   r(   s   €€€€r!   rr   z"search_books_get.<locals>.<lambda>˜  s%   ø€ ”I“K×%Ñ%ØØ'ØØð	 &ó € r    Nrt   zError in book search (GET): %sru   r©   rw   rz   )r(   r3   r6   r9   rZ   r�   s   ````  r!   Úsearch_books_getr­   Ž  ss   ûè ø€ ðYÜ×)Ñ)öó
÷ 
ˆô  gÔ.Ð.ð
ùô ò YÜ�‰Ð7¸Ô;Ü¨Ð6JÈ1È%Ð4PÔQÐWXÐXûðYüs1   †A1ˆ9 ¦7§9 ¶A1·9 ¹	A.Á'A)Á)A.Á.A1z/extractc              ƒ   óÂ   ‡ K  — 	 t        j                  ˆ fd„«      ƒ d{  –—† S 7 Œ# t        $ r,}t        j	                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z Extract text content from a URL.c                  ób   •— t        «       j                  ‰ j                  ‰ j                  ¬«      S ©N)rU   Úfmt)r"   ÚextractrU   rW   rq   s   €r!   rr   z!extract_content.<locals>.<lambda>«  s'   ø€ ”I“K×'Ñ'Ø—K‘KØ—N‘Nð (ó € r    NzError extracting content: %sru   úExtraction failed: rw   ©r{   r|   r}   r~   r   r   )rl   r�   s   ` r!   Úextract_contentrµ   ¦  si   øè ø€ ð	XÜ×&Ñ&óó
÷ 
ð 	
ð 
ùô ò XÜ�‰Ð5°qÔ9Ü¨Ð6IÈ!ÈÐ4OÔPÐVWÐWûðXüs0   ƒA…'  %¡' ¤A¥' §	A°'AÁAÁArU   r±   c              ƒ   óÆ   ‡ ‡K  — 	 t        j                  ˆˆ fd„«      ƒ d{  –—† S 7 Œ# t        $ r,}t        j	                  d|«       t        dd|›�¬«      |‚d}~ww xY w­w)z0Extract text content from a URL via GET request.c                  ó:   •— t        «       j                  ‰‰ ¬«      S r°   )r"   r²   )r±   rU   s   €€r!   rr   z%extract_content_get.<locals>.<lambda>º  s   ø€ ”I“K×'Ñ'ØØð (ó € r    Nz"Error extracting content (GET): %sru   r³   rw   r´   )rU   r±   r�   s   `` r!   Úextract_content_getr¸   µ  si   ùè ø€ ð	XÜ×&Ñ&ôó
÷ 
ð 	
ð 
ùô ò XÜ�‰Ð;¸QÔ?Ü¨Ð6IÈ!ÈÐ4OÔPÐVWÐWûðXüs0   „A!†) ¢'£) ¦A!§) ©	A²'AÁAÁA!Ú__main__z0.0.0.0i@  )ÚhostÚport)r)   r,   Nr1   r4   r7   )r)   r,   Nr1   r4   r7   NNNNN)	r)   r,   Nr1   r4   r7   NNN)r1   r4   r7   )rV   )8r>   r{   Úloggingr   Útypingr   Úfastapir   r   Úfastapi.middleware.corsr   Úpydanticr   r   Úddgsr	   Ú
ddgs.utilsr
   ÚbasicConfigÚINFOÚ	getLoggerr;   r~   ÚappÚadd_middlewarer"   r$   rD   rK   rM   rR   rT   rY   r^   r   rg   rk   Úpostr‚   r?   rA   r‰   r�   r“   r˜   r›   r¡   r¤   rª   r­   r\   Úbytesrµ   r¸   ÚuvicornÚrunr   r    r!   ú<module>rÌ      s>  ðÙ 'ã Û Û 	Ý ç *Ý 2ß %å Ý -ð €× Ñ ˜'Ÿ,™,Õ 'Ø	ˆ×	Ñ	˜8Ó	$€ñ Ø
ØXØØØô€ð × Ñ ØØ�%ØØ�%Ø�%ð ô ðL�4ó Lô	Z˜	ô 	Zô˜)ô ô,	Z˜	ô 	Zôd˜)ô dôZ˜ô Zôt�Yô tô"�Yô "ô�Yô ð ‡�ˆ˜^€Ó,ðQ�Nò Qó -ðQð
 ‡�ˆ >€Ó2ðQ˜Nò Qó 3ðQð
 ‡�ˆ.¨€Ó8ðTÐ0ð T°^ò Tó 9ðTð* ‡�ˆ¨€Ó7ð Ø Ø ØØØñTØðTàðTð ðTð �T‰zð	Tð
 ðTð ðTð ðTð òTó 8ðTð: ‡�Ð
¨>€Ó:ðZÐ!4ð Z¸ò Zó ;ðZð4 ‡�Ð	¨.€Ó9ð Ø Ø ØØØØØØ!ØØ $ñ$ZØð$Zàð$Zð ð$Zð �T‰zð	$Zð
 ð$Zð ð$Zð ð$Zð �‰*ð$Zð �‰:ð$Zð �d‘
ð$Zð �$‰Jð$Zð ˜‘:ð$Zð ò$Zó :ð$ZðN ‡�ˆ.¨€Ó8ðYÐ0ð Y°^ò Yó 9ðYð* ‡�ˆ¨€Ó7ð Ø Ø ØØØñYØðYàðYð ðYð �T‰zð	Yð
 ðYð ðYð ðYð òYó 8ðYð: ‡�Ð
¨>€Ó:ðZÐ!4ð Z¸ò Zó ;ðZð0 ‡�Ð	¨.€Ó9ð Ø Ø ØØØØ!ØØ!%ñ ZØð Zàð Zð ð Zð �T‰zð	 Zð
 ð Zð ð Zð ð Zð �d‘
ð Zð �D‰jð Zð ˜$‘Jð Zð ò Zó :ð ZðF ‡�ˆ/¨.€Ó9ðYÐ 2ð Y°~ò Yó :ðYð$ ‡�ˆ¨€Ó8ð ØØñ	YØðYàðYð ðYð ð	Yð
 òYó 9ðYð. ‡�ˆ*ÓðX >ð X°d¸3ÀÀeÁÐ;KÑ6Lò Xó ðXð ‡�ˆÓñX 3ð X¨Sð XÀtÈCÐQTÐW\ÑQ\ÐL\ÑG]ò Xó ðXð ˆzÒÛà€G‡K�K�˜)¨$Ö/ð r    