§
    šŠtjî  ã                   óÐ   — d dl Z d dlmZmZmZmZ d dlZd dlmZ d dl	m
Z
 dZedz   Zedz   Zedz   Z e j        e j        ¬	¦  «          e j        e¦  «        Z G d
„ de
¦  «        ZdS )é    N)ÚAnyÚDictÚListÚOptional)ÚDocument)Ú
BaseLoaderzhttps://api.notion.com/v1z/databases/{database_id}/queryz/pages/{page_id}z/blocks/{block_id}/children)Úlevelc                   ór  — e Zd ZdZ	 dddœdededee         deeeef                  d	df
d
„Z	d	e
e         fd„Zddifdeeef         d	e
eeef                  fd„Zdeeef         d	efd„Zddeded	efd„Zdi fddœdededeeef         deeeef                  d	ef
d„Zde
eeef                  d	efd„ZdS )ÚNotionDBLoaderaY  Load from `Notion DB`.

    Reads content from pages within a Notion Database.
    Args:
        integration_token (str): Notion integration token.
        database_id (str): Notion database id.
        request_timeout_sec (int): Timeout for Notion requests in seconds.
            Defaults to 10.
        filter_object (Dict[str, Any]): Filter object used to limit returned
            entries based on specified criteria.
            E.g.: {
                "timestamp": "last_edited_time",
                "last_edited_time": {
                    "on_or_after": "2024-02-07"
                }
            } -> will only return entries that were last edited
                on or after 2024-02-07
            Notion docs: https://developers.notion.com/reference/post-database-query-filter
            Defaults to None, which will return ALL entries.
    é
   N)Úfilter_objectÚintegration_tokenÚdatabase_idÚrequest_timeout_secr   Úreturnc                ó¬   — |st          d¦  «        ‚|st          d¦  «        ‚|| _        || _        d| j        z   dddœ| _        || _        |pi | _        dS )zInitialize with parameters.z"integration_token must be providedzdatabase_id must be providedzBearer zapplication/jsonz
