a
    bg                     @   sP   d dl Z d dlmZmZmZ d dlZd dlmZ d dlm	Z	 G dd de	Z
dS )    N)DictIteratorList)Document)
BaseLoaderc                   @   s   e Zd ZdZd"eedddZeeeef dddZe	dd	d
Z
e	ee dddZe	ee	 dddZe	e	edddZeedddZe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 )#YuqueLoaderLoad documents from `Yuque`.https://www.yuque.comaccess_tokenapi_urlc                 C   s   || _ || _dS )zInitialize with Yuque access_token and api_url.

        Args:
            access_token: Personal access token - see https://www.yuque.com/settings/tokens.
            api_url: Yuque API url.
        Nr
   )selfr   r    r   x/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/yuque.py__init__   s    zYuqueLoader.__init__)returnc                 C   s   d| j dS )Nzapplication/json)zContent-TypezX-Auth-Token)r   r   r   r   r   headers   s    zYuqueLoader.headersc                 C   s$   | j  d}| j|d}|d d S )Nz/api/v2/userurldataidr   http_getr   r   responser   r   r   get_user_id   s    zYuqueLoader.get_user_id)user_idr   c                 C   s&   | j  d| d}| j|d}|d S )Nz/api/v2/users/z/reposr   r   r   )r   r   r   r   r   r   r   	get_books$   s    zYuqueLoader.get_books)book_idr   c                 C   s0   | j  d| d}| j|d}dd |d D S )N/api/v2/repos/z/docsr   c                 S   s   g | ]}|d  qS )r   r   ).0documentr   r   r   
<listcomp>.       z0YuqueLoader.get_document_ids.<locals>.<listcomp>r   r   )r   r   r   r   r   r   r   get_document_ids*   s    zYuqueLoader.get_document_ids)r   document_idr   c                 C   s*   | j  d| d| }| j|d}|d S )Nr    z/docs/r   r   r   )r   r   r&   r   r   r   r   r   get_document0   s    zYuqueLoader.get_document)r"   r   c                 C   s8   |  |d }|d |d |d |d d}t||dS )Nbodytitledescription
created_at
updated_at)r)   r*   r+   r,   )Zpage_contentmetadata)parse_document_bodyr   )r   r"   contentr-   r   r   r   parse_document6   s    zYuqueLoader.parse_document)r(   r   c                 C   s    t dd| }t dd|}|S )Nz<a name="(.*)"></a> z	<br\s*/?>)resub)r(   resultr   r   r   r.   A   s    zYuqueLoader.parse_document_body)r   r   c                 C   s    t j|| jd}|  | S )N)r   )requestsgetr   raise_for_statusjsonr   r   r   r   r   H   s    zYuqueLoader.http_getc           	      c   sX   |   }| |}|D ]<}|d }| |}|D ] }| ||}| |}|V  q0qd S )Nr   )r   r   r%   r'   r0   )	r   r   booksbookr   Zdocument_idsr&   r"   Zparsed_documentr   r   r   get_documentsN   s    


zYuqueLoader.get_documentsc                 C   s   t |  S )r   )listr;   r   r   r   r   loadZ   s    zYuqueLoader.loadN)r	   )__name__
__module____qualname____doc__strr   propertyr   r   intr   r   r   r%   r'   r   r0   staticmethodr.   r   r   r;   r=   r   r   r   r   r   
   s   
r   )r2   typingr   r   r   r5   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   r   r   r   r   r   <module>   s
   