a
    bg                     @   sf   d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ eeZG dd deZdS )    N)AnyDictListOptional)Document)
BaseLoaderc                   @   sZ   e Zd ZdZdee eddddZddddZe	e
 dd	d
Ze	e
 dddZdS )SurrealDBLoaderzLoad SurrealDB documents.N)filter_criteriakwargsreturnc              
   K   s   zddl m} W n. ty> } ztd|W Y d }~n
d }~0 0 |dd| _| jdd dkrn|| j| _ntd|p|i | _d	| jv rtd
|dd| _|dd| _	|d	d| _
|| j| _|| _d S )Nr   )SurrealzZCannot import from surrealdb.
                please install with `pip install surrealdb`.dburlzws://localhost:8000/rpc   wsz6Only websocket connections are supported at this time.tablezCkey `table` is not a valid criteria for `filter_criteria` argument.nsZ	langchaindbZdatabaseZ	documents)Z	surrealdbr   ImportErrorpopr   sdb
ValueErrorr	   r   r   r   r
   )selfr	   r
   r   e r   |/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/surrealdb.py__init__   s,    

zSurrealDBLoader.__init__r   c                    sp   | j  I dH  d| jv rTd| jv rT| jd}| jd}| j ||dI dH  | j | j| jI dH  dS )zr
        Initialize connection to surrealdb database
        and authenticate if credentials are provided
        NZdb_userZdb_pass)userpass)r   connectr
   getZsigninZuser   r   )r   r   passwordr   r   r   
initialize1   s    zSurrealDBLoader.initializec                    s"   t t d fdd}t| S )Nr   c                      s      I d H    I d H S )N)r"   aloadr   r   r   r   _load?   s    z#SurrealDBLoader.load.<locals>._load)r   r   asynciorun)r   r%   r   r$   r   load>   s    zSurrealDBLoader.loadc                    s   d}| j dur^t| j dkr^|d7 }t| j D ].\}}|d|dkrFdnd d| d| 7 }q.| j| j| jd	 | j|d
| ji| j I dH } fdd|d d D S )z Load data into Document objects.z!SELECT * FROM type::table($table)Nr   z WHERE  AND z = $)r   r   r   r   c                    s2   g | ]*}t t|d |d  i|d  dqS )idmetadata)Zpage_contentr-   )r   jsondumps).0resultr-   r   r   
<listcomp>W   s
   z)SurrealDBLoader.aload.<locals>.<listcomp>r1   )r	   len	enumerater   r   r   r   query)r   r6   idxkeyresultsr   r2   r   r#   E   s    (


zSurrealDBLoader.aload)N)__name__
__module____qualname____doc__r   r   r   r   r"   r   r   r(   r#   r   r   r   r   r      s    !r   )r&   r.   loggingtypingr   r   r   r   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   	getLoggerr:   loggerr   r   r   r   r   <module>   s   
