
    Ng}                    f    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e          ZdS )    )annotations)AnyDictIteratorListOptionalTuple)Document)
BaseLoaderc                  :    e Zd ZdZ	 	 	 dddZddZddZ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querystruserpasswordaccount	warehouseroledatabaseschema
parametersOptional[Dict[str, Any]]page_content_columnsOptional[List[str]]metadata_columnsc                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
|
ndg| _	        ||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   r   r   r   r   r   r   r   r   r   r   )selfr   r   r   r   r   r   r   r   r   r   r   s               q/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/document_loaders/snowflake_loader.py__init__zSnowflakeLoader.__init__   sx    : 
	 "	 $$8$D  3% 	! 5E4P 0 0VX    returnList[Dict[str, Any]]c           
        	 dd l }n"# t          $ r}t          d          |d }~ww xY w|j                            | j        | j        | j        | j        | j        | j	        | j
        | j                  }	 |                                }|                    d| j	        z              |                    d| j
        z              |                    | j        | j                   |                                }d |j        D             fd|D             }n+# t"          $ r}t%          d|            g }Y d }~nd }~ww xY w|                                 n# |                                 w xY w|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                    g | ]
}|d          S )r    ).0columns     r   
<listcomp>z2SnowflakeLoader._execute_query.<locals>.<listcomp>X   s    DDD&F1IDDDr!   c                J    g | ]}t          t          |                     S r&   )dictzip)r'   rowcolumn_namess     r   r)   z2SnowflakeLoader._execute_query.<locals>.<listcomp>Y   s+    QQQSD\3!7!788QQQr!   zAn error occurred: )snowflake.connectorImportError	connectorconnectr   r   r   r   r   r   r   r   cursorexecuter   fetchalldescription	Exceptionprintclose)r   	snowflakeexconncurquery_resulter.   s          @r   _execute_queryzSnowflakeLoader._execute_query?   s   	&&&&& 	 	 	S  	 "**]Ln]; + 	
 	
	++--CKK$-7888KK3444KK
DO444<<>>LDDCODDDLQQQQLQQQLL 	 	 	+++,,,LLLLLL	 IIKKKKCIIKKKKsA    
'"'5B!D E 
D?!D:5E :D??E E-r>   Tuple[List[str], List[str]]c                    | j         r| j         ng }| j        r| j        ng }|)|r't          |d                                                   }|g }|pg |fS )Nr   )r   r   listkeys)r   r>   r   r   s       r   _get_columnszSnowflakeLoader._get_columnsa   sz     *.)BJD%% 	 594IQ400r'L'#'Q(<(<(>(>#?#? #!#)r+;;;r!   Iterator[Document]c              #    K   |                                  }t          |t                    rt          d|            g S |                     |          \  dv r't          |d                                                   |D ]j}d                    fd|                                D                       }fd|                                D             }t          ||          }|V  kd S )Nz$An error occurred during the query: r   r   
c              3  4   K   | ]\  }}|v 	| d | V  dS )z: Nr&   )r'   kvr   s      r   	<genexpr>z,SnowflakeLoader.lazy_load.<locals>.<genexpr>w   sE       % % $1q<P7P7P17P7P7P7P% %r!   c                $    i | ]\  }}|v 	||S r&   r&   )r'   rJ   rK   r   s      r   
<dictcomp>z-SnowflakeLoader.lazy_load.<locals>.<dictcomp>z   s*    NNNA=M8M8M18M8M8Mr!   )page_contentmetadata)
r@   
isinstancer7   r8   rE   rC   rD   joinitemsr
   )r   r>   r-   rO   rP   docr   r   s         @@r   	lazy_loadzSnowflakeLoader.lazy_loadn   s&     **,,lI.. 	GGGHHHI151B1B<1P1P..&&&#'Q(<(<(>(>#?#?  	 	C99 % % % %(+		% % %  L ONNNNNNHxHHHCIIII	 	r!   )NNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r"   r#   )r>   r#   r"   rA   )r"   rF   )__name__
__module____qualname____doc__r    r@   rE   rU   r&   r!   r   r   r   
   s         & 044804)Y )Y )Y )Y )YV       D< < < <     r!   r   N)
__future__r   typingr   r   r   r   r   r	   langchain_core.documentsr
   )langchain_community.document_loaders.baser   r   r&   r!   r   <module>r^      s    " " " " " " = = = = = = = = = = = = = = = = - - - - - - @ @ @ @ @ @r r r r rj r r r r rr!   