o
    ZhO                     @  sX   d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZ G dd deZdS )    )annotations)AnyDictIteratorListOptionalTuple)Document)
BaseLoaderc                   @  sJ   e Zd ZdZ			ddddZdddZd ddZd!ddZd"ddZdS )#KineticaLoaderaR  Load from `Kinetica` API.

    Each document represents one row of the result. The `page_content_columns`
    are written into the `page_content` of the document. The `metadata_columns`
    are written into the `metadata` of the document. By default, all columns
    are written into the `page_content` and none into the `metadata`.

    Nquerystrhostusernamepassword
parametersOptional[Dict[str, Any]]page_content_columnsOptional[List[str]]metadata_columnsc                 C  s@   || _ || _|| _|| _|| _|| _|dur|| _dS g | _dS )aX  Initialize Kinetica document loader.

        Args:
            query: The query to run in Kinetica.
            parameters: Optional. Parameters to pass to the query.
            page_content_columns: Optional. Columns written to Document `page_content`.
            metadata_columns: Optional. Columns written to Document `metadata`.
        N)r   r   r   r   r   r   r   )selfr   r   r   r   r   r   r    r   k/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/document_loaders/kinetica_loader.py__init__   s   zKineticaLoader.__init__returnList[Dict[str, Any]]c              
     s   z
ddl m}m} W n ty   tdw z<| }| j|_| j|_|| j|d}||| j}|j	
   fdd|D }W d    W |S 1 sKw   Y  W |S  tyn } ztd|  g }W Y d }~|S d }~ww )Nr   )GPUdbGPUdbSqlIteratorzZCould not import Kinetica python API. Please install it with `pip install gpudb==7.2.0.9`.)r   optionsc                   s   g | ]	}t t |qS r   )dictzip).0recordZcolumn_namesr   r   
<listcomp>@   s    z1KineticaLoader._execute_query.<locals>.<listcomp>zAn error occurred: )Zgpudbr   r   ImportErrorOptionsr   r   r   r   Ztype_mapkeys	Exceptionprint)r   r   r   r   connrecordsquery_resulter   r#   r   _execute_query.   s2   
zKineticaLoader._execute_queryr,   Tuple[List[str], List[str]]c                 C  sT   | j r| j ng }| jr| jng }|d u r|rt|d  }|d u r$g }|p'g |fS )Nr   )r   r   listr'   )r   r,   r   r   r   r   r   _get_columnsH   s   zKineticaLoader._get_columnsIterator[Document]c                 #  s    |   }t|trtd|  g S | |\ dv r&t|d  |D ]$}dfdd| D } fdd| D }t	||d	}|V  q(d S )
Nz$An error occurred during the query: *r   
c                 3  s*    | ]\}}| v r| d | V  qdS )z: Nr   r!   kv)r   r   r   	<genexpr>^   s     z+KineticaLoader.lazy_load.<locals>.<genexpr>c                   s   i | ]\}}| v r||qS r   r   r5   )r   r   r   
<dictcomp>a   s    z,KineticaLoader.lazy_load.<locals>.<dictcomp>)page_contentmetadata)
r.   
isinstancer(   r)   r1   r0   r'   joinitemsr	   )r   r,   rowr:   r;   docr   )r   r   r   	lazy_loadU   s    
zKineticaLoader.lazy_loadList[Document]c                 C  s   t |  S )z Load data into document objects.)r0   rA   )r   r   r   r   loade   s   zKineticaLoader.load)NNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r,   r   r   r/   )r   r2   )r   rB   )	__name__
__module____qualname____doc__r   r.   r1   rA   rC   r   r   r   r   r   
   s    


r   N)
__future__r   typingr   r   r   r   r   r   Zlangchain_core.documentsr	   Z)langchain_community.document_loaders.baser
   r   r   r   r   r   <module>   s
     