
    7|h                         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
 deeeef      defdZ G d de      Z G d	 d
e
      Zy)    )AnyCallableIteratorListOptionalTuple)Document)
BaseLoaderdocsreturnc                 P    dj                  | D cg c]  }|d   	 c}      S c c}w )z#Default joiner for content columns.
   )join)r   docs     m/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/document_loaders/rocksetdb.pydefault_joinerr      s#    99-c!f-..-s   #c                   ,     e Zd ZdZdedef fdZ xZS )ColumnNotFoundErrorzColumn not found error.missing_keyqueryc                 0    t         |   d| d|        y )NzColumn "z" not selected in query:
)super__init__)selfr   r   	__class__s      r   r   zColumnNotFoundError.__init__   s    8K=0J5'RS    )__name__
__module____qualname____doc__strr   __classcell__)r   s   @r   r   r      s"    !TC T T Tr   r   c                   r    e Zd ZdZdefdededee   deee      de	ee
eef      gef   f
dZd	ee   fd
Zy)RocksetLoadera  Load from a `Rockset` database.

    To use, you should have the `rockset` python package installed.

    Example:
        .. code-block:: python

            # This code will load 3 records from the "langchain_demo"
            # collection as Documents, with the `text` column used as
            # the content

            from langchain_community.document_loaders import RocksetLoader
            from rockset import RocksetClient, Regions, models

            loader = RocksetLoader(
                RocksetClient(Regions.usw2a1, "<api key>"),
                models.QueryRequestSql(
                    query="select * from langchain_demo limit 3"
                ),
                ["text"]
            )
        )
    Nclientr   content_keysmetadata_keyscontent_columns_joinerc                    	 ddl m}m} ddlm} t        ||      st        dt        |             t        ||      st        dt        |             || _	        || _
        || _        || _        || _        || _        || _        	 | j                  j!                  d       y# t
        $ r t        d      w xY w# t"        $ r Y yw xY w)	aK  Initialize with Rockset client.

        Args:
            client: Rockset client object.
            query: Rockset query object.
            content_keys: The collection columns to be written into the `page_content`
                of the Documents.
            metadata_keys: The collection columns to be written into the `metadata` of
                the Documents. By default, this is all the keys in the document.
            content_columns_joiner: Method that joins content_keys and its values into a
                string. It's method that takes in a List[Tuple[str, Any]]],
                representing a list of tuples of (column name, column value).
                By default, this is a method that joins each column value with a new
                line. This method is only relevant if there are multiple content_keys.
        r   )QueryPaginatorRocksetClient)QueryRequestSqlz]Could not import rockset client python package. Please install it with `pip install rockset`.z;client should be an instance of rockset.RocksetClient, got zBquery should be an instance of rockset.model.QueryRequestSql, got 	langchainN)rocksetr+   r,   rockset.modelsr-   ImportError
isinstance
ValueErrortyper&   r   r'   r)   r(   	paginatorrequest_modelset_applicationAttributeError)	r   r&   r   r'   r(   r)   r+   r,   r-   s	            r   r   zRocksetLoader.__init__-   s    .	=6 &-0F|n& 
 %1E{m% 
 
(&<#*',	KK''47  	@ 	8  		s   B$ B< $B9<	CCr   c              #     K   | j                   j                  j                  | j                        j                  }|D ]h  }	 t	        | j                  | j                  D cg c]	  }|||   f c}      | j                  | j                  D ci c]  }|||   
 c}n|       j y c c}w c c}w # t        $ r(}t        |j                  d   | j                        d }~ww xY ww)N)sql)page_contentmetadatar   )r&   Queriesr   resultsr	   r)   r'   r(   KeyErrorr   args)r   query_resultsr   coles        r   	lazy_loadzRocksetLoader.lazy_loadg   s     ++11

 2 

' 	 ! 	C!%!<!<484E4EFS#s3xF" ))5 8<7I7IJc3s8mJ 	 GJ
  *FF1Itzz sH   A C)B5!B+/ B5B0B5(C)+
B55	C&>#C!!C&&C))r   r   r    r!   r   r   r   r"   r   r   r   r   r   r	   rD    r   r   r%   r%      s}    : .2IW88 8 3i	8
  S	*8 !)$uS#X*?)@#)E F8t8H- r   r%   N)typingr   r   r   r   r   r   langchain_core.documentsr	   )langchain_community.document_loaders.baser
   r"   r   	Exceptionr   r%   rE   r   r   <module>rJ      sM    A A - @/eCHo. /3 /
T) TfJ fr   