2022-06-28)ÚAuthorizationzContent-TypezNotion-VersionN)Ú
ValueErrorÚtokenr   Úheadersr   r   )Úselfr   r   r   r   s        úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/document_loaders/notiondb.pyÚ__init__zNotionDBLoader.__init__)   s}   € ð !ð 	CÝÐAÑBÔBÐBØð 	=ÝÐ;Ñ<Ô<Ð<à&ˆŒ
Ø&ˆÔà&¨¬Ñ3Ø.Ø*ð
ð 
ˆŒð
 $7ˆÔ Ø*Ð0¨bˆÔÐÐó    c                 ób   ‡ — ‰                       ¦   «         }t          ˆ fd„|D ¦   «         ¦  «        S )zqLoad documents from the Notion database.
        Returns:
            List[Document]: List of documents.
        c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S )N)Ú	load_page)Ú.0Úpage_summaryr   s     €r   ú	<genexpr>z&NotionDBLoader.load.<locals>.<genexpr>G   s/   øè è € ÐTÐT°\�D—N’N <Ñ0Ô0ÐTÐTÐTÐTÐTÐTr   )Ú_retrieve_page_summariesÚlist)r   Úpage_summariess   ` r   ÚloadzNotionDBLoader.loadA   s9   ø€ ð
 ×6Ò6Ñ8Ô8ˆÝÐTÐTÐTÐTÀ^ÐTÑTÔTÑTÔTÐTr   Ú	page_sizeéd   Ú
query_dictc                 ó2  — g }	 |                       t                               | j        ¬¦  «        d|| j        ¬¦  «        }|                     |                     d¦  «        ¦  «         |                     d¦  «        sn|                     d¦  «        |d<   Œ“|S )	zi
        Get all the pages from a Notion database
        OR filter based on specified criteria.
        T)r   ÚPOST)Úmethodr'   r   ÚresultsÚhas_moreÚnext_cursorÚstart_cursor)Ú_requestÚDATABASE_URLÚformatr   r   ÚextendÚget)r   r'   ÚpagesÚdatas       r   r!   z'NotionDBLoader._retrieve_page_summariesI   s¤   € ð ')ˆð	AØ—=’=Ý×#Ò#°Ô0@Ð#ÑAÔAØØ%Ø"Ô0ð	 !ñ ô ˆDð �LŠL˜Ÿš )Ñ,Ô,Ñ-Ô-Ð-à—8’8˜JÑ'Ô'ð Øà)-¯ª°-Ñ)@Ô)@ˆJ�~Ñ&ð	Að ˆr   r   c                 óz  — |d         }i }|d                               ¦   «         D �]í\  }}|d         }|dk    r|                      |d         ¦  «        }�n¥|dk    r|                      |d         ¦  «        }�n‚|dk    r|d         rd„ |d         D ¦   «         ng }�n^|dk    r
|d         }�nN|d	k    r+|d	         r|d	         d
         › d|d	         d         › �nd}�n|dk    r|d         r|d         d         nd}nþ|dk    r_g }|d         rT|d         D ]K}|                     d¦  «        }	|	st                               d|› �¦  «         |                     |	¦  «         ŒLn™|dk    r|d         r|d         nd}n€|dk    r|d         r|d         nd}ng|dk    r|d         r|d         nd}nN|dk    r	|d         }n?|dk    r	|d         }n0|dk    r	|d         }n!|dk    r|d         r|d         d         nd}nd}|||                     ¦   «         <   �Œï||d<   t          |                      |¦  «        |¬¦  «        S )z\Read a page.

        Args:
            page_summary: Page summary from Notion API.
        ÚidÚ
propertiesÚtypeÚ	rich_textÚtitleÚmulti_selectc                 ó   — g | ]
}|d          ‘ŒS )Úname© ©r   Úitems     r   ú
<listcomp>z,NotionDBLoader.load_page.<locals>.<listcomp>y   s   € ÐHÐHÐH d�T˜&”\ÐHÐHÐHr   ÚurlÚ	unique_idÚprefixú-ÚnumberNÚstatusr>   Úpeoplez-Missing 'name' in 'people' property for page ÚdateÚlast_edited_timeÚcreated_timeÚcheckboxÚemailÚselect)Úpage_contentÚmetadata)	ÚitemsÚ_concatenate_rich_textr3   ÚloggerÚwarningÚappendÚlowerr   Ú_load_blocks)
r   r   Úpage_idrQ   Ú	prop_nameÚ	prop_dataÚ	prop_typeÚvaluerA   r>   s
             r   r   zNotionDBLoader.load_pagec   s!  € ð ˜tÔ$ˆð $&ˆð %1°Ô$>×$DÒ$DÑ$FÔ$Fð 7	0ñ 7	0Ñ ˆI�yØ! &Ô)ˆIà˜KÒ'Ð'Ø×3Ò3°I¸kÔ4JÑKÔK�‘Ø˜gÒ%Ð%Ø×3Ò3°I¸gÔ4FÑGÔG�‘Ø˜nÒ,Ð,ð ! Ô0ðÐHÐH¨i¸Ô.GÐHÑHÔHÐHàð ‘ð
 ˜eÒ#Ð#Ø! %Ô(�‘Ø˜kÒ)Ð)ð ! Ô-ð�y Ô-¨hÔ7Ð\Ð\¸)ÀKÔ:PÐQYÔ:ZÐ\Ð\Ð\àð ‘ð
 ˜hÒ&Ð&Ø7@ÀÔ7JÐT˜	 (Ô+¨FÔ3Ð3ÐPT��Ø˜hÒ&Ð&Ø�Ø˜XÔ&ð +Ø )¨(Ô 3ð +ð +˜Ø#Ÿxšx¨Ñ/Ô/˜Ø#ð Ý"ŸNšNð!6Ø,3ð!6ð !6ñô ð ð Ÿš TÑ*Ô*Ð*Ð*øØ˜fÒ$Ð$Ø-6°vÔ->ÐH˜	 &Ô)Ð)ÀD��ØÐ0Ò0Ð0ð !Ð!3Ô4ð�IÐ0Ô1Ð1àð �ð
 ˜nÒ,Ð,Ø5>¸~Ô5NÐX˜	 .Ô1Ð1ÐTX��Ø˜jÒ(Ð(Ø! *Ô-��Ø˜gÒ%Ð%Ø! 'Ô*��Ø˜hÒ&Ð&Ø! (Ô+��Ø˜hÒ&Ð&Ø7@ÀÔ7JÐT˜	 (Ô+¨FÔ3Ð3ÐPT��à�à*/ˆH�Y—_’_Ñ&Ô&Ñ'Ñ'à ˆ�‰å T×%6Ò%6°wÑ%?Ô%?È(ÐSÑSÔSÐSr   r   Úblock_idÚnum_tabsc                 ó<  — g }|}|�r|                       t                               |¬¦  «        ¦  «        }|d         D ]²}||d                  }d|vrŒg }|d         D ]-}	d|	v r'|                     d|z  |	d         d         z   ¦  «         Œ.|d         r5|                      |d	         |d
z   ¬¦  «        }
|                     |
¦  «         |                     d                     |¦  «        ¦  «         Œ³|                     d¦  «        }|�°d                     |¦  «        S )zRead a block and its children.)r^   r+   r9   r:   Útextú	ÚcontentÚhas_childrenr7   é   )r_   ú
r-   )r/   Ú	BLOCK_URLr1   rV   rX   Újoinr3   )r   r^   r_   Úresult_lines_arrÚcur_block_idr5   ÚresultÚ
result_objÚcur_result_text_arrr:   Úchildren_texts              r   rX   zNotionDBLoader._load_blocks­   s\  € à&(ÐØ$ˆàñ 	3Ø—=’=¥×!1Ò!1¸<Ð!1Ñ!HÔ!HÑIÔIˆDà˜yœ/ð Hð H�Ø# F¨6¤NÔ3�
à jÐ0Ð0Øà13Ð#à!+¨KÔ!8ð ð �IØ Ð*Ð*Ø+×2Ò2Ø  8™O¨i¸Ô.?À	Ô.JÑJñô ð øð ˜.Ô)ð >Ø$(×$5Ò$5Ø˜tœ¨x¸!©|ð %6ñ %ô %�Mð (×.Ò.¨}Ñ=Ô=Ð=à ×'Ò'¨¯	ª	Ð2EÑ(FÔ(FÑGÔGÐGÐGàŸ8š8 MÑ2Ô2ˆLð3 ñ 	3ð6 �yŠyÐ)Ñ*Ô*Ð*r   ÚGETrC   r*   c                óÎ   — |                      ¦   «         }|r||d<   t          j        ||| j        || j        ¬¦  «        }|                     ¦   «          |                     ¦   «         S )NÚfilter)r   ÚjsonÚtimeout)ÚcopyÚrequestsÚrequestr   r   Úraise_for_statusrr   )r   rC   r*   r'   r   Újson_payloadÚress          r   r/   zNotionDBLoader._requestÏ   sr   € ð "—’Ñ(Ô(ˆØð 	3Ø%2ˆL˜Ñ"ÝÔØØØ”LØØÔ,ð
ñ 
ô 
ˆð 	×ÒÑÔÐØ�xŠx‰zŒzÐr   Úrich_text_arrayc                 ó@   — d                      d„ |D ¦   «         ¦  «        S )z4Concatenate all text content from a rich_text array.Ú c              3   ó&   K  — | ]}|d          V — ŒdS )Ú
plain_textNr?   r@   s     r   r    z8NotionDBLoader._concatenate_rich_text.<locals>.<genexpr>æ   s'   è è € ÐFÐF¨d�t˜LÔ)ÐFÐFÐFÐFÐFÐFr   )rh   )r   rz   s     r   rS   z%NotionDBLoader._concatenate_rich_textä   s#   € à�wŠwÐFÐF°oÐFÑFÔFÑFÔFÐFr   )r   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Úintr   r   r   r   r   r$   r!   r   rX   r/   rS   r?   r   r   r   r      s
  € € € € € ðð ð2 .0ð	1ð 37ð1ð 1ð 1àð1ð ð1ð & cœ]ð	1ð    S¨# X¤Ô/ð1ð 
ð1ð 1ð 1ð 1ð0U�d˜8”nð Uð Uð Uð Uð -8¸Ð+=ðð Ø˜s C˜xœ.ðà	ˆd�3˜�8ŒnÔ	ðð ð ð ð4HT d¨3°¨8¤nð HT¸ð HTð HTð HTð HTðT +ð  + Sð  +°Cð  +Àð  +ð  +ð  +ð  +ðJ Ø%'ð	ð 37ðð ð àðð ðð ˜˜c˜”Nð	ð    S¨# X¤Ô/ðð 
ðð ð ð ð*G°d¸4ÀÀSÀ¼>Ô6Jð GÈsð Gð Gð Gð Gð Gð Gr   r   )ÚloggingÚtypingr   r   r   r   ru   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   ÚNOTION_BASE_URLr0   ÚPAGE_URLrg   ÚbasicConfigÚWARNINGÚ	getLoggerr   rT   r   r?   r   r   ú<module>rŽ      sù   ðØ €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø -Ð -Ð -Ð -Ð -Ð -à @Ð @Ð @Ð @Ð @Ð @à-€ØÐ!AÑA€ØÐ/Ñ/€ØÐ;Ñ;€	ð €Ô ˜'œ/Ð *Ñ *Ô *Ð *Ø	ˆÔ	˜8Ñ	$Ô	$€ðSGð SGð SGð SGð SG�Zñ SGô SGð SGð SGð SGr   