o
    Zh                     @   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	 deeef defddZdedefddZd	edefd
dZdedeeef f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   h/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/query_constructors/opensearch.py_format_func   s   
z!OpenSearchTranslator._format_func	operationc                    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   s    z8OpenSearchTranslator.visit_operation.<locals>.<listcomp>bool)	argumentsr   operator)r   r   argsr   r#   r   visit_operation/   s   z$OpenSearchTranslator.visit_operation
comparisonc                 C   s   d|j  }|jtjtjtjtjfv r;t|jt	r.d|jv r-d|| 
|j|jd iiiS nd|| 
|j|jiiiS |jtjkrN| 
|j|d|jiiiS t|jtrY| dn|}t|jt	rld|jv rl|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   sF   



z%OpenSearchTranslator.visit_comparisonstructured_queryc                 C   s*   |j d u ri }nd|j | i}|j|fS )Nfilter)r5   r    query)r   r4   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   r1   r   r   r   r)   r   r3   r	   r   r0   r8   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     
