
    h}                    ^    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y)    )annotations)AnyDictIteratorListOptionalTuple)Document)
BaseLoaderc                  j    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd	dZ	 	 	 	 d
dZddZy)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`.

    Nc                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
|
ndg| _	        ||| _
        yg | _
        y)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*)queryuserpasswordaccount	warehouseroledatabaseschema
parameterspage_content_columnsmetadata_columns)selfr   r   r   r   r   r   r   r   r   r   r   s               s/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/document_loaders/snowflake_loader.py__init__zSnowflakeLoader.__init__   sq    : 
	 "	 $$8$D 3% 	! 5E4P 0VX    c           
     \   	 dd l }|j                  j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                        }	 |j                         }|j                  d| j                  z          |j                  d| j                  z          |j                  | j                  | j                         |j                         }|j                   D cg c]  }|d   	 }}|D cg c]  }t#        t%        ||             }}j+                          |S # t        $ r}t        d      |d }~ww xY wc c}w c c}w # t&        $ r}	t)        d|	        g }Y d }	~	Wd }	~	ww xY w# j+                          w xY w)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 zAn error occurred: )snowflake.connectorImportError	connectorconnectr   r   r   r   r   r   r   r   cursorexecuter   fetchalldescriptiondictzip	Exceptionprintclose)
r   	snowflakeexconncurquery_resultcolumncolumn_namesrowes
             r   _execute_queryzSnowflakeLoader._execute_query?   sh   	& ""**]]LLnn]];; + 	
	++-CKK$--78KK34KK

DOO4<<>L47OOD&F1IDLDDPQSD\3!78QLQ
 IIK;  	S 	, EQ 	's+,L	 IIKs`   E :BE3 
E)E3 E.8E3 	E&E!!E&)
E3 3	F<FF FF F+c                    | j                   r| j                   ng }| j                  r| j                  ng }||rt        |d   j                               }|g }|xs g |fS )Nr   )r   r   listkeys)r   r1   r   r   s       r   _get_columnszSnowflakeLoader._get_columnsa   sq     *.)B)BD%% 	 594I4I400r'L#'Q(<(<(>#? #!#)r+;;;r   c              #    	K   | j                         }t        |t              rt        d|        g S | j	                  |      \  	}d	v rt        |d   j                               	|D ]c  }dj                  	fd|j                         D              }|j                         D ci c]  \  }}||v s|| }}}t        ||      }| e y c c}}w w)Nz$An error occurred during the query: r   r   
c              3  <   K   | ]  \  }}|v s| d |   yw)z: N ).0kvr   s      r   	<genexpr>z,SnowflakeLoader.lazy_load.<locals>.<genexpr>w   s,      % $1q<P7P1#Rs%s   )page_contentmetadata)
r6   
isinstancer*   r+   r:   r8   r9   joinitemsr
   )
r   r1   r   r4   rC   r@   rA   rD   docr   s
            @r   	lazy_loadzSnowflakeLoader.lazy_loadn   s     **,lI.8GHI151B1B<1P..&&#'Q(<(<(>#?  	C99 %(+		% L *-NA=M8M1NHNxHCI	 Os   B%C(C5C:C)NNN)r   strr   rJ   r   rJ   r   rJ   r   rJ   r   rJ   r   rJ   r   rJ   r   zOptional[Dict[str, Any]]r   Optional[List[str]]r   rK   )returnList[Dict[str, Any]])r1   rM   rL   zTuple[List[str], List[str]])rL   zIterator[Document])__name__
__module____qualname____doc__r   r6   r:   rI   r>   r   r   r   r   
   s    & 044804)Y)Y )Y 	)Y
 )Y )Y )Y )Y )Y -)Y 2)Y .)YV D<0<	$<r   r   N)
__future__r   typingr   r   r   r   r   r	   langchain_core.documentsr
   )langchain_community.document_loaders.baser   r   r>   r   r   <module>rV      s"    " = = - @rj rr   