
    hh                     v    d Z ddlmZmZmZ ddlmZmZmZm	Z	m
Z
mZ ej        ej        gZ G d de          ZdS )zLLogic for converting internal query language to a valid MongoDB Atlas query.    )DictTupleUnion)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorc                       e Zd ZdZ	 ej        ej        ej        ej        ej	        ej
        ej        ej        gZ	 ej        ej        gZdeeef         defdZdedefdZdedefdZd	edeeef         fd
ZdS )MongoDBAtlasTranslatorzBTranslate Mongo internal query language elements to valid filters.funcreturnc                 0   |                      |           t          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j	        dt          j
        dt          j        d	t          j        d
i
}||         S )Nz$andz$orz$eqz$nez$gtez$ltez$ltz$gtz$inz$nin)_validate_funcr	   ANDORr   EQNEGTELTELTGTINNIN)selfr   map_dicts      q/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain_community/query_constructors/mongodb_atlas.py_format_funcz#MongoDBAtlasTranslator._format_func$   so    D!!!L&KM5M5NFNFM5M5M5NF
 ~    	operationc                 b      fd|j         D             }                     |j                  |iS )Nc                 :    g | ]}|                               S  )accept).0argr   s     r   
<listcomp>z:MongoDBAtlasTranslator.visit_operation.<locals>.<listcomp>5   s%    @@@S

4  @@@r    )	argumentsr   operator)r   r!   argss   `  r   visit_operationz&MongoDBAtlasTranslator.visit_operation4   s;    @@@@I,?@@@!!)"455t<<r    
comparisonc                     |j         t          v r't          |j        t                    s|j        g|_        |                     |j                   }|j        }|||j        iiS )N)
comparatorMULTIPLE_ARITY_COMPARATORS
isinstancevaluelistr   	attribute)r   r-   r/   r4   s       r   visit_comparisonz'MongoDBAtlasTranslator.visit_comparison8   sk     $>>>zdH
 H
> !+ 01J&&z'<==
(	J
(89::r    structured_queryc                 `    |j         i }nd|j                             |           i}|j        |fS )N
pre_filter)filterr%   query)r   r6   kwargss      r   visit_structured_queryz-MongoDBAtlasTranslator.visit_structured_queryD   s>     "*FF"$4$;$B$B4$H$HIF%v--r    N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   allowed_comparatorsr	   r   r   allowed_operatorsr   strr   r   r   r,   r   r5   r
   r   dictr<   r$   r    r   r   r      s        LL0	 /!x{3x';!<      = =t = = = =
;: 
;$ 
; 
; 
; 
;. /.	sDy	. . . . . .r    r   N)r@   typingr   r   r   langchain_core.structured_queryr   r   r   r	   r
   r   r   r   r0   r   r$   r    r   <module>rG      s    R R % % % % % % % % % %                )mZ^< :. :. :. :. :.W :. :. :. :. :.r    