
    7|h                         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j                  e      Z G d de      Zy)    N)AnyDictListOptional)Document)
BaseLoaderc                   Z    e Zd ZdZ	 d
dee   deddfdZddZde	e
   fdZde	e
   fd	Zy)SurrealDBLoaderzLoad SurrealDB documents.Nfilter_criteriakwargsreturnc                    	 ddl m} |j                  dd      | _        | j                  dd dk(  r || j                        | _        nt        d      |xs i | _        d	| j                  v rt        d
      |j                  dd      | _        |j                  dd      | _	        |j                  d	d      | _
         || j                        | _        || _        y # t        $ r}t        d      |d }~ww xY w)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.ns	langchaindbdatabase	documents)	surrealdbr   ImportErrorpopr   sdb
ValueErrorr   r   r   r   r   )selfr   r   r   es        m/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/document_loaders/surrealdb.py__init__zSurrealDBLoader.__init__   s    
	) ZZ)BC
::a?d"tzz*DHUVV.4"d***U  **T;/**T:.ZZ5
4::&1  	@ 	s   C 	C6%C11C6c                   K   | j                   j                          d{    d| j                  v rjd| j                  v r\| j                  j                  d      }| j                  j                  d      }| j                   j	                  ||d       d{    | j                   j                  | j                  | j                         d{    y7 7 ?7 	w)zr
        Initialize connection to surrealdb database
        and authenticate if credentials are provided
        Ndb_userdb_pass)userpass)r   connectr   getsigninuser   r   )r   r%   passwords      r    
initializezSurrealDBLoader.initialize1   s     
 hh   #	T[[(@;;??9-D{{y1H((//4"BCCChhll477DGG,,, 	! D,s4   CCA7CC7CCCCCc                 ^     dt         t           f fd}t        j                   |             S )Nr   c                  t   K    j                          d {     j                          d {   S 7 7 wN)r,   aload)r   s   r    _loadz#SurrealDBLoader.load.<locals>._load?   s/     //###%% $%s   848688)r   r   asynciorun)r   r1   s   ` r    loadzSurrealDBLoader.load>   s&    	&T(^ 	& {{57##    c           	        K   d}| j                   Ot        | j                         dkD  r7|dz  }t        | j                         D ]  \  }}|d|dkD  rdnd d| d| z  } | j                  | j                  | j
                  d	}| j                  j                  |d
| j
                  i| j                          d{   }|d   d   D cg c].  }t        t        j                  |      d|d   i|d   |      0 c}S 7 Dc c}w w)z Load data into Document objects.z!SELECT * FROM type::table($table)Nr   z WHERE  AND z = $)r   r   r   r   resultidmetadata)page_contentr<   )r   len	enumerater   r   r   r   queryr   jsondumps)r   r@   idxkeyr<   resultsr:   s          r    r0   zSurrealDBLoader.aloadE   s)     4+D4H4H0IA0MYE%d&:&:; KSQauR8#d3%JJK ''''ZZ

 GTZZ@4+?+?@
 
 "!*X.
  !%F!3"F4LSF:4FS(S
 	
	

s$   B9D;D <D
3D=DDr/   )r   N)__name__
__module____qualname____doc__r   r   r   r!   r,   r   r   r4   r0    r5   r    r
   r
      sU    # +/!$  
	B-$d8n $
T(^ 
r5   r
   )r2   rA   loggingtypingr   r   r   r   langchain_core.documentsr   )langchain_community.document_loaders.baser   	getLoggerrF   loggerr
   rJ   r5   r    <module>rQ      s:       , , - @			8	$R
j R
r5   