
    dh<                    >   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
Jr  S SKJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  \(       a  S SKJr  \R8                  " \5      r  " S	 S
\5      r  " S S5      r   " S S\5      r! " S S\5      r"g)    )annotationsN)
HTMLParser)TYPE_CHECKINGAnyDictListOptionalTupleUnion)
BaseLoader)Document)TextSplitter)
Connectionc                  N   ^  \ rS rSrSrSU 4S jjrS	S jrS
S jrSS jrSr	U =r
$ )ParseOracleDocMetadata"   zParse Oracle doc metadata...c                ^   > [         TU ]  5         U R                  5         SU l        0 U l        g )NF)super__init__resetmatchmetadata)self	__class__s    e/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/oracleai.pyr   ParseOracleDocMetadata.__init__%   s%    


(*    c                    US:X  a5  SnU H,  u  pEUS:X  a  UnUS:X  d  M  U(       d  M  XPR                   U'   M.     g US:X  a  SU l        g g )Nmeta namecontenttitleT)r   r   )r   tagattrsentryr!   values         r   handle_starttag&ParseOracleDocMetadata.handle_starttag+   sT    &=#%E$6>!E9$u/4e,  % G^DJ r   c                R    U R                   (       a  XR                  S'   SU l         g g )Nr#   Fr   r   )r   datas     r   handle_data"ParseOracleDocMetadata.handle_data7   s!    ::%)MM'"DJ r   c                    U R                   $ N)r   )r   s    r   get_metadata#ParseOracleDocMetadata.get_metadata<   s    }}r   r+   )returnNone)r$   strr%   zList[Tuple[str, Optional[str]]]r3   r4   )r,   r5   r3   r4   )r3   Dict[str, Any])__name__
__module____qualname____firstlineno____doc__r   r(   r-   r1   __static_attributes____classcell__r   s   @r   r   r   "   s    &+

 r   r   c                  T    \ rS rSrSr\SSS jj5       r\        S	S j5       rSrg)
OracleDocReaderC   zRead a fileNc                   SnSnU c$  SR                  [        R                  " SSS95      n [        [        R                  " 5       5      n[
        R                  " SU5      n[        R                  " U R                  5       5      R                  5       nUS U n[
        R                  " S[        R                  " S5      5      nXE-   U-   nUR                  5       nUR                  U5      nUS U nU$ )N       r    >abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789   )kz>I)joinrandomchoicesinttimestructpackhashlibsha256encodedigestgetrandbitshexzfill)	input_string
