Ë
    õ¡Ÿj|  ã                  ó  — d Z ddlmZ ddl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 ddlmZ ddlmZ ddlmZ  ej$                  e«      Zh d	£Zh d
£Zh d£Zdd„Zdd„Zdd„Zdddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)zM
author: Yagnik Poshiya
organization: Webbrains Technologies Private Limited
é    )ÚannotationsN)ÚPath)ÚAny)Ú
quote_plus)ÚMongoClient)ÚPyMongoError>   ú$eqú$gtú$inú$ltú$neú$orú$allú$andú$gteú$lteú$ninú$norú$notú$sizeú$regexú$existsú
$elemMatch>	   ú$skipú$sortú$countú$groupú$matchú$unwindú$projectú
$addFieldsú$limit>   ú$whereú	$functionú$accumulatorc                ó\  — t        | t        «      ry| j                  «       D ]e  \  }}t        |t        «      rE|j	                  d«      r4|t
        v rt        d|› �«      ‚|t        vr|t        vrt        d|› �«      ‚t        |«       Œg y t        | t        «      r| D ]  }t        |«       Œ y y )Nú$zForbidden Mongo operator: zUnsupported Mongo operator: )Ú
isinstanceÚdictÚitemsÚstrÚ
startswithÚ_BLOCKED_OPERATORSÚ
ValueErrorÚ_ALLOWED_FILTER_OPERATORSÚ_ALLOWED_PIPELINE_STAGESÚ_validate_doc_operatorsÚlist)ÚnodeÚkÚvÚxs       úJ/var/www/html/agent-engine/apps/agents/rag-agent/src/agent/mongo_runner.pyr1   r1   #   sª   € Ü�$œÔØ—J‘J“Lò 	'‰DˆAˆqÜ˜!œSÔ! a§l¡l°3Ô&7ØÔ*Ñ*Ü$Ð'AÀ!ÀÐ%EÓFÐFØÔ5Ñ5¸!ÔC[Ñ:[Ü$Ð'CÀAÀ3Ð%GÓHÐHÜ# AÕ&ñ	'ô 
�Dœ$Ô	Øò 	'ˆAÜ# AÕ&ñ	'ð 
 ó    c                óP  — t        | t        «      sg S g }| D ]Œ  }t        |t        «      rt        |«      dk(  sŒ"t        |d   xs d«      j	                  «       }t        |d   xs d«      j	                  «       j                  «       }|sŒs|j                  ||dk(  rdndf«       ŒŽ |S )Né   r   Ú é   ÚascÚdescéÿÿÿÿ)r(   r2   Úlenr+   ÚstripÚlowerÚappend)Ú	sort_specÚoutÚitemÚfieldÚ	directions        r7   Ú_normalize_sortrI   1   s£   € Ü�i¤Ô&Øˆ	Ø!#€CØò >ˆÜ˜4¤Ô&¬3¨t«9¸ª>ØÜ�D˜‘G’M˜rÓ"×(Ñ(Ó*ˆÜ˜˜Q™Ò( 5Ó)×/Ñ/Ó1×7Ñ7Ó9ˆ	ÙØØ�
‰
�E ¨fÒ!4™2¸!Ð<Õ=ð>ð €Jr8   c                óæ  — | xs dj                  «       j                  «       }|dk(  rddid fS ddi}|dv rd|d<   d|d<   |d fS d }|xs d	j                  «       }|d
v r‘|st        d«      ‚t        j                  dd¬«      \  }}t        j                  |«       t        |«      j                  |d¬«       t        |«      }t        |«      |d<   d|d<   |dk7  |d<   t        j                  |d<   ||fS )NÚrequiredÚdisableÚtlsFT)rK   Ú	preferredÚtlsAllowInvalidCertificatesÚtlsAllowInvalidHostnamesr;   )Ú	verify_caÚverify_identityzSSL/TLS mode requires CA PEM.z	mongo-ca-z.pem)ÚprefixÚsuffixzutf-8)ÚencodingÚ	tlsCAFilerR   Ússl_cert_reqs)rA   rB   r.   ÚtempfileÚmkstempÚosÚcloser   Ú
write_textr+   ÚsslÚCERT_REQUIRED)Ússl_modeÚ
ssl_ca_pemÚmodeÚkwargsÚca_pathÚcaÚfdÚps           r7   Ú_client_tls_kwargsrg   @   s  € ØÒ"˜
×)Ñ)Ó+×1Ñ1Ó3€DØˆyÒØ�uˆ~˜tÐ#Ð#à# T˜]€FØÐ(Ñ(Ø04ˆÐ,Ñ-Ø-1ˆÐ)Ñ*Ø�tˆ|Ðà€GØ
Ò
˜×	!Ñ	!Ó	#€BØÐ/Ñ/ÙÜÐ<Ó=Ð=Ü× Ñ ¨¸FÔC‰ˆˆAÜ
�‰�ŒÜˆQ‹×Ñ˜2¨ÐÔ0Ü�q“'ˆÜ! '›lˆˆ{ÑØ05ˆÐ,Ñ-Ø-1Ð5FÑ-FˆÐ)Ñ*Ü"%×"3Ñ"3ˆˆÑØ�7ˆ?Ðr8   rK   é2   é
   )r_   r`   Úmax_rowsÚconnect_timeout_secondsc           
     óx	  — t        |t        «      st        d«      ‚t        |j	                  d«      xs d«      j                  «       j                  «       }|dvrt        d«      ‚t        |j	                  d«      xs d«      j                  «       }|st        d«      ‚||vrt        d|› �«      ‚t        ||«      \  }}d }	 | xs dj                  «       }|j                  «       j                  d	«      xr d
|v}t        |«      › d
t        |«      › d�}dt        |«      › �}|r	d|› |› |› �nd|› |› d
t        |«      › |› �}t        j                  d|||||||«       t        |fdt        |
d«      dz  i|¤Ž}||   }||   }|dk(  �r|j	                  d«      }|j	                  d«      }|j	                  d«      }t        |j	                  d«      xs |	«      }t        dt        ||	«      «      }t        |t        «      r|ni }t        |t        «      r|nd }t!        |«       |�t!        |«       t        j                  dt#        j$                  |d¬«      «       |j'                  ||«      j)                  |«      }t+        |«      }|r|j-                  |«      }t/        |«      }nš|j	                  d«      }t        |t.        «      r|st        d«      ‚t!        |«       t1        d„ |D «       «      }|sg |¢d|	i‘}t        j                  dt#        j$                  |d¬«      «       t/        |j3                  |«      «      }t#        j4                  t#        j$                  |t        ¬ «      «      } g }!| rat7        «       }"| d d! D ]O  }#t        |#t        «      sŒ|#j9                  «       D ])  }$|$|"vsŒ|!j;                  |$«       |"j=                  |$«       Œ+ ŒQ t        j                  d"||t?        | «      |!rd#jA                  |!«      nd$«       |!| f|�|jC                  «        |�	 |jE                  d%¬&«       S S # tF        $ r Y S w xY w# tH        $ r0}%t        jK                  d'|%«       t        t        |%«      «      |%‚d }%~%ww xY w# |�|jC                  «        |�#	 |jE                  d%¬&«       w # tF        $ r Y w w xY ww xY w)(Nz#Mongo query spec must be an object.Ú	operationr;   >   ÚfindÚ	aggregatez*Mongo operation must be find or aggregate.Ú
collectionz)Mongo query spec must include collection.zUnknown collection: z.mongodb.netú:ú@ú/zmongodb+srv://z
mongodb://zelive_mongo_connect_attempt host=%s port=%s database=%s user=%s collection=%s operation=%s ssl_mode=%sÚserverSelectionTimeoutMSr<   iè  rn   ÚfilterÚ
projectionÚsortÚlimitz5live_mongo_query_execute operation=find query_spec=%sF)Úensure_asciiÚpipelinez2Aggregate operation requires a non-empty pipeline.c              3  óH   K  — | ]  }t        |t        «      xr d |v –— Œ y­w)r"   N)r(   r)   )Ú.0Ústages     r7   ú	<genexpr>z"run_query_mongo.<locals>.<genexpr>«   s$   è ø€ Ò`ÈeœJ u¬dÓ3ÒI¸ÀEÐ8IÓIÑ`ùs   ‚ "r"   z:live_mongo_query_execute operation=aggregate query_spec=%s)Údefaulté   zElive_mongo_query_result collection=%s operation=%s rows=%d columns=%sú,z(empty)T)Ú
missing_okz$live_mongo_query_failed raw_error=%r)&r(   r)   r.   r+   ÚgetrA   rB   rg   Úendswithr   ÚintÚloggerÚinfor   ÚmaxÚminr1   ÚjsonÚdumpsrn   rx   rI   rw   r2   Úanyro   ÚloadsÚsetÚkeysrC   Úaddr@   Újoinr[   ÚunlinkÚ	Exceptionr   Ú	exception)&ÚhostÚportÚuserÚpasswordÚdatabaseÚ
query_specÚallowed_collectionsr_   r`   rj   rk   Úoprp   Ú
tls_kwargsrc   ÚclientÚ
host_cleanÚuse_srvÚauthÚdb_pathÚuriÚdbÚcolÚfiltÚprojrD   rx   ÚcursorÚ	sort_listÚrowsrz   Ú	has_limitÚ	rows_jsonÚcolsÚseenÚrr4   Úes&                                         r7   Úrun_query_mongor±   [   s¬  € ô �j¤$Ô'ÜÐ>Ó?Ð?ä	ˆZ�^‰^˜KÓ(Ò.¨BÓ	/×	5Ñ	5Ó	7×	=Ñ	=Ó	?€BØ	Ð&Ñ&ÜÐEÓFÐFä�Z—^‘^ LÓ1Ò7°RÓ8×>Ñ>Ó@€JÙÜÐDÓEÐEØÐ,Ñ,ÜÐ/°
¨|Ð<Ó=Ð=ä,¨X°zÓBÑ€J�Ø€FðRØ’j˜b×'Ñ'Ó)ˆ
Ø×"Ñ"Ó$×-Ñ-¨nÓ=ÒWÀ#ÈZÐBWˆÜ˜TÓ"Ð# 1¤Z°Ó%9Ð$:¸!Ð<ˆØ”j Ó*Ð+Ð,ˆñ ð ˜T˜F : ,¨w¨iÑ8à˜d˜V J <¨q´°T³°¸G¸9ÐEð 	ô
 	�‰ØsØØØØØØØô		
