
    `gj!                    
   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z
 g dZ eh d      ZdZd	Zd
ZdZdZdZdZ G d de      Zd dZd!dZd dZd"dZd dZd#dZd dZd dZd$dZd%dZ d&dZ!d'dZ"d(dZ#d)dZ$d*dZ%y)+zStdlib document-to-text extraction for ``read_file``.

Supports Jupyter notebooks, DOCX, and XLSX without adding hard dependencies.
Malformed documents raise :class:`ExtractionError`; callers can then fall back to
normal text/binary handling.
    )annotationsN)Path)ElementTree)EXTRACTABLE_EXTENSIONSExtractionErrorextract_document_textis_extractable_document>   .docx.xlsx.ipynbi   i     z<http://schemas.openxmlformats.org/wordprocessingml/2006/mainz9http://schemas.openxmlformats.org/spreadsheetml/2006/mainzChttp://schemas.openxmlformats.org/officeDocument/2006/relationshipsz<http://schemas.openxmlformats.org/package/2006/relationshipsc                      e Zd ZdZy)r   zDRaised when a supported-looking document cannot be rendered as text.N)__name__
__module____qualname____doc__     E/root/.hermes/venv/lib/python3.12/site-packages/tools/read_extract.pyr   r      s    Nr   r   c                `    t        |       j                  j                         }|t        v r|S dS )N )r   suffixlowerr   pathexts     r   
_extensionr   !   s-    
t*


!
!
#C//37R7r   c                *    t        t        |             S N)boolr   )r   s    r   r	   r	   &   s    
4 !!r   c                    t        |       }|dk(  rt        |       S |dk(  rt        |       S |dk(  rt        |       S t	        d|       )Nr   r
   r   zUnsupported document type: )r   _extract_notebook_extract_docx_extract_xlsxr   r   s     r   r   r   *   sU    
T
C
h &&
g~T""
g~T""
7x@
AAr   c                x    t        | t              r| S t        | t              rdj                  d | D              S y)Nr   c              3  B   K   | ]  }t        |t              s|  y wr   )
isinstancestr).0items     r   	<genexpr>z_source_text.<locals>.<genexpr>9   s     H*T32GtHs   )r'   r(   listjoin)sources    r   _source_textr/   5   s3    &#&$wwHHHHr   c           
        	 t        | dd      5 }t        j                  |      }d d d        t        t              st        d      |j                  d      }t        |t              sH|j                  dg       D cg c]+  }t        |t              r|j                  dg       D ]  }| - }}}|st        d      d	d	d	d
}dddd
}g }	|D ]  }t        |t              s|j                  d      }
|
|vr*||
xx   dz  cc<   |
dk7  rd||
    nd}|	j                  d||
    d| dt        |j                  dd            j                  d      df        |	st        d      dj                  |	      j                  d      dz   S # 1 sw Y   ixY w# t        t        t        j
                  f$ r}t        d|       |d }~ww xY wc c}}w )Nzutf-8replace)encodingerrorszNot a valid notebook: zNotebook root is not an objectcells
worksheetszNotebook contains no cellsr   )markdowncoderawMarkdownCodeRaw	cell_type   r8    r   u	   # ── z cell    ──r.   
z#Notebook contains no readable cells)openjsonloadOSError
ValueErrorJSONDecodeErrorr   r'   dictgetr,   extendr/   rstripr-   )r   fhnbexcr4   wscellcountslabelsouttypr   s               r   r"   r"   =   s   G$; 	r2B	 b$>??FF7OEeT" ff\2.
"d#w+	
  

 
 :;;Qq1F$fUCFC {$%hh{#fsq&)Ul1VC[M"

is}E&A<PTPXPXYacePfCgCnCnosCtvxyz{ CDD99S>  &--A	 	Z!5!56 G 6se<=3FG
s3   F FF ?0GFF G8GGc                    	 t        j                  | j                  |            S # t        $ r}t	        d|       |d }~wt         j
                  $ r}t	        d| d|       |d }~ww xY w)NzMissing zMalformed XML in z: )ET
