U
    h                     @   sx   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
 eeeef  edddZG dd deZG d	d
 d
e
ZdS )    )AnyCallableIteratorListOptionalTuple)Document)
BaseLoader)docsreturnc                 C   s   d dd | D S )z#Default joiner for content columns.
c                 S   s   g | ]}|d  qS )    ).0docr   r   R/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/document_loaders/rocksetdb.py
<listcomp>
   s     z"default_joiner.<locals>.<listcomp>)join)r
   r   r   r   default_joiner   s    r   c                       s(   e Zd ZdZeed fddZ  ZS )ColumnNotFoundErrorzColumn not found error.)missing_keyqueryc                    s   t  d| d|  d S )NzColumn "z" not selected in query:
)super__init__)selfr   r   	__class__r   r   r      s    zColumnNotFoundError.__init__)__name__
__module____qualname____doc__strr   __classcell__r   r   r   r   r      s   r   c                
   @   s`   e Zd ZdZdefeeee eee  e	ee
eef  gef dddZee dddZdS )	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           	      C   s   z ddl m}m} ddlm} W n tk
r<   tdY nX t||sZtdt| t||svtdt| || _	|| _
|| _|| _|| _|| _|| _z| j	d W n tk
r   Y nX dS )	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 Z	langchainN)Zrocksetr(   r)   Zrockset.modelsr*   ImportError
isinstance
ValueErrortyper$   r   r%   r'   r&   Z	paginatorZrequest_modelZset_applicationAttributeError)	r   r$   r   r%   r&   r'   r(   r)   r*   r   r   r   r   -   s4    


zRocksetLoader.__init__)r   c                 #   s   | j jj| jdj}|D ] zFt|  fdd| jD | jd k	rV fdd| jD n dV  W q tk
r } zt	|j
d | jW 5 d }~X Y qX qd S )N)Zsqlc                    s   g | ]}| | fqS r   r   r   colr   r   r   r   o   s     z+RocksetLoader.lazy_load.<locals>.<listcomp>c                    s   i | ]}| | qS r   r   r0   r2   r   r   
<dictcomp>q   s      z+RocksetLoader.lazy_load.<locals>.<dictcomp>)Zpage_contentmetadatar   )r$   ZQueriesr   resultsr   r'   r%   r&   KeyErrorr   args)r   Zquery_resultser   r2   r   	lazy_loadg   s(     zRocksetLoader.lazy_load)r   r   r   r    r   r   r   r!   r   r   r   r   r   r   r9   r   r   r   r   r#      s   
:r#   N)typingr   r   r   r   r   r   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser	   r!   r   	Exceptionr   r#   r   r   r   r   <module>   s
    