
    Ng                         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                   F   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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        i/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/document_loaders/notiondb.py__init__zNotionDBLoader.__init__)   s}     ! 	CABBB 	=;<<<&
&&3.*
 

 $7 *0b    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\DNN<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_sized   
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 LL),,---88J'' )--)@)@J~&	A r   r   c                    |d         }i }|d                                          D ]\  }}|d         }|dk    r |d         r|d         d         d         nd}n|dk    r |d         r|d         d         d         n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_textr   
plain_textNtitlemulti_selectc                     g | ]
}|d          S )name )r   items     r   
<listcomp>z,NotionDBLoader.load_page.<locals>.<listcomp>}   s    HHHdT&\HHHr   url	unique_idprefix-numberstatusr?   peoplez-Missing 'name' in 'people' property for page datelast_edited_timecreated_timecheckboxemailselect)page_contentmetadata)itemsr3   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   sE    t$ $&$0$>$D$D$F$F =	0 =	0 Iy!&)IK'' !-Ik*1-l;; 
 g%%;DW;MWIg&q),77SW  n,, !0HHi.GHHHH 
 e##!%(k)) !-y-h7\\)K:PQY:Z\\\ 
 h&&7@7JT	(+F33PTh&&X& + )( 3 + +#xx//# "NN!6,3!6 !6   T****f$$-6v->H	&))D000 !!34I011 
 n,,5>~5NX	.11TXj((!*-g%%!'*h&&!(+h&&7@7JT	(+F33PT*/HY__&&'' T%6%6w%?%?(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   rU   rW   joinr3   )r   r]   r^   result_lines_arrcur_block_idr5   result
result_objcur_result_text_arrr:   children_texts              r   rW   zNotionDBLoader._load_blocks   s\   &($ 	3==!1!1<!1!H!HIIDy/ H H#F6N3
j0013#!+K!8  I**+22 8Oi.?	.JJ   .) >$($5$5tx!| %6 % %M (..}=== ''		2E(F(FGGGG88M22L3  	36 yy)***r   GETrC   r*   c                    |                                 }|r||d<   t          j        ||| j        || j                  }|                                 |                                S )Nfilter)r   jsontimeout)copyrequestsrequestr   r   raise_for_statusrq   )r   rC   r*   r'   r   json_payloadress          r   r/   zNotionDBLoader._request   sr     "(( 	3%2L"L,
 
 
 	xxzzr   )r   )r   )__name__
__module____qualname____doc__strr   intr   r   r   r   r   r$   r!   r   rW   r/   r@   r   r   r   r      s        2 .0	1 371 1 11 1 &c]	1  S#X/1 
1 1 1 10Ud8n U U U U -8+= sCx.	d38n	   4LTd38n LT LT LT LT LT\ +  +S  +C  +  +  +  +  +J %'	 37    cN	  S#X/ 
     r   r   )loggingtypingr   r   r   r   rt   langchain_core.documentsr   )langchain_community.document_loaders.baser   NOTION_BASE_URLr0   PAGE_URLrf   basicConfigWARNING	getLoggerry   rS   r   r@   r   r   <module>r      s     , , , , , , , , , , , ,  - - - - - - @ @ @ @ @ @-!AA//;;	  '/ * * * *		8	$	$S S S S SZ S S S S Sr   