fromstringreadKeyErrorr   
ParseError)zfnamerM   s      r   _zip_xmlr\   b   sm    J}}RWWT]++ :/0c9== J 1$r#?@cIJs   #& 	A+>A+A&&A+c                Z   	 t        j                  |       5 }t        |d      }d d d        dt         d}g }j                  | d      D ]  }g }|j                         D ]  }|j                  | dk(  r |j                  |j                  xs d       5|j                  | dk(  r|j                  d	       Y|j                  | d
| dhv sp|j                  d        |j                  dj                  |      j                  d              t        d |D              st	        d      dj                  |      j!                  d      dz   S # 1 sw Y   3xY w# t         j                  $ r}t	        d|       |d }~wt
        $ r}t	        t        |            |d }~ww xY w)Nzword/document.xmlzNot a valid DOCX: {}ptr   tab	brcrr@   c              3  <   K   | ]  }|j                           y wr   strip)r)   lines     r   r+   z _extract_docx.<locals>.<genexpr>   s     .tzz|.   z!DOCX contains no extractable text)zipfileZipFiler\   
BadZipFiler   rD   r(   _NS_WitertagappendtextrI   r-   splitanyrJ   )	r   rZ   rootrM   wlinesparabufnodes	            r   r#   r#   k   s   1__T" 	5bB 34D	5 UG2AE		QCq'" 	/IIK 	!DxxaS7"

499?+s#Y&

4 2h1#R11

4 	! 	RWWS\''-.	/ ...ABB99U""4(4//+	5 	5 C 23%89sB 1c#h'S01s9   E" EE" EE" "F*5FF*F%%F*c                8   	 t        j                  |       5 }t        |j                               }t	        ||      }t        |      }t        ||      }g }|D ]  \  }}}	|dv rt        |j                  |	d            }
|
|vr,	 t        |j                  |
      |      }|j                  d| d       |j                  d |D               |s|j                  d       |j                  d        	 d d d        st!        d      d	j'                  |      j)                  d	      d	z   S # t        j                  $ r Y w xY w# 1 sw Y   RxY w# t         j                  $ r}t!        d|       |d }~wt"        $ r}t!        t%        |            |d }~ww xY w)
N>   hidden
veryHiddenr   u   # ── Sheet: r?   c              3  >   K   | ]  }d j                  |        yw)rc   N)r-   )r)   rows     r   r+   z _extract_xlsx.<locals>.<genexpr>   s     :c499S>:s   z(empty)zNot a valid XLSX: z'XLSX has no visible sheets with contentr@   )rk   rl   setnamelist_shared_strings_workbook_sheets_workbook_rels_sheet_partrH   _sheet_rowsrW   rU   rY   rq   rI   rm   r   rD   r(   r-   rJ   )r   rZ   namessharedsheetsrelsrR   r[   stateridpartrowsrM   s                r   r$   r$      s   1__T" 	b&E$R/F%b)F!"e,DC$*  eS44"488C#45u$&rwwt}f=D 

-dV7;<

:T::JJy)

2	4 GHH99S>  &-- }} 	 	*  C 23%89sB 1c#h'S01s`   E A-ED, AE4E ,E?EEEE
E F$E33F?FFc           
     @   d|vrg S 	 t        j                  | j                  d            }dt         d}|j                  | d      D cg c],  }dj                  d |j                  | d      D              . c}S # t         j                  $ r g cY S w xY wc c}w )Nzxl/sharedStrings.xmlr^   r_   sir   c              3  <   K   | ]  }|j                   xs d   ywr   Nrr   r)   ra   s     r   r+   z"_shared_strings.<locals>.<genexpr>   s     =QAFFLbL=rj   ra   )rU   rV   rW   rY   _NS_Sro   r-   )rZ   r   ru   sr*   s        r   r   r      s    U*	}}RWW%;<= UG2AJN))WXVYY[T\J]^$BGG=$))qcG*<==^^ == 	 _s   $B  1B BBc           	         t        | d      }dt         ddt         d}}|j                  | d      D cg c]:  }|j	                  dd      |j	                  dd      |j	                  | d	d
      f< c}S c c}w )Nzxl/workbook.xmlr^   r_   sheetr[   Sheetr   visibleidr   )r\   r   _NS_RELro   rH   )rZ   ru   r   rr   s        r   r   r      s    B)*Dwb>Ry+qA YY!E{+ 
67	#UYYw	%BEIIQRPSSUhXZD[\  s   ?A9c                T   d}||vri S 	 t        j                  | j                  |            }dt         d}|j                  |      D ci c]7  }|j                  d      s|j                  dd      |j                  dd      9 c}S # t         j                  $ r i cY S w xY wc c}w )Nzxl/_rels/workbook.xml.relsr^   z}RelationshipIdr   Target)rU   rV   rW   rY   _NS_PKG_RELro   rH   )rZ   r   	rels_pathru   rel_tagrels         r   r   r      s    ,I	}}RWWY/0 ;-~.G@D		'@RdVYV]V]^bVcCGGD"swwx44dd == 	 es   $B
 B%"%B%
B"!B"c                    | j                  d      } t        j                  | j                  d      r|       S d|        S )N/zxl/)lstrip	posixpathnormpath
startswith)targets    r   r   r      s<    ]]3F(9(9%(@fUUF8nUUr   c                    d}| D ]B  }|j                         s n0|dz  t        |j                               z   t        d      z
  dz   }D t        |dz
  d      S )Nr      Ar=   )isalphaorduppermax)refidxchs      r   
