o
    Zh                     @   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#dedefddZedeeef fdd	Zde	fd
dZ
de	dee fddZde	dee	 fddZde	de	defddZdedefddZededefddZdedefddZdee fddZdee f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.
        N)r
   r   )selfr
   r    r   a/var/www/html/lang_env/lib/python3.10/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_idc                 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_idc                 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>.   s    z0YuqueLoader.get_document_ids.<locals>.<listcomp>r   r   )r   r   r   r   r   r   r   get_document_ids*   s   zYuqueLoader.get_document_idsdocument_idc                 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_documentr!   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_documentr&   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_bodyr   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   sZ    |   }| |}|D ]}|d }| |}|D ]}| ||}| |}|V  qqd S )Nr   )r   r   r#   r%   r.   )	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   )listr9   r   r   r   r   loadZ   s   zYuqueLoader.loadN)r	   )__name__
__module____qualname____doc__strr   propertyr   r   intr   r   r   r#   r%   r   r.   staticmethodr,   r   r   r9   r;   r   r   r   r   r   
   s    
r   )r0   typingr   r   r   r3   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   r   r   r   r   r   <module>   s    