
    -i?                     |    d dl Z d dlZd dlZd dlmc mZ d dlmZ d dlm	Z	 ddl
mZ ddlmZ  G d de          ZdS )	    N)tabulate)defaultdict   )StemmedWord)AbstractResultFormatterc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	dg fd	Z
d
 ZddZddZdefdZdefdZdefdZd Zd Zd Zd Zd Zd Zd ZdS )ResultFormatterc                    || _         |                     |          sJ |                     |          | _        |                                 | _        t          | j                  | _        g d| j        g dg dg dg d| _        d S )N)idword	vocalizedstemaffixlemmatypetags)r   r   root)r   r   r   )mainallrootslemmasinflectcustom)	results_is_valid_result_typeflattenflat_results_collect_all_fields
all_fieldslistused_fieldsprofilesselfr   s     U/var/www/html/speakWrite/venv/lib/python3.11/site-packages/qalsadi/resultformatter.py__init__zResultFormatter.__init__   s    ))'22222 LL11 224400 YXX?+++---   	
 	
    c                 L    d t          d |D                       D             }|S )Nc                 $    g | ]\  }}i |d |iS )r    ).0iitems      r%   
<listcomp>z+ResultFormatter.flatten.<locals>.<listcomp>,   s;     
 
 
4 tT1
 
 
r'   c              3   $   K   | ]}|D ]}|V  d S Nr*   )r+   sublistr-   s      r%   	<genexpr>z*ResultFormatter.flatten.<locals>.<genexpr>.   sG       % % % %04% % % % % % %r'   )	enumerate)r$   r   r   s      r%   r   zResultFormatter.flatten+   sN    
 
$ % %$+% % %  
 
 
 r'   c                 8    |                      |t                    S r0   )_is_list_of_lists_of_typer   )r$   results     r%   r   z%ResultFormatter._is_valid_result_type4   s    --fkBBBr'   c                     | j         S r0   r!   r$   s    r%   get_used_fieldszResultFormatter.get_used_fields7   s    r'   c                     | j         S r0   )r   r9   s    r%   list_fieldszResultFormatter.list_fields:   s
    r'   c                 N    t          | j                                                  S r0   )r    r"   keysr9   s    r%   list_profileszResultFormatter.list_profiles=   s    DM&&(()))r'   c                     t                      }| j        D ])}|                    |                                           *t	          |          S )z(Collect all keys present in the results.)setr   updater>   sorted)r$   all_keysrs      r%   r   z#ResultFormatter._collect_all_fields@   sH    55" 	& 	&AOOAFFHH%%%%hr'   r   c                       j                             | j                   _        |r* fd|D             } j                            |           dS dS )zASet the fields to be displayed/exported based on a named profile.c                 8    g | ]}|j         v |j        v|S r*   )r   r!   )r+   fr$   s     r%   r.   z3ResultFormatter.set_used_fields.<locals>.<listcomp>N   s4    ppp1Q$/=Q=QVW_c_oVoVoQVoVoVor'   N)r"   getr   r!   extend)r$   profileadditional_fieldsfields_to_adds   `   r%   set_used_fieldszResultFormatter.set_used_fieldsG   sj      =,,WdoFF 	3pppp(9pppM##M22222	3 	3r'   c                     || _         dS )z
 load dataNr   r#   s     r%   	load_datazResultFormatter.load_dataR   s    r'   tablec                 6   |dk    r-|                      d          }|                    dd          }ne|dk    r|                                 }nJ|dk    r|                                 }n/|dk    r|                                 }n|                                  }|S )z)
        display as given format
        html)tablefmtz<table>z<table id="datatable">jsoncsvxml)as_tablereplaceas_jsonas_csvas_xml)r$   rU   outputs      r%   	as_formatzResultFormatter.as_formatW   s     v]]F]33F^^I/GHHFF\\^^FF[[]]FF[[]]FF]]__Fr'   plainc                 X      fd j         D             }t          | j        |          S )Nc                 8    g | ]fd j         D             S )c                 <    g | ]}                     |d           S  rI   r+   rH   rE   s     r%   r.   z7ResultFormatter.as_table.<locals>.<listcomp>.<listcomp>i   s%    888!q"888r'   r8   )r+   rE   r$   s    @r%   r.   z,ResultFormatter.as_table.<locals>.<listcomp>i   s2    TTTQ8888t'7888TTTr'   )headersrU   )r   r   r!   )r$   rU   rowss   `  r%   rY   zResultFormatter.as_tableh   s7    TTTT$BSTTTd&6JJJJr'   returnc                 T     t          j         fd j        D             dd          S )Nc                 ,    g | ]}fd |D             S )c                 D    g | ]}|                     j                  S r*   )to_dictr!   )r+   objr$   s     r%   r.   z6ResultFormatter.as_json.<locals>.<listcomp>.<listcomp>o   s(    IIIcCKK(899IIIr'   r*   )r+   rowr$   s     r%   r.   z+ResultFormatter.as_json.<locals>.<listcomp>o   s.    bbbcIIIISIIIbbbr'   F   )ensure_asciiindent)rV   dumpsr   r9   s   `r%   r[   zResultFormatter.as_jsonm   s<    zbbbbUYUabbb',Q8 8 8 	8r'   c                    t          j                    }t          j        |          }|                    | j                   | j        D ](|                    fd| j        D                        )|                                S )Nc                 <    g | ]}                     |d           S rd   rf   rg   s     r%   r.   z*ResultFormatter.as_csv.<locals>.<listcomp>w   s%    DDDaQUU1b\\DDDr'   )ioStringIOrW   writerwriterowr!   r   getvalue)r$   r^   ry   rE   s      @r%   r\   zResultFormatter.as_csvr   s    F##()))" 	F 	FAOODDDD43CDDDEEEE   r'   c           
         t          j        d          }| j        D ]}t          j        |d          }|D ]h}t          j        |d|                    dd                    }| j        D ]3}||v r-t          ||                   t          j        ||          _        4it          j	                    }t          j
        |                              |dd           |                                S )	Nr   r   wordstemre   )textunicodeT)encodingxml_declaration)ETElementr   
