
    Ng                        d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ erd dlZddZ G d	 d
e          ZdS )    )annotationsN)TYPE_CHECKINGAnyDictIterableIteratorListOptionalSequenceDocument)
BaseLoaderreturnmastodonc                 L    	 dd l } n# t          $ r t          d          w xY w| S )Nr   zOMastodon.py package not found, please install it with `pip install Mastodon.py`)r   ImportError)r   s    i/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/document_loaders/mastodon.py_dependable_mastodon_importr      sK    
 
 
 
?
 
 	


 Os    !c                  4    e Zd ZdZ	 	 	 	 dddZddZddZdS )MastodonTootsLoaderzLoad the `Mastodon` 'toots'.d   FNhttps://mastodon.socialmastodon_accountsSequence[str]number_tootsOptional[int]exclude_repliesboolaccess_tokenOptional[str]api_base_urlstrc                    t                      }|pt          j                            d          } |j        ||          | _        || _        || _        || _        dS )a  Instantiate Mastodon toots loader.

        Args:
            mastodon_accounts: The list of Mastodon accounts to query.
            number_toots: How many toots to pull for each account. Defaults to 100.
            exclude_replies: Whether to exclude reply toots from the load.
                Defaults to False.
            access_token: An access token if toots are loaded as a Mastodon app. Can
                also be specified via the environment variables "MASTODON_ACCESS_TOKEN".
            api_base_url: A Mastodon API base URL to talk to, if not using the default.
                Defaults to "https://mastodon.social".
        MASTODON_ACCESS_TOKEN)r   r!   N)	r   osenvirongetMastodonapir   r   r   )selfr   r   r   r   r!   r   s          r   __init__zMastodonTootsLoader.__init__%   sh    ( /00#Nrz~~6M'N'N$8$%L
 
 
 "3(.    r   Iterator[Document]c           	   #     K   | j         D ]g}| j                            |          }| j                            |j        dd| j        d| j                  }|                     ||          E d{V  hdS )zLoad toots into documents.FT)
only_mediapinnedr   exclude_reblogslimitN)r   r)   account_lookupaccount_statusesidr   r   _format_toots)r*   accountusertootss       r   	lazy_loadzMastodonTootsLoader.lazy_loadB   s      - 
	7 
	7G8**733DH--  $ 4 $' .  E ))%6666666666
	7 
	7r,   r9   List[Dict[str, Any]]	user_infodictIterable[Document]c              #  n   K   |D ]/}|d         ||d         dud}t          |d         |          V  0dS )zlFormat toots into documents.

        Adding user info, and selected toot fields into the metadata.
        
created_atin_reply_to_idN)r@   r<   is_replycontent)page_contentmetadatar   )r*   r9   r<   tootrE   s        r   r6   z!MastodonTootsLoader._format_tootsP   sx        		 		D"<0& !12$> H
 !)_!      		 		r,   )r   FNr   )
r   r   r   r   r   r   r   r    r!   r"   )r   r-   )r9   r;   r<   r=   r   r>   )__name__
__module____qualname____doc__r+   r:   r6    r,   r   r   r   "   si        &&
 '* %&*5/ / / / /:7 7 7 7     r,   r   )r   r   )
__future__r   r%   typingr   r   r   r   r   r	   r
   r   langchain_core.documentsr   )langchain_community.document_loaders.baser   r   r   r   rK   r,   r   <module>rP      s   " " " " " " 					 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 . - - - - - @ @ @ @ @ @ OOO   > > > > >* > > > > >r,   