_col_indexr      sZ    
C 8zz|BhRXXZ(3s83a78 sQw?r   c           
        t        j                  |       }dt         d}g }|j                  | d      D ]  }t	        |      t
        k\  r ni }d}|j                  | d      D ]Y  }|j                  d      rt        |j                  dd            n|dz   }	|	t        k\  r>t        |||      ||	<   t        ||	      }[ |j                  |d	k\  r,t        |dz         D 
cg c]  }
|j                  |
d       c}
ng         |r=t        d
 |d   D              s(|j                          |rt        d
 |d   D              s(|S c c}
w )Nr^   r_   r   cr   r   r=   r   c              3  <   K   | ]  }|j                           y wr   rg   )r)   values     r   r+   z_sheet_rows.<locals>.<genexpr>   s     ?U5;;=?rj   )rU   rV   r   ro   len_MAX_XLSX_ROWS_PER_SHEETrH   r   _MAX_XLSX_COLS_cell_valuer   rq   rangert   pop)	xml_bytesr   ru   r   r   r   r4   max_colrO   colis              r   r   r      s@   ==#D
UG2ADyyA3c# \t900 "HHs!W% 	(D3788C=*TXXc2./gPQkCn$$T615E#J'3'G	( 	gQRluWq[/AB!UYYq"%BXZ[\ s?d2h??
 s?d2h??K Cs   !E
c                   | j                  | d      xs d}| j                  dd      }|dk(  r	 |t        |         S |dk(  rB| j                  | d      }|dS dj                  d |j                  | d      D              S |dk(  r|j                         d	v rd
S dS |dk(  r|xs dS |S # t        t        f$ r Y yw xY w)Nvr   ra   r   	inlineStrisc              3  <   K   | ]  }|j                   xs d   ywr   r   r   s     r   r+   z_cell_value.<locals>.<genexpr>   s     0\!20\rj   b>   1TRUEtruer   FALSEez#ERROR)	findtextrH   intrE   
IndexErrorfindr-   ro   rh   )rO   r   r   r   rS   inlines         r   r   r      s    MMQCq'"(bE
((3
C
cz	#e*%% kaS8$^r\0\v{{VWUXXYSZG[0\)\\
cz*??vLWL
cz  L J' 		s   B. .C ?C )r   r(   returnr(   )r   r(   r   r    )r   r(   )rZ   zipfile.ZipFiler[   r(   r   
ET.Element)rZ   r   r   set[str]r   	list[str])rZ   r   r   zlist[tuple[str, str, str]])rZ   r   r   r   r   zdict[str, str])r   r(   r   r(   )r   r(   r   r   )r   bytesr   r   r   zlist[list[str]])rO   r   r   r   r   r(   r   r(   )&r   
__future__r   rB   r   rk   pathlibr   	xml.etreer   rU   __all__	frozensetr   MAX_XLSX_BYTESr   r   rn   r   r   r   	Exceptionr   r   r	   r   r/   r"   r\   r#   r$   r   r   r   r   r   r   r   r   r   r   <module>r      s    #     '
k"#?@ ! FC
OLOi O8
"B".JJ04.B_	eV
*r   