out_lengthhash_len	timestamptimestamp_binhashval_bincounter_bin	object_idobject_id_hexs	            r   generate_object_id"OracleDocReader.generate_object_idF   s    
77TL 		$	D)4 nn\%8%8%:;BBD!)8, kk$(:(:2(>? "/+=	!%++
 &kz2r   c                B   0 n SSK n SUR                  l        U R	                  5       n[        US5       nUR                  5       nSSS5        Wc
  [        SUS9$ UR                  UR                  5      n	UR                  UR                  5      n
UR                  SU[        R                  " U5      U	U
S	9  UR                  5         U	c  0 nOp[        U	R                  5       5      nUR!                  S
5      (       d  UR!                  S5      (       a+  [#        5       nUR%                  U5        UR'                  5       n[(        R+                  U R,                  S-   U-   5      nXS'   XS'   U
c
  [        SUS9$ [        [        U
R                  5       5      US9$ ! [         a  n[        S5      UeSnAff = f! , (       d  f       GNx= f! [.         aJ  n[0        R3                  SU 35        [0        R3                  SU 35        WR                  5          SnAgSnAff = f)zRead a file using OracleReader
Args:
    conn: Oracle Connection,
    file_path: Oracle Directory,
    params: ONNX file name.
Returns:
    Plain text and metadata as Langchain Document.
r   NIUnable to import oracledb, please install with `pip install -U oracledb`.Frbr    page_contentr   a  
                declare
                    input blob;
                begin
                    input := :blob;
                    :mdata := dbms_vector_chain.utl_to_text(input, json(:pref));
                    :text := dbms_vector_chain.utl_to_text(input);
                end;)blobprefmdatatext<!DOCTYPE html<HTML>$_oid_fileAn exception occurred :: zSkip processing )oracledbImportErrordefaults
fetch_lobscursoropenreadr   varDB_TYPE_CLOBexecutejsondumpscloser5   getvalue
startswithr   feedr1   r@   r_   username	Exceptionloggerinfo)conn	file_pathparamsr   rp   ert   fr,   rh   ri   doc_datapdoc_idexs                  r   	read_fileOracleDocReader.read_filei   s    $&	4	+0H([[]Fi&!vvx ' |R(CCJJx445E::h334DNN ZZ'   LLN}u~~/0&&'788H<O<O= = /0AFF8$ ~~/H$778Ki8WXF%V )W|R(CCS-AHUUg  	- 	 '&X  	KK3B489KK*9+67LLN		sS   F -G
 F8G
 DG
 9 G
 
F5$F00F58
GG
 

HA HH r0   )rV   zUnion[str, None]r3   r5   )r   r   r   r5   r   dictr3   zUnion[Document, None])	r7   r8   r9   r:   r;   staticmethodr_   r   r<   r   r   r   r@   r@   C   sR       D HH%(H26H	H Hr   r@   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )OracleDocLoader   zgRead documents using OracleDocLoader
Args:
    conn: Oracle Connection,
    params: Loader parameters.
c                   > Xl         [        R                  " [        R                  " U5      5      U l        [
        TU ]  " S0 UD6  g )Nr   )r   rz   loadsr{   r   r   r   )r   r   r   kwargsr   s       r   r   OracleDocLoader.__init__   s1    	jjF!34"6"r   c           	     >    SSK nSn/ n0 nSS0n U R                  b  U R                  R                  S5      U l        U R                  R                  S5      U l        U R                  R                  S5      U l        U R                  R                  S	5      U l        U R                  R                  S
5      U l        O[        S5      eSUR                  l        U R                  (       aA  [        R                  U R                  U R                  U5      nUc  U$ UR                  U5        U R
                  (       a  Sn[         R"                  " U R
                  5       H  n	[         R$                  R'                  U R
                  U	5      n
[         R$                  R)                  U
5      (       d  MS  [        R                  U R                  X5      nUc   US-   n[*        R-                  SU S35        M  UR                  U5        M     U R                  (       Ga   U R                  b  U R                  c  [        S5      eU R                  R/                  5       nU R                  R                  S5      U l        U R0                  b  [3        U R0                  5      S:  a  [        S5      eSnUR5                  UU R                  R7                  5       U R                  R7                  5       S9  UR9                  5       nU H,  nUS   U R0                  ;   d  M  US   S;  d  M#  [        S5      e   SU l        U R0                  b*  U R0                   H  nU R:                  S-   U-   U l        M     SU R                  -   S-   [<        R>                  " U5      -   S-   U R                  -   S-   U R:                  -   S-   U R                  -   S-   U R                  -   S -   nUR5                  U5        U GH  n0 nUcy  [        RA                  U R                  RB                  S!-   U R                  -   S!-   U R                  -   S!-   U R                  -   5      nUUS"'   UR                  [E        S#US$95        M  US   be  [G        US   5      nURI                  S%5      (       d  URI                  S&5      (       a+  [K        5       nURM                  U5        URO                  5       n[        RA                  U R                  RB                  S!-   U R                  -   S!-   U R                  -   S!-   U R                  -   S!-   [G        US'   5      -   5      nUUS"'   US'   US('   U R0                  b  [3        U R0                  5      n[Q        SU5       H  nUUS'-      XPR0                  U   '   M     US   c  UR                  [E        S#US$95        GM  UR                  [E        [G        US   5      US$95        GM     U$ U$ ! [         a  n[        S5      UeSnAff = f! [         aC  n[*        R-                  S)U 35        [R        RT                  " 5         WRW                  5         e SnAff = f! [         a3  n[*        R-                  S)U 35        [R        RT                  " 5         e SnAff = f)*z,Load data into LangChain Document objects...r   Nrb   	plaintextfalsefiledirowner	tablenamecolnamezMissing loader parametersF   zTotal skipped: 
z%Missing owner or column name or both.
mdata_cols   z?Exceeds the max number of columns you can request for metadata.zgselect column_name, data_type from all_tab_columns where owner = :ownername and table_name = :tablename)	ownernamer   )NUMBERBINARY_DOUBLEBINARY_FLOATLONGDATE	TIMESTAMPVARCHAR2zDThe datatype for the column requested for metadata is not supported.z, rowidz, z'select dbms_vector_chain.utl_to_text(t.z, json('z+')) mdata, dbms_vector_chain.utl_to_text(t.z) textz from .z trl   rm   r    rd   rj   rk      _rowidro   ),rp   rq   r   getr   r   r   r   r   r   rr   rs   r@   r   r   appendoslistdirpathrH   isfiler   r   rt   r   lenry   upperfetchallmdata_cols_sqlrz   r{   r_   r   r   r5   r~   r   r   r1   range	traceback	print_excr|   )r   rp   r   ncolsresultsr   m_paramsdoc
skip_count	file_namer   rt   sqlrowsrowcolr   r,   r   ir   s                        r   loadOracleDocLoader.load   s1   	 "$#%)g	{{& KKOOF3	;;??51![[__W5
!%!=#{{y9 ;<<+0H(yy%//		499hO;"Ns#xx
!#DHH!5I "TXXy AIww~~i00-77		9W;)3aJ"KK/*R(HI#NN3/ "6 ~~~~zz)T\\-A'(OPP!YY--/F&*kkool&CDO2t/!3"+!B# 8 
 &*jj&6&6&8&*nn&:&:&< '   &0#'C"1v8#&q6 2" $" +4)K+& %& $(  +4D'2#'??C262E2E2Ls2RD/ $3
 B,,'$% **X./ H	H
 ,,' ## --. ## **	% 
 ..)    NN3'%#%;%4%G%G $		 2 2"%!&"&**!- #&!& #'..	!1
 #&!& #',,!/&F 06HV,#NN8h+WX"1v1'*3q6{#'??3C#D#D$,I" I" )?(@A$%FF4L/0~~/?H%4%G%G $		 2 2"%!&"&**!- #&!& #'..	!1
 #&!& #',,!/ #&!& #&c!f+!.
&F 06HV,14QHX.  $:(+DOO(<%*1e_?B1q5z); < &5  #1v~ '$,"x$P!" !($,58Q[8%&!"g  &| N7N[  	- 	N ! KK";B4 @A'')LLN	  	KK3B489!	su   W1 D
Y BY 3A*Y C9X X &KX -Y /Y 1
X;XX
Y>YYY 
Z).ZZ)	r   r   r   r   r   r   r   r   r   )r   r   r   r6   r   r   )r3   zList[Document])	r7   r8   r9   r:   r;   r   r   r<   r=   r>   s   @r   r   r      s    #
u ur   r   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )OracleTextSplitteri|  z$Splitting text using Oracle chunker.c                   > Xl         X l        [        TU ]  " S0 UD6   SSKn SSKnXPl        X@l        g! [         a  n[        S5      UeSnAff = f! [         a    [        S5      ef = f)zInitialize.r   Nrb   zjoracledb or json or both are not installed. Please install them. Recommendations: `pip install oracledb`. r   )	r   r   r   r   rz   rp   rq   	_oracledb_json)r   r   r   r   rz   rp   r   r   s          r   r   OracleTextSplitter.__init__  s    	"6"	 &NJ  !1   	> 	s*   A 5 A 
AAAA A)c                h    SSK n/ n SU R                  R                  l        U R
                  R                  5       nUR                  UR                  S9  UR                  SUU R                  R                  U R                  5      S9   UR                  5       nUc   U$ U R                  R                  US   5      nUR                  US   5        MJ  ! [         a  n[        S5      UeSnAff = f! [          a3  n["        R%                  S	U 35        [&        R(                  " 5         e SnAff = f)
z&Split incoming text and return chunks.r   Nrb   F)r"   zUselect t.column_value from dbms_vector_chain.utl_to_chunks(:content, json(:params)) t)r"   r   
chunk_dataro   )rp   rq   r   rr   rs   r   rt   setinputsizesCLOBry   r   r{   r   fetchoner   r   r   r   r   r   r   )	r   ri   rp   r   splitsrt   r   dr   s	            r   
split_textOracleTextSplitter.split_text  s+   	 	16DNN##.YY%%'F   7NNOzz''4	   oo'; M JJ$$SV,ao. -  	- 	>  	KK3B489!	s5   C BC4 "4C4 
C1 C,,C14
D1>.D,,D1)r   r   r   r   )r   r   r   r6   r   r   r3   r4   )ri   r5   r3   z	List[str])	r7   r8   r9   r:   r;   r   r   r<   r=   r>   s   @r   r   r   |  s    .2' 'r   r   )#
__future__r   rO   rz   loggingr   rI   rM   rL   r   html.parserr   typingr   r   r   r   r	   r
   r   langchain_core.document_loadersr   langchain_core.documentsr   langchain_text_splittersr   rp   r   	getLoggerr7   r   r   r@   r   r   r   r   r   <module>r      s    #    	     " I I I 6 - 1#			8	$ "Z < o od Aj AHC Cr   