
    -i                     b    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	  G d d          Z
dS )    N)tabulate)defaultdictc                       e Zd Zd Zed             Ze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 )AbstractResultFormatterc                     || _         |                                 | _        t          | j                  | _        g d| j        d| _        d S )N)idword	vocalizedstemaffixlemmatypetags)mainall)results_collect_all_fields
all_fieldslistused_fieldsprofilesselfr   s     ]/var/www/html/speakWrite/venv/lib/python3.11/site-packages/qalsadi/abstractresultformatter.py__init__z AbstractResultFormatter.__init__
   sS     224400 YXX?
 
    c                 d    t          | t                    ot          fd| D                       S )z5
        Check if `obj` is a list   of cls`.
        c              3   8   K   | ]}t          |          V  d S N
isinstance.0itemclss     r   	<genexpr>z;AbstractResultFormatter._is_list_of_type.<locals>.<genexpr>   s-      ,S,StZc-B-B,S,S,S,S,S,Sr   r!   r   r   objr%   s    `r   _is_list_of_typez(AbstractResultFormatter._is_list_of_type   s7    
 #t$$S,S,S,S,Ss,S,S,S)S)SSr   c                 d    t          | t                    ot          fd| D                       S )z List of list of objectc              3   x   K   | ]4}t          |t                    ot          fd |D                       V  5dS )c              3   8   K   | ]}t          |          V  d S r   r    r"   s     r   r&   zNAbstractResultFormatter._is_list_of_lists_of_type.<locals>.<genexpr>.<genexpr>    s-      1X1XD*T32G2G1X1X1X1X1X1Xr   Nr'   )r#   subr%   s     r   r&   zDAbstractResultFormatter._is_list_of_lists_of_type.<locals>.<genexpr>    sd       $ $ sD))Xc1X1X1X1XTW1X1X1X.X.X $ $ $ $ $ $r   r'   r(   s    `r   _is_list_of_lists_of_typez1AbstractResultFormatter._is_list_of_lists_of_type   sO     3%% $ $ $ $ $"$ $ $ $ $	
r   c                 8    |                      |t                    S r   )r*   dict)r   results     r   _is_valid_result_typez-AbstractResultFormatter._is_valid_result_type#   s    $$VT222r   c                     | j         S r   r   r   s    r   get_used_fieldsz'AbstractResultFormatter.get_used_fields&   s    r   c                     | j         S r   )r   r6   s    r   list_fieldsz#AbstractResultFormatter.list_fields)   s
    r   c                 N    t          | j                                                  S r   )r   r   keysr6   s    r   list_profilesz%AbstractResultFormatter.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+AbstractResultFormatter._collect_all_fields/   sG    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#   fr   s     r   
<listcomp>z;AbstractResultFormatter.set_used_fields.<locals>.<listcomp>;   s4    ppp1Q$/=Q=QVW_c_oVoVoQVoVoVor   N)r   getr   r   extend)r   profileadditional_fieldsfields_to_adds   `   r   set_used_fieldsz'AbstractResultFormatter.set_used_fields6   sh    =,,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!AbstractResultFormatter.load_data?   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   rT   outputs      r   	as_formatz!AbstractResultFormatter.as_formatD   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  rH   r#   rF   rB   s     r   rG   z?AbstractResultFormatter.as_table.<locals>.<listcomp>.<listcomp>V   s%    888!q"888r   r5   )r#   rB   r   s    @r   rG   z4AbstractResultFormatter.as_table.<locals>.<listcomp>V   s2    OOOQ8888t'7888OOOr   )headersrT   )r   r   r   )r   rT   rowss   `  r   rX   z AbstractResultFormatter.as_tableU   s6    OOOO$,OOOd&6JJJJr   returnc                 :    t          j        | j        dd          S )NF   )ensure_asciiindent)rU   dumpsr   r6   s    r   rZ   zAbstractResultFormatter.as_jsonZ   s$    z$,',Q8 8 8 	8r   c                    t          j                    }t          j        |          }|                    | j                   | j        D ](|                    fd| j        D                        )|                                S )Nc                 <    g | ]}                     |d           S rc   re   rf   s     r   rG   z2AbstractResultFormatter.as_csv.<locals>.<listcomp>d   s%    DDDaQUU1b\\DDDr   )ioStringIOrV   writerwriterowr   r   getvalue)r   r]   rs   rB   s      @r   r[   zAbstractResultFormatter.as_csv_   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          }t          j        |d|                    dd                    }| j        D ]3}||v r-t          ||                   t          j        ||          _        4~t          j	                    }t          j
        |                              |dd	           |                                S )
Nr   r$   wordstemr	   rd   )textunicodeT)encodingxml_declaration)ETElementr   
SubElementrH   r   strrx   rq   rr   ElementTreewriteru   )r   rootrB   	word_elem	word_stemkxml_ios          r   r\   zAbstractResultFormatter.as_xmlg   s    z)$$ 	A 	AAdF33Ii!%%PRBSBSTTTI% A A667:1Q4yyBM)Q//4A 
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)rz   )openr   rZ   r   filepathrF   s      r   to_jsonzAbstractResultFormatter.to_jsont   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   rd   r   )newlinerz   )r   r   r[   r   s      r   to_csvzAbstractResultFormatter.to_csvx   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AbstractResultFormatter.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 AbstractResultFormatter.save_all   sM    Y()))I&'''I&'''''r   c                 .    fd| j         D             }|S )Nc                 p    g | ]1t          fd                                 D                       /2S )c              3      K   | ]_\  }}t                              |d                                                     t          |                                          k    V  `dS )rd   N)r   rH   strip)r#   r   vrB   s      r   r&   z<AbstractResultFormatter.filter.<locals>.<listcomp>.<genexpr>   sZ      bbtq!s155B<<((..00CFFLLNNBbbbbbbr   )r   items)r#   rB   
conditionss    @r   rG   z2AbstractResultFormatter.filter.<locals>.<listcomp>   sY       bbbbzO_O_OaOabbbbb  r   rO   )r   r   filtereds    ` r   filterzAbstractResultFormatter.filter   s4       <  
 r   c                     t          t                    }| j        D ]3}|                    |d          }||                             |           4|S )Nr	   )r   r   r   rH   append)r   keygroupedrB   r   s        r   group_byz AbstractResultFormatter.group_by   sS    d## 	! 	!Ac6""AAJa    r   c                     | j         S r   rO   r6   s    r   as_dictsz AbstractResultFormatter.as_dicts   s
    |r   N)rQ   )r_   )__name__
__module____qualname__r   staticmethodr*   r/   r3   r7   r9   r<   r   rM   rP   r^   rX   r   rZ   r[   r\   r   r   r   r   r   r   r   rE   r   r   r   r   	   s       

 

 

 T T \T
 
 
 \
3 3 3       * * *      ',r 3 3 3 3  
   "K K K K
8 8 8 8 8
! ! ! ! !
! 
! 
! 
! 
!$ $ $# # ## # #( ( (        r   r   )rU   rV   rq   xml.etree.ElementTreeetreer   r|   r   collectionsr   r   rE   r   r   <module>r      s     



 				 " " " " " " " " "       # # # # # #P P P P P P P P P Pr   