
    dh                         S SK r S SKJrJrJrJr  S SKrS SKJr  S SK	J
r
  Sr\S-   r\S-   r\S-   r\ R                  " \ R                   S	9  \ R"                  " \5      r " S
 S\
5      rg)    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                   D   \ rS rSrSr SSS.S\S\S\\   S\\\\	4      S	S4
S
 jjjr
S	\\   4S jrSS04S\\\	4   S	\\\\	4      4S jjrS\\\	4   S	\4S jrSS\S\S	\4S jjrS0 4SS.S\S\S\\\	4   S\\\\	4      S	\	4
S jjjrS\\\\	4      S	\4S jrSrg)NotionDBLoader   a  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                    U(       d  [        S5      eU(       d  [        S5      eXl        X l        SU R                  -   SSS.U l        X0l        U=(       d    0 U l        g)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        e/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/notiondb.py__init__NotionDBLoader.__init__)   s]     !ABB;<<&
&&3.*

 $7 *0b    c                 N   ^  T R                  5       n[        U 4S jU 5       5      $ )zYLoad documents from the Notion database.
Returns:
    List[Document]: List of documents.
c              3   D   >#    U H  nTR                  U5      v   M     g 7f)N)	load_page).0page_summaryr   s     r   	<genexpr>&NotionDBLoader.load.<locals>.<genexpr>G   s     T^\DNN<00^s    )_retrieve_page_summarieslist)r   page_summariess   ` r   loadNotionDBLoader.loadA   s$    
 668T^TTTr   	page_sized   
query_dictc                    / n U R                  [        R                  U R                  S9SUU R                  S9nUR                  UR                  S5      5        UR                  S5      (       d   U$ UR                  S5      US'   M  )zQ
Get all the pages from a Notion database
OR filter based on specified criteria.
)r   POST)methodr*   r   resultshas_morenext_cursorstart_cursor)_requestDATABASE_URLformatr   r   extendget)r   r*   pagesdatas       r   r#   'NotionDBLoader._retrieve_page_summariesI   s     ')==##0@0@#A%"00	 ! D LL),-88J''  *.-)@J~& r   r    c                    US   n0 nUS   R                  5        GH  u  pEUS   nUS:X  a  U R                  US   5      nGOUS:X  a  U R                  US   5      nGOcUS:X  a%  US   (       a  US    Vs/ sH  oS   PM	     snO/ nGO8US:X  a  US   nGO+US	:X  a!  US	   (       a  US	   S
    SUS	   S    3OSnGOUS:X  a  US   (       a  US   S   OSnOUS:X  aZ  / nUS   (       aM  US    HD  nUR                  S5      n	U	(       d  [        R	                  SU 35        UR                  U	5        MF     OUS:X  a  US   (       a  US   OSnOqUS:X  a  US   (       a  US   OSnOYUS:X  a  US   (       a  US   OSnOAUS:X  a  US   nO5US:X  a  US   nO)US:X  a  US   nOUS:X  a  US   (       a  US   S   OSnOSnXsUR                  5       '   GM     X#S'   [        U R                  U5      US9$ s  snf )zDRead a page.

Args:
    page_summary: Page summary from Notion API.
id
propertiestype	rich_texttitlemulti_selectnameurl	unique_idprefix-numberNstatuspeoplez-Missing 'name' in 'people' property for page datelast_edited_timecreated_timecheckboxemailselect)page_contentmetadata)	items_concatenate_rich_textr6   loggerwarningappendlowerr   _load_blocks)
r   r    page_idrP   	prop_name	prop_data	prop_typevalueitemrA   s
             r   r   NotionDBLoader.load_pagec   s|    t$ $& %1$>$D$D$F I!&)IK'33Ik4JKg%33Ig4FGn, !0 /8.GH.Gd&\.GH 
 e#!%(k) !- !-h78)K:PQY:Z9[\ 
 h&7@7J	(+F3PTh&X& )( 3#xx/#"NN!,,39!6 T* !4 f$-6v->	&)D00 !!34 01 
 n,5>~5N	.1TXj(!*-g%!'*h&!(+h&7@7J	(+F3PT*/Y__&'o %Gr !T%6%6w%?(SSe Is   5G5block_idnum_tabsc                    / nUnU(       a  U R                  [        R                  US95      nUS    H  nXfS      nSU;  a  M  / nUS    H(  n	SU	;   d  M  UR                  SU-  U	S   S   -   5        M*     US   (       a'  U R	                  US	   US
-   S9n
UR                  U
5        UR                  SR                  U5      5        M     UR                  S5      nU(       a  M  SR                  U5      $ )zRead a block and its children.)r_   r.   r=   r>   text	contenthas_childrenr;      )r`   
r0   )r2   	BLOCK_URLr4   rU   rW   joinr6   )r   r_   r`   result_lines_arrcur_block_idr8   result
result_objcur_result_text_arrr>   children_texts              r   rW   NotionDBLoader._load_blocks   s   &($==!1!1<!1!HIDy/#6N3
j013#!+K!8I*+22 8Oi.?	.JJ "9 .)$($5$5tx!| %6 %M (..}= ''		2E(FG) *,  88M2L3 l6 yy)**r   GETrB   r-   c                    UR                  5       nU(       a  XES'   [        R                  " UUU R                  UU R                  S9nUR                  5         UR                  5       $ )Nfilter)r   jsontimeout)copyrequestsrequestr   r   raise_for_statusrt   )r   rB   r-   r*   r   json_payloadress          r   r2   NotionDBLoader._request   s^     "(%2"LL,,
 	xxzr   rich_text_arrayc                 2    SR                  S U 5       5      $ )z4Concatenate all text content from a rich_text array. c              3   (   #    U H	  oS    v   M     g7f)
plain_textN )r   r]   s     r   r!   8NotionDBLoader._concatenate_rich_text.<locals>.<genexpr>   s     FodL)os   )ri   )r   r}   s     r   rR   %NotionDBLoader._concatenate_rich_text   s    wwFoFFFr   )r   r   r   r   r   )
   )r   )__name__
__module____qualname____firstlineno____doc__strr   intr   r   r   r   r   r&   r#   r   rW   r2   rR   __static_attributes__r   r   r   r   r      s^   2 .0	1 3711 1 &c]	1  S#X/1 
10Ud8n U -8+=sCx.	d38n	4HTd38n HT HTT +S  +C  +  +J %'	 37  cN	  S#X/ 
*Gd4S>6J Gs Gr   r   )loggingtypingr   r   r   r   rw   langchain_core.documentsr   )langchain_community.document_loaders.baser   NOTION_BASE_URLr3   PAGE_URLrh   basicConfigWARNING	getLoggerr   rS   r   r   r   r   <module>r      sq     , ,  - @-!AA//;;	   '// *			8	$SGZ SGr   