SubElementrI   r!   strr~   rw   rx   ElementTreewriter{   )r$   r   word_stem_list	word_elemrE   	word_stemkxml_ios           r%   r]   zResultFormatter.as_xmlz   s    z)$$"l 	E 	ENdF33I# E EM)ZaeeFTVFWFWXXX	) E EAAvv;>qt99i338EE
 
t""6It"TTT   r'   c                     t          |dd          5 }|                    |                                            d d d            d S # 1 swxY w Y   d S Nwutf-8)r   )openr   r[   r$   filepathrH   s      r%   to_jsonzResultFormatter.to_json   s    (C'222 	$aGGDLLNN###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   (AAAc                     t          |ddd          5 }|                    |                                            d d d            d S # 1 swxY w Y   d S )Nr   re   r   )newliner   )r   r   r\   r   s      r%   to_csvzResultFormatter.to_csv   s    (Cg>>> 	#!GGDKKMM"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   (A		AAc                     t          |dd          5 }|                    |                                            d d d            d S # 1 swxY w Y   d S r   )r   r   r]   r   s      r%   to_xmlzResultFormatter.to_xml   s    (C'222 	#aGGDKKMM"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r   c                     |                      |dz              |                     |dz              |                     |dz              d S )Nz.jsonz.csvz.xml)r   r   r   )r$   	base_paths     r%   save_allzResultFormatter.save_all   sM    Y()))I&'''I&'''''r'   c                 b    g }| j         D ]#}|                    fd|D                        $|S )Nc                 p    g | ]1t          fd                                 D                       /2S )c              3      K   | ]_\  }}t                              |d                                                     t          |                                          k    V  `dS )re   N)r   rI   strip)r+   r   vrE   s      r%   r2   z4ResultFormatter.filter.<locals>.<listcomp>.<genexpr>   sZ      bbtq!s155B<<((..00CFFLLNNBbbbbbbr'   )r   items)r+   rE   
conditionss    @r%   r.   z*ResultFormatter.filter.<locals>.<listcomp>   sY       bbbbzO_O_OaOabbbbb  r'   )r   append)r$   r   filteredr   s    `  r%   filterzResultFormatter.filter   sa    #| 	 	NOO    )      
 r'   c                     t          t                    }| j        D ]3}|                    |d          }||                             |           4|S )Nr   )r   r    r   rI   r   )r$   keygroupedrE   r   s        r%   group_byzResultFormatter.group_by   sT    d##" 	! 	!Ac6""AAJa    r'   c                     | j         S r0   rP   r9   s    r%   as_dictszResultFormatter.as_dicts   s
    |r'   N)rR   )r`   )__name__
__module____qualname__r&   r   r   r:   r<   r?   r   rN   rQ   r_   rY   r   r[   r\   r]   r   r   r   r   r   r   r   r*   r'   r%   r	   r	      s       
 
 
6  C C C       * * *      ',r 3 3 3 3  
   "K K K K
8 8 8 8 8
! ! ! ! !! ! ! ! !$ $ $# # ## # #( ( (	 	 	      r'   r	   )rV   rW   rw   xml.etree.ElementTreeetreer   r   r   collectionsr   stemmedwordr   abstractresultformatterr   r	   r*   r'   r%   <module>r      s     



 				 " " " " " " " " "       # # # # # # % % % % % % < < < < < <` ` ` ` `- ` ` ` ` `r'   