a
    bg                     @   sH   d dl mZmZmZ d dlmZmZmZmZm	Z	m
Z
 G dd de
ZdS )    )DictTupleUnion)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorc                   @   s   e Zd ZdZejejejejej	ej
ejgZejejejgZeeef edddZeedddZeedd	d
Zeeeef dddZdS )OpenSearchTranslatorz]Translate `OpenSearch` internal query domain-specific
    language elements to valid filters.)funcreturnc                 C   sR   |  | 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 )NtermltZltegtZgteZwildcardZfuzzyZmustZshouldZmust_not)Z_validate_funcr   EQLTLTEGTGTECONTAINLIKEr   ANDORNOT)selfr   Zcomp_operator_map r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/query_constructors/opensearch.py_format_func   s    
z!OpenSearchTranslator._format_func)	operationr   c                    s(    fdd|j D }d |j|iiS )Nc                    s   g | ]}|  qS r   )accept).0argr   r   r   
<listcomp>0       z8OpenSearchTranslator.visit_operation.<locals>.<listcomp>bool)	argumentsr   operator)r   r   argsr   r#   r   visit_operation/   s    z$OpenSearchTranslator.visit_operation)
comparisonr   c                 C   s   d|j  }|jtjtjtjtjfv rvt|jt	r\d|jv rvd|| 
|j|jd iiiS nd|| 
|j|jiiiS |jtjkr| 
|j|d|jiiiS t|jtr| dn|}t|jt	rd|jv r|jd |_| 
|j||jiiS )Nz	metadata.daterangevaluez.keyword)	attributeZ
comparatorr   r   r   r   r   
isinstancer.   dictr   r   str)r   r+   fieldr   r   r   visit_comparison4   sD    



z%OpenSearchTranslator.visit_comparison)structured_queryr   c                 C   s*   |j d u ri }nd|j | i}|j|fS )Nfilter)r6   r    query)r   r5   kwargsr   r   r   visit_structured_query`   s    
z+OpenSearchTranslator.visit_structured_queryN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   Zallowed_comparatorsr   r   r   r   Zallowed_operatorsr   r2   r   r   r   r*   r   r4   r	   r   r1   r9   r   r   r   r   r      s    -
r   N)typingr   r   r   Zlangchain_core.structured_queryr   r   r   r   r	   r
   r   r   r   r   r   <module>   s    
