
    ih                        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y)
    )annotationsN)TYPE_CHECKINGAnyDictIterableIteratorListOptionalSequenceDocument)
BaseLoaderc                 @    	 dd l } | S # t        $ r t        d      w xY w)Nr   zOMastodon.py package not found, please install it with `pip install Mastodon.py`)mastodonImportError)r   s    k/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain_community/document_loaders/mastodon.py_dependable_mastodon_importr      s4    
 O  
?
 	

s    c                  P    e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 d	dZy)
MastodonTootsLoaderzLoad the `Mastodon` 'toots'.Nc                    t               }|xs t        j                  j                  d      } |j                  ||      | _        || _        || _        || _        y)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)access_tokenapi_base_urlN)	r   osenvirongetMastodonapimastodon_accountsnumber_tootsexclude_replies)selfr   r    r!   r   r   r   s          r   __init__zMastodonTootsLoader.__init__%   sW    ( /0#Nrzz~~6M'N$8$$%L
 "3(.    c           	   #    K   | j                   D ]v  }| j                  j                  |      }| j                  j                  |j                  dd| j
                  d| j                        }| j                  ||      E d{    x y7 w)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     -- 
	7G88**73DHH--  $ 4 4 $'' . E ))%666
	7 7s   A?BB	Bc              #  Z   K   |D ]"  }|d   ||d   dud}t        |d   |       $ yw)zlFormat toots into documents.

        Adding user info, and selected toot fields into the metadata.
        
created_atin_reply_to_idN)r3   	user_infois_replycontent)page_contentmetadatar   )r"   r0   r5   tootr9   s        r   r-   z!MastodonTootsLoader._format_tootsP   sP       		D"<0& !12$>H
 !)_! 		s   )+)d   FNzhttps://mastodon.social)
r   zSequence[str]r    zOptional[int]r!   boolr   zOptional[str]r   str)returnzIterator[Document])r0   zList[Dict[str, Any]]r5   dictr>   zIterable[Document])__name__
__module____qualname____doc__r#   r1   r-    r$   r   r   r   "   sj    &
 '* %&*5/(/ $/ 	/
 $/ /:7)6:	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   rD   r$   r   <module>rI      s9    " 		 	 	 . @>* >r$   