a
    bg}                     @  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                   @  s`   e Zd ZdZdddddddddddddddZd	d
ddZd	ddddZdd
ddZdS )SnowflakeLoaderaS  Load from `Snowflake` 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strzOptional[Dict[str, Any]]zOptional[List[str]]queryuserpasswordaccount	warehouseroledatabaseschema
parameterspage_content_columnsmetadata_columnsc                 C  s`   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
durB|
ndg| _	|durV|ng | _
dS )aj  Initialize Snowflake document loader.

        Args:
            query: The query to run in Snowflake.
            user: Snowflake user.
            password: Snowflake password.
            account: Snowflake account.
            warehouse: Snowflake warehouse.
            role: Snowflake role.
            database: Snowflake database
            schema: Snowflake schema
            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   )selfr   r   r   r   r   r   r   r   r   r   r    r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/snowflake_loader.py__init__   s    zSnowflakeLoader.__init__zList[Dict[str, Any]])returnc              
     s$  zdd l }W n. ty: } ztd|W Y d }~n
d }~0 0 |jj| j| j| j| j| j| j	| j
| jd}zzf| }|d| j	  |d| j
  || j| j | }dd |jD   fdd|D }W n8 ty } ztd	|  g }W Y d }~n
d }~0 0 W |  n
|  0 |S )
Nr   zuCould not import snowflake-connector-python package. Please install it with `pip install snowflake-connector-python`.)r   r   r   r   r   r   r   r   zUSE DATABASE zUSE SCHEMA c                 S  s   g | ]}|d  qS )r   r   ).0columnr   r   r   
<listcomp>X       z2SnowflakeLoader._execute_query.<locals>.<listcomp>c                   s   g | ]}t t |qS r   )dictzip)r   rowZcolumn_namesr   r   r!   Y   r"   zAn error occurred: )Zsnowflake.connectorImportErrorZ	connectorconnectr   r   r   r   r   r   r   r   cursorexecuter   Zfetchalldescription	Exceptionprintclose)r   	snowflakeexconncurquery_resulter   r&   r   _execute_query?   s>    
zSnowflakeLoader._execute_queryzTuple[List[str], List[str]])r3   r   c                 C  sT   | j r| j ng }| jr| jng }|d u r<|r<t|d  }|d u rHg }|pNg |fS )Nr   )r   r   listkeys)r   r3   r   r   r   r   r   _get_columnsa   s    zSnowflakeLoader._get_columnszIterator[Document]c                 #  s   |   }t|tr$td|  g S | |\ dv rJt|d  |D ]H}dfdd| D } fdd| D }t	||d	}|V  qNd S )
Nz$An error occurred during the query: r   r   
c                 3  s(   | ] \}}| v r| d | V  qdS )z: Nr   r   kv)r   r   r   	<genexpr>w   s   z,SnowflakeLoader.lazy_load.<locals>.<genexpr>c                   s   i | ]\}}| v r||qS r   r   r:   )r   r   r   
<dictcomp>z   r"   z-SnowflakeLoader.lazy_load.<locals>.<dictcomp>)page_contentmetadata)
r5   
isinstancer,   r-   r8   r6   r7   joinitemsr	   )r   r3   r%   r?   r@   docr   )r   r   r   	lazy_loadn   s    
zSnowflakeLoader.lazy_load)NNN)__name__
__module____qualname____doc__r   r5   r8   rE   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    