
    Xj                     v    d dl Z d dlZd dlZd dlmZ d dlmZ  ee          Z G d d          Z	da
de	fdZdS )    N)Document)
get_loggerc                       e Zd Zd Zdedeeef         dz  fdZdedeeef         dz  fdZdedeeef         dz  fdZdedeee	f         fdZ
dS )	TaxDocumentParserc                     d S N )selfs    S/lsinfo/ai/hellotax_ai/base_platform/app/services/knowledge/word_document_parser.py__init__zTaxDocumentParser.__init__   s        	file_pathreturnNc                 L   	 t          |          }d}g }t          |j                  D ]=\  }}|j                                        }|s!|s|r|}(|                    |           >d                    |          }|sGt          j        	                    |          
                    dd          
                    dd          }t                              d|            |||dz   |z   dS # t          $ r+}	t                              d| d	|	            Y d }	~	d S d }	~	ww xY w)
N 
.docx.doczSuccessfully parsed DOCX file: z

titlecontent	full_textzFailed to parse DOCX file : )r   	enumerate
paragraphstextstripappendjoinospathbasenamereplaceloggerinfo	Exceptionerror)
r
   r   docr   content_paragraphs_iparar   r   es
             r   
parse_docxzTaxDocumentParser.parse_docx   s[   	9%%CE!#%cn55 4 4Dy((  4 4 EE&--d3333ii 233G ]((33;;GRHHPPQWY[\\KKE)EEFFF"wUV^V]E]^^^ 	 	 	LLFiFF1FFGGG44444	s   C+C. .
D#8 DD#c           
      2   	 	 |                      |          S # t          $ r Y nw xY wt                              d|            t	          j                    5 }	 t          j        ddddd||gddd	           t          j	        
                    |                              d
d          }t          j	                            ||          }t          j	                            |          r!|                      |          cd d d            S n4# t          $ r'}t                              d|            Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   t                              d|            t          j	        
                    |                              d
d          d| dt          j	        
                    |                              d
d          dS # t          $ r+}t                              d| d|            Y d }~d S d }~ww xY w)Nz8Cannot directly parse .doc file, attempting conversion: sofficez
--headlessz--convert-todocxz--outdirT   )checkcapture_outputtimeoutr   r   zLibreOffice conversion failed: z5Cannot parse .doc file, returning filename as title: r   z[Unparseable .doc file: ]r   zFailed to parse DOC file r   )r-   r&   r$   warningtempfileTemporaryDirectory
subprocessrunr    r!   r"   r#   r   existsr'   )r
   r   temp_dir	base_nameconverted_pathr,   s         r   	parse_doczTaxDocumentParser.parse_doc(   s   $	y111   NNaV_aabbb,.. H(HN%(*"&$% #'+ "    !# 0 0 ; ; C CFG T TI%'W\\(I%F%FNw~~n55 ?#~>>'H H H H H H H H$?  H H HLL!F1!F!FGGGGGGGGH)H H H H H H H H H H H H H H H, NN^S\^^___)))44<<VRHHBiBBBW--i88@@LL  
  	 	 	LLEYEE!EEFFF44444	s~    
%G! %3G! EB%D?G! E
D>D94E9D>>EG! EG! EBG! !
H+ HHc                    t           j                            |          st                              d|            d S t           j                            |          d                                         }|dk    r|                     |          S |dk    r|                     |          S t                              d|            d S )NzFile does not exist:    r   r   zUnsupported file format: )	r    r!   r;   r$   r'   splitextlowerr-   r?   )r
   r   file_exts      r   
parse_filezTaxDocumentParser.parse_fileO   s    w~~i(( 	LL<<<===47##I..q17799w??9--->>),,,LL?X??@@@4r   c                 <   t           j                            |          t           j                            |          t           j                            |          d                                         |d}	 |                    d          rZt          |          }|j        }|j	        r
|j	        |d<   |j
        r
|j
        |d<   |j        r
|j        |d<   |j        r
|j        |d<   n4# t          $ r'}t                              d|            Y d }~nd }~ww xY w|S )	NrA   )	file_name	file_size	file_typer   r   	doc_titleauthorcreatedmodifiedzFailed to extract metadata: )r    r!   r"   getsizerB   rC   endswithr   core_propertiesr   rK   rL   rM   r&   r$   r6   )r
   r   metadatar(   
core_propsr,   s         r   extract_metadataz"TaxDocumentParser.extract_metadata\   s8   )))4433)))44Q7==??"	
 
	?!!'** 
?y)) 0
# =,6,<H[)$ ;)3):HX&% =*4*<HY'& ?+5+>HZ( 	? 	? 	?NN=!==>>>>>>>>	?s   8A/C( (
D2DD)__name__
__module____qualname__r   strdictr-   r?   rE   anyrS   r	   r   r   r   r      s          C DcNT,A    ,%3 %4S>D+@ % % % %NC DcNT,A    # $sCx.      r   r   r   c                  :    t           t                      a t           S r   )_parserr   r	   r   r   get_tax_document_parserr\   w   s    #%%Nr   )r    r9   r7   r0   r   common_loggingr   rT   r$   r   r[   r\   r	   r   r   <module>r^      s    				            % % % % % %	H		d d d d d d d dN !2      r   