a
    bg                     @   sl   d dl 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 d dlmZ d dlmZ G dd deZdS )	    N)AnyDictIteratorListOptionalUnion)Document)get_from_dict_or_env)PyPDFLoader)
BaseLoaderc                   @   s   e Zd ZdZdeee ee dddZeeedddZ	e
d	d
dZe
e
eeef edddZee d	ddZee d	ddZee d	ddZee d	ddZdS )RSpaceLoadera'  Load content from RSpace notebooks, folders, documents or PDF Gallery files.

    Map RSpace document <-> Langchain Document in 1-1. PDFs are imported using PyPDF.

    Requirements are rspace_client (`pip install rspace_client`) and PyPDF if importing
     PDF docs (`pip install pypdf`).

    N)	global_idapi_keyurlc                 C   s8   |||d}t |}|d | _|d | _|d | _dS )a  api_key: RSpace API key - can also be supplied as environment variable
        'RSPACE_API_KEY'
        url: str
        The URL of your RSpace instance - can also be supplied as environment
        variable 'RSPACE_URL'
        global_id: str
         The global ID of the resource to load,
        e.g. 'SD12344' (a single document); 'GL12345'(A PDF file in the gallery);
        'NB4567' (a notebook); 'FL12244' (a folder)
        )r   r   r   r   r   r   N)r   validate_environmentr   r   r   )selfr   r   r   argsZverified_args r   y/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/rspace.py__init__   s    


zRSpaceLoader.__init__)valuesreturnc                 C   s@   t |dd|d< t |dd|d< d|vs4|d du r<td|S )z3Validate that API key and URL exist in environment.r   ZRSPACE_API_KEYr   Z
RSPACE_URLr   NzBNo value supplied for global_id. Please supply an RSpace global ID)r	   
ValueError)clsr   r   r   r   r   ,   s    z!RSpaceLoader.validate_environment)r   c                 C   s|   zddl m}m} W n ty.   tdY n0 z|| j| j}|  W n$ typ   td| j dY n0 ||j	fS )zCreate a RSpace client.r   )elnfield_contentz(You must run `pip install rspace_client`z%Unable to initialize client - is url z or api key  correct?)
Zrspace_client.elnr   r   ImportErrorZ	ELNClientr   r   Z
get_status	ExceptionZFieldContent)r   r   r   r   r   r   _create_rspace_client7   s    
z"RSpaceLoader._create_rspace_client)clir   d_idr   c                 C   s   d}| |}|d|d  d7 }|d D ]6}||d  d7 }||d }|| 7 }|d7 }q*tdd	|d  d
|d  i|dS )N z<h2>namez<h2/>fields
contentsourcezrspace: -ZglobalId)metadataZpage_content)Zget_documentZget_textr   )r   r   r   r    r%   docfZfcr   r   r   _get_docK   s    

zRSpaceLoader._get_docc                 c   s"   |   \}}| ||| jV  d S )N)r   r+   r   )r   r   r   r   r   r   _load_structured_docY   s    z!RSpaceLoader._load_structured_docc                 c   s\   |   \}}| jr,|j| jdd  dgd}dd |d D }|D ]}| |||V  qBd S )N   Zdocument)Z	folder_idZtypesToIncludec                 S   s   g | ]}|d  qS )idr   ).0dr   r   r   
<listcomp>c       z2RSpaceLoader._load_folder_tree.<locals>.<listcomp>records)r   r   Zlist_folder_treer+   )r   r   r   Zdocs_in_folderZdoc_idsZdoc_idr   r   r   _load_folder_tree]   s    zRSpaceLoader._load_folder_treec           	      c   s~   |   \}}|| j}tj|d \}}| dkrz| j d}|| j| t|}|	 D ]}| j|j
d< |V  qbd S )Nr"   z.pdfZ
rspace_src)r   Zget_file_infor   ospathsplitextlowerZdownload_filer
   	lazy_loadr(   )	r   r   r   	file_info_extoutfileZ
pdf_loaderZpdfr   r   r   	_load_pdfg   s    zRSpaceLoader._load_pdfc                 c   s   | j r&d| j v r&|  D ]
}|V  qn\| j rLd| j v rL|  D ]
}|V  q>n6| j rz| j dd dv rz|  D ]
}|V  qlntdd S )NZGLZSDr   r-   )ZFLZNBzUnknown global ID type)r   r>   r,   r4   r   )r   r0   r   r   r   r9   s   s    


zRSpaceLoader.lazy_load)NN)__name__
__module____qualname____doc__strr   r   classmethodr   r   r   r   r   intr   r+   r   r,   r4   r>   r9   r   r   r   r   r      s   
 

r   )r5   typingr   r   r   r   r   r   Zlangchain_core.documentsr   Zlangchain_core.utilsr	   Z$langchain_community.document_loadersr
   Z)langchain_community.document_loaders.baser   r   r   r   r   r   <module>   s    