ô Øñ
ä%(Ð)@À!Ó%DÀtÑ%Kð
ð ñ
ˆð
 �HÑˆØ�‰nˆà�‹<Ø—>‘> (Ó+ˆDØ—>‘> ,Ó/ˆDØ"Ÿ™ vÓ.ˆIÜ˜
Ÿ™ wÓ/Ò;°8Ó<ˆEÜ˜œ3˜u hÓ/Ó0ˆEÜ% d¬DÔ1‘4°rˆDÜ% d¬DÔ1‘4°tˆDÜ# DÔ)ØÐÜ'¨Ô-Ü�K‰KÐOÔQU×Q[ÑQ[Ð\fÐuzÔQ{Ô|Ø—X‘X˜d DÓ)×/Ñ/°Ó6ˆFÜ'¨	Ó2ˆIÙØŸ™ YÓ/�Ü˜“<‰Dà!—~‘~ jÓ1ˆHÜ˜h¬Ô-±XÜ Ð!UÓVÐVÜ# HÔ-äÑ`ÐW_Ô`Ó`ˆIÙØ<˜XÐ<¨°(Ð';Ð<�Ü�K‰KÐTÔVZ×V`ÑV`ÐakÐzô  WAô  BÜ˜Ÿ™ hÓ/Ó0ˆDä—J‘JœtŸz™z¨$¼Ô<Ó=ˆ	ØˆÙÜ ›UˆDØ˜s �^ò (�Ü˜a¤Õ&ØŸV™V›Xò (˜Ø Dš=Ø ŸK™K¨œNØ ŸH™H Q�Kñ(ð(ô 	�‰ØSØ˜œC 	›N¹d¨C¯H©H°T¬NÈ	ô	
ð �Yˆð
 ÐØ�L‰LŒNØÐðØ—‘¨$�Õ/ð øô ò Ùðûô ò (Ü×ÑÐ?ÀÔCÜœ˜Q›Ó  aÐ'ûð(ûð ÐØ�L‰LŒNØÐðØ—‘¨$�Õ/øÜò Ùðúð úsh   ÃKQ ÎQ Î.AQ Ð!P5Ð5	QÑ QÑ	Q=Ñ+Q8Ñ8Q=Ñ=R  Ò R9ÒR)Ò(R9Ò)	R5Ò2R9Ò4R5Ò5R9)r3   r   ÚreturnÚNone)rD   r   r²   zlist[tuple[str, int]])r_   r+   r`   ú
str | Noner²   z"tuple[dict[str, Any], Path | None])r•   r+   r–   r…   r—   r+   r˜   r+   r™   r+   rš   zdict[str, Any]r›   zset[str]r_   r+   r`   r´   rj   r…   rk   r…   r²   z&tuple[list[str], list[dict[str, Any]]])Ú__doc__Ú
__future__r   rŠ   ÚloggingrZ   r]   rX   Úpathlibr   Útypingr   Úurllib.parser   Úpymongor   Úpymongo.errorsr   Ú	getLoggerÚ__name__r†   r/   r0   r-   r1   rI   rg   r±   © r8   r7   ú<module>rÀ      sý   ðñõ
 #ã Û Û 	Û 
Û Ý Ý Ý #å Ý 'à	ˆ×	Ñ	˜8Ó	$€òÐ ò
Ð ò
 =Ð ó'óóðH Ø!ØØ#%ñoà
ðoð ðoð ð	oð
 ðoð ðoð ðoð "ðoð ðoð ðoð ðoð !ðoð ,ôor8   