
    4i                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZej	        d         dk    Z
e
reZeZeZeZeZddlmZ nej        Zej        ZeZddlmZ e
rej	        d         dk    rddlmZ nddlmZ dZdZdZdZdZ d	Z!d
Z"dZ# ej$        d          Z%d Z& G d de'          Z(d Z)d Z*ddZ+d Z, G d de          Z-d Z.d Z/d Z0e1dk    r e0             dS dS )z0.7.2    N   )
HTMLParser      )escape
            z\[[0-9;]*mc                     |                      d          }t          |          }t          d |D                       }||fS )N
c                 ,    g | ]}t          |          S  _str_block_width).0lines     (/home/kali/Ninja/core/lib/prettytable.py
<listcomp>z_get_size.<locals>.<listcomp>)   s!    <<<T"4((<<<    )splitlenmax)textlinesheightwidths       r   	_get_sizer   &   sD    JJtEZZF<<U<<<==E6?r   c                      e Zd ZdidZd Zd Zd Zd Zerd Z	nd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z eee          Zd Zd Z  eee           Z!d Z"d Z# ee"e#          Z$d  Z%d! Z& ee%e&          Z'd" Z(d# Z) ee(e)          Z*d$ Z+d% Z, ee+e,          Z-d& Z.d' Z/ ee.e/          Z0d( Z1d) Z2 ee1e2          Z3d* Z4d+ Z5 ee4e5          Z6d, Z7d- Z8 ee7e8          Z9d. Z:d/ Z; ee:e;          Z<d0 Z=d1 Z> ee=e>          Z?d2 Z@d3 ZA ee@eA          ZBd4 ZCd5 ZD eeCeD          ZEd6 ZFd7 ZG eeFeG          ZHd8 ZId9 ZJ eeIeJ          ZKd: ZLd; ZM eeLeM          ZNd< ZOd= ZP eeOeP          ZQd> ZRd? ZS eeReS          ZTd@ ZUdA ZV eeUeV          ZWdB ZXdC ZY eeXeY          ZZdD Z[dE Z\ ee[e\          Z]dF Z^dG Z_ ee^e_          Z`dH ZadI Zb eeaeb          ZcdJ ZddK Ze eedee          ZfdL ZgdM Zh eegeh          ZidN ZjdO ZkdP ZldQ ZmdR ZndS ZodT ZpdU ZqdjdXZrdY ZsdZ Ztd[ Zud\ Zvd] Zwd^ Zxd_ Zyd` Zzda Z{db Z|dc Z}dd Z~de Zdf Zdg Zdh ZdS )kPrettyTableNc                    |                     dd          | _        g | _        i | _        i | _        i | _        g | _        |r|| _        ng | _        d	                                | _
        | j
                            d	                                           | j
                            d	                                           | j
        D ](}||v r|                     |||                    #d||<   )|d         pd| _        |d	         pd| _        |d
         pd| _        |d         dv r|d         | _        nd| _        |d         pd| _        |d         dv r|d         | _        nd| _        |d         pt&          | _        |d         pt*          | _        |d         pd| _        |d         dv r|d         | _        nd| _        |d         pd | _        |d         pi | _        |d         pi | _        |d         pd| _        |d         pd| _        |d         pd| _        |d         p|                     d          | _         |d         p|                     d           | _!        |d!         p|                     d"          | _"        |d#         dv r|d#         | _#        nd| _#        |d$         pd| _$        |d%         pd| _%        |d&         pi | _&        dS )'a  Return a new PrettyTable instance

        Arguments:

        encoding - Unicode encoding scheme used to decode any encoded input
        field_names - list or tuple of field names
        fields - list or tuple of field names to include in displays
        start - index of first data row to include in output
        end - index of last data row to include in output PLUS ONE (list slice style)
        header - print a header showing field names (True or False)
        header_style - stylisation to apply to field names in header ("cap", "title", "upper", "lower" or None)
        border - print a border around the table (True or False)
        hrules - controls printing of horizontal rules after rows.  Allowed values: FRAME, HEADER, ALL, NONE
        vrules - controls printing of vertical rules between columns.  Allowed values: FRAME, ALL, NONE
        int_format - controls formatting of integer data
        float_format - controls formatting of floating point data
        padding_width - number of spaces on either side of column data (only used if left and right paddings are None)
        left_padding_width - number of spaces on left hand side of column data
        right_padding_width - number of spaces on right hand side of column data
        vertical_char - single character string used to draw vertical lines
        horizontal_char - single character string used to draw horizontal lines
        junction_char - single character string used to draw line junctions
        sortby - name of field to sort rows by
        sort_key - sorting key function, applied to data points before sorting
        valign - default valign for each row (None, "t", "m" or "b")
        reversesort - True or False to sort in descending or ascending orderencodingcp1252zZstart end fields header border sortby reversesort sort_key attributes format hrules vruleszLint_format float_format padding_width left_padding_width right_padding_widthzQvertical_char horizontal_char junction_char header_style valign xhtml print_emptyNstartr   endfieldsheaderTFTheader_styleborderhrulesvrulessortbyreversesortFsort_keyc                     | S Nr   xs    r   <lambda>z&PrettyTable.__init__.<locals>.<lambda>p   s    ! r   
int_formatfloat_formatpadding_widthr   left_padding_widthright_padding_widthvertical_char|horizontal_char-junction_char+print_emptyformatxhtml
attributes)'getr"   _field_names_align_valign
_max_width_rowsfield_names_widthsr   _optionsextend_validate_option_start_end_fields_header_header_style_borderFRAME_hrulesALL_vrules_sortby_reversesort	_sort_key_int_format_float_format_padding_width_left_padding_width_right_padding_width_unicode_vertical_char_horizontal_char_junction_char_print_empty_format_xhtml_attributes)selfrJ   kwargsoptions       r   __init__zPrettyTable.__init__/   s   6 

:x88
 	*DDLtzz||kqqsstttpvvxxyyym 	& 	&F%%ffVn====!%vWo*5M)T	h'/4(},,!(+DLLDL#N3;t(},,!(+DLLDLh'05h'.3h'/4- M11 &} 5D %D
+<!,/52#N39r$_5:#)*>#?#G4 $*+@$A$IT!$_5Ks9K9K &'8 9 OT]]3=O=O$_5Ks9K9K- M11 &} 5D $Dh'05Wo.!,/52r   c                     t          |t                    st          |          }t          |t                    st          || j        d          }|S )Nstrict)
isinstance
basestringstrunicoder"   )ri   values     r   ra   zPrettyTable._unicode   sI    %,, 	JJE%)) 	<E4=(;;Er   c                    |t          |          z
  }|dk    r||dz  z   S |dk    r|dz  |z   S |dz  r@t          |          dz  r|dz  dz  |z   |dz  dz   dz  z   S |dz  dz   dz  |z   |dz  dz  z   S |dz  dz  |z   |dz  dz  z   S )Nl rr   r   r   )ri   r   r   alignexcesss        r   _justifyzPrettyTable._justify   s    )$///C<<&3,&&C<<C<$&&A: 	@%%) J{S(4/6Q;?c2III!a3.5!c8IIIQ;$t+fkC.???r   c                     |dk    rt          | j                  S |dk    r>| j        rt          | j                  S | j        rt          | j        d                   S dS t          |          )Nrowcountcolcountr   )r   rI   rE   AttributeError)ri   names     r   __getattr__zPrettyTable.__getattr__   ss    :tz??":  4,--- 4:a=)))q &&&r   c           
         t                      }| j        |_        | j        D ]'}t          |d|z   t	          | d|z                        (t          |dt	          | d                     t          |t                    r&| j        |         D ]}|                    |           nUt          |t                    r!|                    | j        |                    nt          dt          |          z            |S )N_rF   z0Index %s is invalid, must be an integer or slice)r    rJ   rL   setattrgetattrro   slicerI   add_rowint	Exceptionrq   )ri   indexnewattrrows        r   __getitem__zPrettyTable.__getitem__   s   mm*M 	@ 	@DCtWT3:%>%>????XwtX66777eU## 	]z%( ! !C    ! s## 	]KK
5)****NQTUZQ[Q[[\\\
r   c                 *    |                                  S r1   )__unicode__ri   s    r   __str__zPrettyTable.__str__   s    ##%%%r   c                 Z    |                                                      | j                  S r1   )r   encoder"   r   s    r   r   zPrettyTable.__str__   s$    ##%%,,T];;;r   c                 *    |                                  S r1   )
get_stringr   s    r   r   zPrettyTable.__unicode__   s       r   c                    |dv r|                      |           d S |dv r|                     ||           d S |dv r|                     ||           d S |dv r|                     ||           d S |dv r|                     ||           d S |dv r|                     ||           d S |dv r|                     ||           d S |dv r|                     ||           d S |d	v r|                     |           d S |d
v r| 	                    ||           d S |dv r| 
                    ||           d S |dv r|                     ||           d S |dv r|                     ||           d S t          d|z            )NrJ   )r$   r%   	max_widthr7   r8   r9   rA   r-   r/   r+   r,   r&   )r'   r*   r.   rB   r@   r)   r5   r6   )r:   r<   r>   rC   zUnrecognised option: %s!)_validate_field_names_validate_nonnegative_int_validate_field_name_validate_function_validate_hrules_validate_vrules_validate_all_field_names_validate_true_or_false_validate_header_style_validate_int_format_validate_float_format_validate_single_char_validate_attributesr   )ri   rk   vals      r   rN   zPrettyTable._validate_option   s   ]""&&s+++++|||**6377777x%%fc22222z!!##FC00000x!!&#.....x!!&#.....x**6377777RRR((55555~%%'',,,,,|##%%fc22222~%%''44444LLL&&vs33333|##%%fc222226?@@@r   c           	      |   | j         rj	 t          |          t          | j                   k    sJ nA# t          $ r4 t          dt          |          t          | j                   fz            w xY w| j        rv	 t          |          t          | j        d                   k    sJ nG# t          $ r: t          dt          |          t          | j        d                   fz            w xY w	 t          |          t          t          |                    k    sJ d S # t          $ r t          d          w xY w)NzJField name list has incorrect number of values, (actual) %d!=%d (expected)r   zField names must be unique!)rE   r   AssertionErrorr   rI   setri   r   s     r   r   z!PrettyTable._validate_field_names   s    	SS3xx3t'8#9#999999! S S S lpstwpxpxz}  C  P  {Q  {Q  pR  !R  S  S  SS : 	OO3xx3tz!}#5#555555! O O O lpstwpxpxz}  C  I  JK  L  {M  {M  pN  !N  O  O  OO	;s88s3s88}},,,,,, 	; 	; 	;9:::	;s"   '1 >A/:-B( (AC,0/D! !D;c                 P    	 |dv sJ n# t           $ r t          d          w xY wd S )N)captitleupperlowerNz;Invalid header style, use cap, title, upper, lower or None!r   r   r   s     r   r   z"PrettyTable._validate_header_style   sR    	[BBBBBB 	[ 	[ 	[YZZZ	[ ts   	 #c                 T    	 |dv sJ d S # t           $ r t          d|z            w xY w)N)ru   crw   z'Alignment %s is invalid, use l, c or r!r   r   s     r   _validate_alignzPrettyTable._validate_align   sR    	M/)))))) 	M 	M 	MEKLLL	M   
 'c                 V    	 |dv sJ n # t           $ r t          d|z            w xY wd S )N)tmbNz-Alignment %s is invalid, use t, m, b or None!r   r   s     r   _validate_valignzPrettyTable._validate_valign   sW    	S////// 	S 	S 	SKcQRRR	S ts   	 &c           	          	 t          |          dk    sJ d S # t          $ r* t          d|d|                     |          d          w xY w)Nr   zInvalid value for z: !)r   r   r   ra   ri   r   r   s      r   r   z%PrettyTable._validate_nonnegative_int  si    	Vs88q====== 	V 	V 	V)444sASASASASTUUU	Vs	    4Ac                 T    	 |dv sJ d S # t           $ r t          d|z            w xY w)Nr(   z-Invalid value for %s!  Must be True or False.r   r   s      r   r   z#PrettyTable._validate_true_or_false  sR    	T-'''''' 	T 	T 	TKdRSSS	Tr   c                     |dk    rd S 	 t          |          t          t          fv sJ |                                sJ d S # t          $ r t          d|z            w xY w)N z8Invalid value for %s!  Must be an integer format string.)typerq   rr   isdigitr   r   r   s      r   r   z PrettyTable._validate_int_format  s~    "99F	_99g....;;==  =   	_ 	_ 	_VY]]^^^	_s   5A Ac                    |dk    rd S 	 t          |          t          t          fv sJ d|v sJ |                    d          }t	          |          dk    sJ |d         dk    s|d                                         sJ |d         dk    s|d                                         sJ d S d S # t          $ r t          d|z            w xY w)Nr   .r   r   r   z5Invalid value for %s!  Must be a float format string.)r   rq   rr   r   r   r   r   r   )ri   r   r   bitss       r   r   z"PrettyTable._validate_float_format  s    "99F	\99g....#::::99S>>Dt99>>>>7b==DGOO$5$5==57b==DGOO$5$5==5==== 	\ 	\ 	\SVZZ[[[	\s   BB- -C
c                 l    	 t          |d          sJ d S # t          $ r t          d|z            w xY w)N__call__z*Invalid value for %s!  Must be a function.)hasattrr   r   r   s      r   r   zPrettyTable._validate_function*  sW    	Q3
+++++++ 	Q 	Q 	QH4OPPP	Qs    3c                     	 |t           t          t          t          fv sJ d S # t          $ r t          d|z            w xY w)Nz:Invalid value for %s!  Must be ALL, FRAME, HEADER or NONE.)rW   rU   HEADERNONEr   r   r   s      r   r   zPrettyTable._validate_hrules0  so    	a3        	a 	a 	aX[__```	as   " ?c                 x    	 |t           t          t          fv sJ d S # t          $ r t	          d|z            w xY w)Nz3Invalid value for %s!  Must be ALL, FRAME, or NONE.)rW   rU   r   r   r   r   s      r   r   zPrettyTable._validate_vrules9  sZ    	Z3t,,,,,,, 	Z 	Z 	ZQTXXYYY	Zs    9c                 d    	 || j         v s|J n # t          $ r t          d|z            w xY wd S )NzInvalid field name: %s!)rE   r   r   r   s      r   r   z PrettyTable._validate_field_name?  sU    	=$+++s{{: 	= 	= 	=5;<<<	= 	s    -c                 x    	 |D ]}|                      ||           d S # t          $ r t          d          w xY w)Nz)fields must be a sequence of field names!)r   r   r   )ri   r   r   r3   s       r   r   z%PrettyTable._validate_all_field_namesG  sj    	I 3 3))$22223 3  	I 	I 	IGHHH	Is    9c                 r    	 t          |          dk    sJ d S # t          $ r t          d|z            w xY w)Nr   z4Invalid value for %s!  Must be a string of length 1.)r   r   r   r   s      r   r   z!PrettyTable._validate_single_charO  s[    	[#C((A------ 	[ 	[ 	[RUYYZZZ	[s    6c                 p    	 t          |t                    sJ d S # t          $ r t          d          w xY w)Nz4attributes must be a dictionary of name/value pairs!)ro   dictr   r   r   s      r   r   z PrettyTable._validate_attributesU  sR    	Tc4((((((( 	T 	T 	TRSSS	Ts    5c                     | j         S r1   )rE   r   s    r   _get_field_nameszPrettyTable._get_field_names[  s      r   c                 P     fd|D             }                      d|            j        r j        d d          }| _         j        rV|rTt          ||          D ]\  }} j        |          j        |<   |D ]%}| j        vr j                            |           &n j        D ]}d j        |<    j        rW|rUt          ||          D ]\  }} j        |          j        |<   |D ]%}| j        vr j                            |           &d S  j        D ]}d j        |<   d S )Nc                 :    g | ]}                     |          S r   )ra   )r   r3   ri   s     r   r   z0PrettyTable._set_field_names.<locals>.<listcomp>_  s%    ///Qa  ///r   rJ   r   r   )rN   rE   rF   zippoprG   )ri   r   	old_namesold_namenew_namefields   `     r   _set_field_nameszPrettyTable._set_field_names^  s   ////#///mS111 	-)!!!,I; 
	)9 
	)&))S&9&9 > >"((,H(=H%%% . .4;..KOOH---.
 * ) )%(E""< 
	*I 
	*&))S&9&9 @ @"()-h)?X&&% / /4<//L$$X.../ /
 * * *&)U##* *r   c                     | j         S r1   )rF   r   s    r   
_get_alignzPrettyTable._get_align~  s
    {r   c                 X    |                      |           | j        D ]}|| j        |<   d S r1   )r   rE   rF   ri   r   r   s      r   
_set_alignzPrettyTable._set_align  sA    S!!!& 	% 	%E!$DK	% 	%r   c                     | j         S r1   )rG   r   s    r   _get_valignzPrettyTable._get_valign  s
    |r   c                 X    |                      |           | j        D ]}|| j        |<   d S r1   )r   rE   rG   r   s      r   _set_valignzPrettyTable._set_valign  sA    c"""& 	& 	&E"%DL	& 	&r   c                     | j         S r1   )rH   r   s    r   _get_max_widthzPrettyTable._get_max_width  s
    r   c                 Z    |                      d|           | j        D ]}|| j        |<   d S )Nr   )rN   rE   rH   r   s      r   _set_max_widthzPrettyTable._set_max_width  sC    k3///& 	) 	)E%(DOE""	) 	)r   c                     | j         S )zList or tuple of field names to include in displays

        Arguments:

        fields - list or tuple of field names to include in displays)rQ   r   s    r   _get_fieldszPrettyTable._get_fields       |r   c                 @    |                      d|           || _        d S )Nr&   )rN   rQ   r   s     r   _set_fieldszPrettyTable._set_fields  #    h,,,r   c                     | j         S )z{Start index of the range of rows to print

        Arguments:

        start - index of first data row to include in output)rO   r   s    r   
_get_startzPrettyTable._get_start  s     {r   c                 @    |                      d|           || _        d S )Nr$   )rN   rO   r   s     r   
_set_startzPrettyTable._set_start  s#    gs+++r   c                     | j         S )zEnd index of the range of rows to print

        Arguments:

        end - index of last data row to include in output PLUS ONE (list slice style))rP   r   s    r   _get_endzPrettyTable._get_end  s     yr   c                 @    |                      d|           || _        d S )Nr%   )rN   rP   r   s     r   _set_endzPrettyTable._set_end  s#    eS)))			r   c                     | j         S )z_Name of field by which to sort rows

        Arguments:

        sortby - field name to sort by)rY   r   s    r   _get_sortbyzPrettyTable._get_sortby  r   r   c                 @    |                      d|           || _        d S )Nr-   )rN   rY   r   s     r   _set_sortbyzPrettyTable._set_sortby  r   r   c                     | j         S )zControls direction of sorting (ascending vs descending)

        Arguments:

        reveresort - set to True to sort by descending order, or False to sort by ascending order)rZ   r   s    r   _get_reversesortzPrettyTable._get_reversesort         r   c                 @    |                      d|           || _        d S )Nr.   )rN   rZ   r   s     r   _set_reversesortzPrettyTable._set_reversesort  &    mS111r   c                     | j         S )zSorting key function, applied to data points before sorting

        Arguments:

        sort_key - a function which takes one argument and returns something to be sorted)r[   r   s    r   _get_sort_keyzPrettyTable._get_sort_key  s     ~r   c                 @    |                      d|           || _        d S )Nr/   )rN   r[   r   s     r   _set_sort_keyzPrettyTable._set_sort_key  s#    j#...r   c                     | j         S )zControls printing of table header with field names

        Arguments:

        header - print a header showing field names (True or False))rR   r   s    r   _get_headerzPrettyTable._get_header  r   r   c                 @    |                      d|           || _        d S )Nr'   )rN   rR   r   s     r   _set_headerzPrettyTable._set_header  r   r   c                     | j         S )zControls stylisation applied to field names in header

        Arguments:

        header_style - stylisation to apply to field names in header ("cap", "title", "upper", "lower" or None))rS   r   s    r   _get_header_stylezPrettyTable._get_header_style  s     !!r   c                 >    |                      |           || _        d S r1   )r   rS   r   s     r   _set_header_stylezPrettyTable._set_header_style  s$    ##C((( r   c                     | j         S )z~Controls printing of border around table

        Arguments:

        border - print a border around the table (True or False))rT   r   s    r   _get_borderzPrettyTable._get_border  r   r   c                 @    |                      d|           || _        d S )Nr*   )rN   rT   r   s     r   _set_borderzPrettyTable._set_border  r   r   c                     | j         S )zControls printing of horizontal rules after rows

        Arguments:

        hrules - horizontal rules style.  Allowed values: FRAME, ALL, HEADER, NONE)rV   r   s    r   _get_hruleszPrettyTable._get_hrules  r   r   c                 @    |                      d|           || _        d S )Nr+   )rN   rV   r   s     r   _set_hruleszPrettyTable._set_hrules"  r   r   c                     | j         S )zControls printing of vertical rules between columns

        Arguments:

        vrules - vertical rules style.  Allowed values: FRAME, ALL, NONE)rX   r   s    r   _get_vruleszPrettyTable._get_vrules(  r   r   c                 @    |                      d|           || _        d S )Nr,   )rN   rX   r   s     r   _set_vruleszPrettyTable._set_vrules0  r   r   c                     | j         S )zbControls formatting of integer data
        Arguments:

        int_format - integer format string)r\   r   s    r   _get_int_formatzPrettyTable._get_int_format6  s    
 r   c                 .    | j         D ]}|| j        |<   d S r1   )rE   r\   r   s      r   _set_int_formatzPrettyTable._set_int_format=  s.    & 	* 	*E&)DU##	* 	*r   c                     | j         S )zrControls formatting of floating point data
        Arguments:

        float_format - floating point format string)r]   r   s    r   _get_float_formatzPrettyTable._get_float_formatC  s    
 !!r   c                 .    | j         D ]}|| j        |<   d S r1   )rE   r]   r   s      r   _set_float_formatzPrettyTable._set_float_formatJ  s.    & 	, 	,E(+Du%%	, 	,r   c                     | j         S )zThe number of empty spaces between a column's edge and its content

        Arguments:

        padding_width - number of spaces, must be a positive integer)r^   r   s    r   _get_padding_widthzPrettyTable._get_padding_widthP       ""r   c                 @    |                      d|           || _        d S )Nr7   )rN   r^   r   s     r   _set_padding_widthzPrettyTable._set_padding_widthX  s&    os333!r   c                     | j         S )zThe number of empty spaces between a column's left edge and its content

        Arguments:

        left_padding - number of spaces, must be a positive integer)r_   r   s    r   _get_left_padding_widthz#PrettyTable._get_left_padding_width^  s     ''r   c                 @    |                      d|           || _        d S )Nr8   )rN   r_   r   s     r   _set_left_padding_widthz#PrettyTable._set_left_padding_widthf  s'    2C888#&   r   c                     | j         S )zThe number of empty spaces between a column's right edge and its content

        Arguments:

        right_padding - number of spaces, must be a positive integer)r`   r   s    r   _get_right_padding_widthz$PrettyTable._get_right_padding_widthl  s     ((r   c                 @    |                      d|           || _        d S )Nr9   )rN   r`   r   s     r   _set_right_padding_widthz$PrettyTable._set_right_padding_widtht  s'    3S999$'!!!r   c                     | j         S )zThe charcter used when printing table borders to draw vertical lines

        Arguments:

        vertical_char - single character string used to draw vertical lines)rb   r   s    r   _get_vertical_charzPrettyTable._get_vertical_charz  r"  r   c                 j    |                      |          }|                     d|           || _        d S Nr:   )ra   rN   rb   r   s     r   _set_vertical_charzPrettyTable._set_vertical_char  7    mmC  os333!r   c                     | j         S )zThe charcter used when printing table borders to draw horizontal lines

        Arguments:

        horizontal_char - single character string used to draw horizontal lines)rc   r   s    r   _get_horizontal_charz PrettyTable._get_horizontal_char  s     $$r   c                 j    |                      |          }|                     d|           || _        d S )Nr<   )ra   rN   rc   r   s     r   _set_horizontal_charz PrettyTable._set_horizontal_char  s8    mmC  /555 #r   c                     | j         S )zThe charcter used when printing table borders to draw line junctions

        Arguments:

        junction_char - single character string used to draw line junctions)rd   r   s    r   _get_junction_charzPrettyTable._get_junction_char  r"  r   c                 j    |                      |          }|                     d|           || _        d S r0  )ra   rN   rd   r   s     r   _set_junction_charzPrettyTable._set_junction_char  r2  r   c                     | j         S )z~Controls whether or not HTML tables are formatted to match styling options

        Arguments:

        format - True or False)rf   r   s    r   _get_formatzPrettyTable._get_format  r   r   c                 @    |                      d|           || _        d S )NrA   )rN   rf   r   s     r   _set_formatzPrettyTable._set_format  r   r   c                     | j         S )zControls whether or not empty tables produce a header and frame or just an empty string

        Arguments:

        print_empty - True or False)re   r   s    r   _get_print_emptyzPrettyTable._get_print_empty  r   r   c                 @    |                      d|           || _        d S )Nr@   )rN   re   r   s     r   _set_print_emptyzPrettyTable._set_print_empty  r   r   c                     | j         S )zA dictionary of HTML attribute name/value pairs to be included in the <table> tag when printing HTML

        Arguments:

        attributes - dictionary of attributes)rh   r   s    r   _get_attributeszPrettyTable._get_attributes  s     r   c                 @    |                      d|           || _        d S )NrC   )rN   rh   r   s     r   _set_attributeszPrettyTable._set_attributes  s&    lC000r   c                     i }| j         D ]D}||v r(|                     |||                    ||         ||<   .t          | d|z             ||<   E|S )Nr   )rL   rN   r   )ri   rj   optionsrk   s       r   _get_optionszPrettyTable._get_options  sj    m 	> 	>F%%ffVn==="(.")$f"="=r   c                 (   |t           k    r|                                  d S |t          k    r|                                  d S |t          k    r|                                  d S |t          k    r|                                  d S t          d          )NzInvalid pre-set style!)	DEFAULT_set_default_styleMSWORD_FRIENDLY_set_msword_stylePLAIN_COLUMNS_set_columns_styleRANDOM_set_random_styler   )ri   styles     r   	set_stylezPrettyTable.set_style  s    G##%%%%%o%%""$$$$$m####%%%%%f__""$$$$$4555r   c                     d| _         d| _        t          | _        t          | _        d| _        d| _        d| _        d| _	        d| _
        d| _        d S )NTr   r;   r=   r?   )r'   r*   rU   rV   rW   rX   r7   r8   r9   r:   r<   r>   r   s    r   rL  zPrettyTable._set_default_style  sT    "##$  " r   c                 r    d| _         d| _        t          | _        d| _        d| _        d| _        d| _        d S )NTr   r;   )r'   r*   r   rV   r7   r8   r9   r:   r   s    r   rN  zPrettyTable._set_msword_style  s=    "##$  r   c                 L    d| _         d| _        d| _        d| _        d| _        d S )NTFr   r      )r'   r*   r7   r8   r9   r   s    r   rP  zPrettyTable._set_columns_style  s.    "##$   r   c                     t          j        d          | _        t          j        d          | _        t          j        t          t
          t          t          f          | _        t          j        t          t
          t          f          | _	        t          j
        dd          | _        t          j
        dd          | _        t          j        d          | _        t          j        d          | _        t          j        d          | _        d S )Nr(   r      z ~!@#$%^&*()_+|-=\{}[];':",./;<>?)randomchoicer'   r*   rW   rU   r   r   rV   rX   randintr8   r9   r:   r<   r>   r   s    r   rR  zPrettyTable._set_random_style  s    mM22mM22}c			&   }c5$%788"(.A"6"6#)>!Q#7#7 #]+OPP%}-QRR#]+OPPr   c                 x   | j         rXt          |          t          | j                   k    r3t          dt          |          t          | j                   fz            | j         s,d t          dt          |                    D             | _        | j                            t          |                     dS )zAdd a row to the table

        Arguments:

        row - row of data, should be a list with as many elements as the table
        has fieldsz>Row has incorrect number of values, (actual) %d!=%d (expected)c                     g | ]
}d |dz   z  S )zField %dr   r   )r   ns     r   r   z'PrettyTable.add_row.<locals>.<listcomp>  s!    SSS!q1u!5SSSr   r   N)rE   r   r   rangerJ   rI   appendlist)ri   r   s     r   r   zPrettyTable.add_row  s      	CSS1B-C-C!C!C\`cdg`h`hjmnrn  kA  kA  `B  B  C  C  C  	TSSuQC?Q?QSSSD
$s))$$$$$r   c                     |t          | j                  dz
  k    r&t          d|t          | j                  fz            | j        |= dS )zDelete a row to the table

        Arguments:

        row_index - The index of the row you want to delete.  Indexing starts at 0.r   z4Cant delete row at index %d, table only has %d rows!N)r   rI   r   )ri   	row_indexs     r   del_rowzPrettyTable.del_row  sS     s4:***RV_adeieoapapUqqrrrJy!!!r   r   r   c                 \   t          | j                  dt          |          fv r|                     |           |                     |           | j                            |           || j        |<   || j        |<   t          dt          |                    D ]]}t          | j                  |dz   k     r| j                            g            | j        |                             ||                    ^dS t          dt          |          t          | j                  fz            )a  Add a column to the table.

        Arguments:

        fieldname - name of the field to contain the new column of data
        column - column of data, should be a list with as many elements as the
        table has rows
        align - desired alignment for this column - "l" for left, "c" for centre and "r" for right
        valign - desired vertical alignment for new columns - "t" for top, "m" for middle and "b" for bottomr   r   z2Column length %d does not match number of rows %d!N)
r   rI   r   r   rE   rb  rF   rG   ra  r   )ri   	fieldnamecolumnrx   valignis         r   
add_columnzPrettyTable.add_column)  s"    tz??q#f++...  '''!!&)))$$Y///%*DK	"&,DL#1c&kk** 0 0tz??QU**J%%b)))
1$$VAY////0 0 PTWX^T_T_adeieoapapSqqrrrr   c                     g | _         dS )z?Delete all rows from the table but keep the current field namesN)rI   r   s    r   
clear_rowszPrettyTable.clear_rowsA  s    


r   c                 0    g | _         g | _        g | _        dS )zWDelete all rows and field names from the table, maintaining nothing but styling optionsN)rI   rE   rK   r   s    r   clearzPrettyTable.clearE  s    
r   c                 *    t          j        |           S r1   )copydeepcopyr   s    r   rr  zPrettyTable.copyK  s    }T"""r   c                 >   t          |t                    r0|| j        v r'|                     d| j        |         z  |z            }nDt          |t                    r/|| j        v r&|                     d| j        |         z  |z            }|                     |          S )Nz%%%sdz%%%sf)ro   r   r\   ra   floatr]   )ri   r   rs   s      r   _format_valuezPrettyTable._format_valueN  s    eS!! 	Oet/?&?&?MM'D,<U,C"Ce"KLLEEu%% 	O%43E*E*EMM'D,>u,E"E"MNNE}}U###r   c           
         |d         rd | j         D             }nt          | j                  dgz  }|D ]}t          |          D ]\  }}| j        |         }|| j        v rFt          ||         t          t          |          d         | j        |                             ||<   at          ||         t          |          d                   ||<   || _        d S )Nr'   c                 8    g | ]}t          |          d          S r   )r   )r   r   s     r   r   z/PrettyTable._compute_widths.<locals>.<listcomp>W  s%    KKKuy''*KKKr   r   )	rE   r   rJ   	enumerater   r   minr   rK   )ri   rowsrH  widthsr   r   rs   rh  s           r   _compute_widthszPrettyTable._compute_widthsU  s    8 	1KK8IKKKFF)**aS0F 	L 	LC )# L Lu ,U3	..$'us9U;K;KA;NPTP^_hPi7j7j$k$kF5MM$'uy7G7G7J$K$KF5MML r   c                 n    |d         	|d         }n|d         }|d         	|d         }n|d         }||fS )Nr8   r7   r9   r   )ri   rH  lpadrpads       r   _get_padding_widthszPrettyTable._get_padding_widthsd  sR    '(4/0DD?+D()501DD?+Dd|r   c                 ,   t          j        | j        |d         |d                            }|d         r]| j                            |d                   fd|D             }|                    |d         |d                    d |D             }|S )	zReturn only those data rows that should be printed, based on slicing and sorting.

        Arguments:

        options - dictionary of option settings.r$   r%   r-   c                 (    g | ]}|         g|z   S r   r   )r   r   	sortindexs     r   r   z)PrettyTable._get_rows.<locals>.<listcomp>x  s%    ===c)n%+===r   r.   r/   )reversekeyc                 "    g | ]}|d d         S )r   Nr   )r   r   s     r   r   z)PrettyTable._get_rows.<locals>.<listcomp>z  s     ...SW...r   )rr  rs  rI   rE   r   sort)ri   rH  r|  r  s      @r   	_get_rowszPrettyTable._get_rowso  s     }TZ(8(GHII8 	/)//0ABBI====t===DIIgm4'*:MINNN.....Dr   c                 F      fdt           j        |          D             S )Nc                 B    g | ]\  }}                     ||          S r   )rv  )r   r   rs   ri   s      r   r   z+PrettyTable._format_row.<locals>.<listcomp>~  s-    cccleU##E511cccr   )r   rE   )ri   r   rH  s   `  r   _format_rowzPrettyTable._format_row}  s+    ccccc$J[]`FaFaccccr   c                 $      fd|D             S )Nc                 <    g | ]}                     |          S r   )r  )r   r   rH  ri   s     r   r   z,PrettyTable._format_rows.<locals>.<listcomp>  s)    AAAC!!#w//AAAr   r   )ri   r|  rH  s   ` `r   _format_rowszPrettyTable._format_rows  s!    AAAAA4AAAAr   c                    |                      |          }g }| j        dk    r|d         r|d         sdS |                     |          }|                     ||          }|                     ||           |                     |          | _        |d         r)|                    |                     |                     n8|d         r0|d         t          t          fv r|                    | j                   |D ]+}|                    |                     ||                     ,|d         r+|d         t          k    r|                    | j                   |                     d                              |          S )a"  Return string representation of table in current state.

        Arguments:

        start - index of first data row to include in output
        end - index of last data row to include in output PLUS ONE (list slice style)
        fields - names of fields (columns) to include
        header - print a header showing field names (True or False)
        border - print a border around the table (True or False)
        hrules - controls printing of horizontal rules after rows.  Allowed values: ALL, FRAME, HEADER, NONE
        vrules - controls printing of vertical rules between columns.  Allowed values: FRAME, ALL, NONE
        int_format - controls formatting of integer data
        float_format - controls formatting of floating point data
        padding_width - number of spaces on either side of column data (only used if left and right paddings are None)
        left_padding_width - number of spaces on left hand side of column data
        right_padding_width - number of spaces on right hand side of column data
        vertical_char - single character string used to draw vertical lines
        horizontal_char - single character string used to draw horizontal lines
        junction_char - single character string used to draw line junctions
        sortby - name of field to sort rows by
        sort_key - sorting key function, applied to data points before sorting
        reversesort - True or False to sort in descending or ascending order
        print empty - if True, stringify just the header for an empty table, if False return an empty string r   r@   r*   r   r'   r+   r   )rI  r|   r  r  r~  _stringify_hrule_hrulerb  _stringify_headerrW   rU   _stringify_rowra   join)ri   rj   rH  r   r|  formatted_rowsr   s          r   r   zPrettyTable.get_string  s{   0 ##F++=Aw}'=WXEV2~~g&&**499^W555++G448 	&LL//889999X 	&78#4e#D#DLL%%%! 	< 	<CLL,,S'::;;;;8 	&!2e!;!;LL%%%}}T""''...r   c                    |d         sdS |                      |          \  }}|d         t          t          fv r
|d         g}n	|d         g}| j        s0|                    |d                    d                    |          S t          | j        | j                  D ]\  }}|d         r||d         vr|                    ||z   |z   |d         z             |d         t          k    r|                    |d                    i|                    |d                    |d         t          k    r/|                                 |                    |d                    d                    |          S )Nr*   r   r,   r>   r<   r&   )	r  rW   rU   rE   rb  r  r   rK   r   )ri   rH  r  r  r   r   r   s          r   r  zPrettyTable._stringify_hrule  s~   x  	2--g66
d8e,,O,-DD-./D  	!KK0111774==  14<@@ 	8 	8LE5x  U'(2C%C%CKK,8I0JJKKKx C''GO45555G$5677778%%HHJJJKK0111wwt}}r   c           
         g }|                      |          \  }}|d         r|d         t          t          fv r/|                    | j                   |                    d           |d         t          t          fv r|                    |d                    n|                    d           | j        sG|d         t          t          fv r|                    |d                    n|                    d           t          | j        | j                  D ]'\  }}|d         r||d         vr| j        dk    r|	                                }nb| j        d	k    r|
                                }nB| j        d
k    r|                                }n"| j        dk    r|                                }n|}|                    d|z  |                     ||| j        |                   z   d|z  z              |d         rC|d         t          k    r|                    |d                    |                    d           )|d         r@|d         t          k    r/|                                 |                    |d                    |d         r@|d         t           k    r/|                    d           |                    | j                   d                    |          S )Nr*   r+   r   r,   r:   rv   r&   r   r   r   r   r   )r  rW   rU   rb  r  rE   r   rK   rS   
capitalizer   r   r   rz   rF   r   r   r  )ri   rH  r   r  r  r   r   rh  s           r   r  zPrettyTable._stringify_header  s   --g66
d8 	!x S%L00DK(((D!!!x S%L00GO45555C     	!x S%L00GO45555C    14<@@ 	% 	%LE5x  U'(2C%C%C!U**!,,..		#w..!KKMM		#w..!KKMM		#w..!KKMM		!	KKd
T]]9eT[QVEW%X%XX[^ae[eefffx  %8$++KK 89999KK$$$8 	2!2e!;!;HHJJJKK01118 	%!2d!:!:KKKK$$$wwt}}r   c                    t          t          dt          |                    | j        || j                  D ]|\  }}}}|                    d          }g }|D ]?}	t          |	          |k    rt          j        |	|          }	|	                    |	           @|}d
                    |          }|||<   }d}
|D ]}t          |          d         }||
k    r|}
 g }|                     |          \  }}t          d|
          D ]q}|	                    g            |d         rR|d         t          t          fv r!||         	                    | j                   V||         	                    d           rt          | j        || j                  D ]K\  }}}| j        |         }|                    d          }|
t          |          z
  }|rS|dk    r4dgt#          |d	z            z  |z   dg|t#          |d	z            z
  z  z   }n|d
k    r
dg|z  |z   }n	|dg|z  z   }d}|D ]}|d         r||d         vr||         	                    d|z  |                     ||| j        |                   z   d|z  z              |d         rM|d         t          k    r!||         	                    | j                   n||         	                    d           |dz  }Mt          d|
          D ]V}|d         rL|d         t          k    r;||                                          ||         	                    |d                    W|d         rR|d         t          k    rA||
dz
           	                    d           ||
dz
           	                    | j                   t          d|
          D ] }d
                    ||                   ||<   !d
                    |          S )Nr   r   r   r*   r,   rv   r   r   r   r   r&   r:   r+   )r   ra  r   rE   rK   r   r   textwrapfillrb  r  r   r  rW   rU   r:   rG   r   rz   rF   r   r  )ri   r   rH  r   r   rs   r   r   	new_linesr   
row_heightr   hr   r  r  yrj  dHeightru   s                       r   r  zPrettyTable._stringify_row  s0   *-eAs3xx.@.@$BSUXZ^Zf*g*g 
	 
	&E5%KK%%EI ' '#D))E11#=u55D  &&&&EIIe$$ECJJ
 	 	A!QA:~~
--g66
dq*%% 	( 	(AKKOOOx  (8$e44GNN4#56666GNN3'''#&t'8#t|#L#L 	 	E5%\%(FKK%%E 3u::-G 3S==D3w{#3#33e;rdgPST[^_T_P`P`F`>aaEEs]]D7NU2EE!RD7N2EA 	 	8$ gh6G)G)GQsTzDMM!UDKPUDV,W,WWZ]`dZddeee8$ ,x(C//Qt'9::::Qs+++Q	 q*%% 	9 	9Ax  9WX%6%%?%?QQw78888 	5!2c!9!9a ''---a ''444q*%% 	' 	'Aggd1g&&DGGyyr   c                     |                      |          }|d         r|                     |          }n|                     |          }|S )a;  Return string representation of HTML formatted version of table in current state.

        Arguments:

        start - index of first data row to include in output
        end - index of last data row to include in output PLUS ONE (list slice style)
        fields - names of fields (columns) to include
        header - print a header showing field names (True or False)
        border - print a border around the table (True or False)
        hrules - controls printing of horizontal rules after rows.  Allowed values: ALL, FRAME, HEADER, NONE
        vrules - controls printing of vertical rules between columns.  Allowed values: FRAME, ALL, NONE
        int_format - controls formatting of integer data
        float_format - controls formatting of floating point data
        padding_width - number of spaces on either side of column data (only used if left and right paddings are None)
        left_padding_width - number of spaces on left hand side of column data
        right_padding_width - number of spaces on right hand side of column data
        sortby - name of field to sort rows by
        sort_key - sorting key function, applied to data points before sorting
        attributes - dictionary of name/value pairs to include as HTML attributes in the <table> tag
        xhtml - print <br/> tags if True, <br> tags if falserA   )rI  _get_formatted_html_string_get_simple_html_string)ri   rj   rH  strings       r   get_html_stringzPrettyTable.get_html_string4  sQ    * ##F++8 	;44W==FF11'::Fr   c           	      J   g }|d         rd}nd}g }|                     d           |d         r3|d         D ]*}|                     d|d|d         |         d           +|                     d	           |                     d
                    |                     |d         r|                     d           | j        D ]N}|d         r||d         vr|                     dt          |                              d|          z             O|                     d           |                     |          }|                     ||          }|D ]}	|                     d           t          | j        |	          D ]Q\  }}
|d         r||d         vr|                     dt          |
                              d|          z             R|                     d           |                     d           |                     d                              |          S )NrB   <br/><br><tablerC   rv   ="">r   r'       <tr>r&   z        <th>%s</th>r   	    </tr>z        <td>%s</td></table>)	rb  r  rE   r   replacer  r  r   ra   )ri   rH  r   	linebreakopen_tag	attr_namer   r|  r  r   datums              r   r  z#PrettyTable._get_simple_html_stringP  sR   7 	III!!!<  	\$\2 \ \	iii9Ny9Y9Y9Y Z[[[[RWWX&&'''8 	&LL$$$* ] ]8$ gh6G)G)G2VE]]5J5J4QZ5[5[[\\\\LL%%%~~g&&**499! 	& 	&CLL$$$ #D$5s ; ; ] ]u8$ gh6G)G)G2VE]]5J5J4QZ5[5[[\\\\LL%%%%Z   }}T""''...r   c                    g }|                      |          \  }}|d         rd}nd}g }|                    d           |d         rD|d         t          k    r(|d         t          k    r|                    d           n|d         t          k    r'|d         t          k    r|                    d	           n|d         t          k    r'|d         t          k    r|                    d
           n|d         t          k    r|                    d           nt|d         t          k    r|                    d           nM|d         t          k    r|                    d           n&|d         t          k    r|                    d           |d         r3|d         D ]*}|                    d|d|d         |         d           +|                    d           |                    d                    |                     |d         r|                    d           | j        D ]Q}|d         r||d         vr|                    d||t          |                              d|          fz             R|                    d           |                     |          }	| 	                    |	|          }
g }g }| j        D ]V}|                    dddd| j
        |                             |                    dd d!d"| j        |                             W|
D ]}|                    d           t          | j        |||          D ]X\  }}}}|d         r||d         vr|                    d#||||t          |                              d|          fz             Y|                    d           |                    d$           |                     d                              |          S )%NrB   r  r  r  r*   r+   r,   z frame="box" rules="all"z frame="box"z frame="box" rules="cols"z frame="hsides"z frame="hsides" rules="rows"z frame="vsides"z frame="vsides" rules="cols"rC   rv   r  r  r  r   r'   r  r&   zW        <th style="padding-left: %dem; padding-right: %dem; text-align: center">%s</th>r   r  leftrightcenter)ru   rw   r   topmiddlebottom)r   r   r   zg        <td style="padding-left: %dem; padding-right: %dem; text-align: %s; vertical-align: %s">%s</td>r  )r  rb  rW   rU   r  rE   r   r  r  r  rF   rG   r   ra   )ri   rH  r   r  r  r  r  r  r   r|  r  alignsvalignsr   r  rx   rj  s                    r   r  z&PrettyTable._get_formatted_html_stringt  s   --g66
d7 	III!!!8 	@x C''GH,=,D,D :;;;;"e++0AU0J0J////"e++0AS0H0H ;<<<<"e++ 12222"c)) >????"e++ 12222"c)) >???<  	\$\2 \ \	iii9Ny9Y9Y9Y Z[[[[RWWX&&'''8 	&LL$$$* o o8$ gh6G)G)Gvz~  AE  GM  NS  GT  GT  G\  G\  ]a  cl  Gm  Gm  zn  n  o  o  o  oLL%%%~~g&&**499& 	2 	2EMM  K.0 1 1 1 NN  L/1 2 2 2 2 " 	& 	&CLL$$$/243Dc6SZ/[/[ : :+ueV8$ gh6G)G)G  G  KO&&tY77	J9 9 : : : : LL%%%%Z   }}T""''...r   r1   )r   r   )__name__
__module____qualname__rl   ra   rz   r   r   py3kr   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyrJ   r   r   rx   r   r   rj  r   r   r   r   r   r&   r   r   r$   r   r   r%   r   r   r-   r   r   r.   r  r  r/   r  r  r'   r	  r  r)   r  r  r*   r  r  r+   r  r  r,   r  r  r5   r  r  r6   r!  r$  r7   r&  r(  r8   r*  r,  r9   r.  r1  r:   r4  r6  r<   r8  r:  r>   r<  r>  rA   r@  rB  r@   rD  rF  rC   rI  rT  rL  rN  rP  rR  r   rf  rl  rn  rp  rr  rv  r~  r  r  r  r  r   r  r  r  r  r  r  r   r   r   r    r    -   s`       Q Q Q Qf  @ @ @' ' '  "  <	& 	& 	& 	&
	< 	< 	<! ! !A A A<; ; ;$  M M M  V V VT T T_ _ _\ \ \Q Q Qa a aZ Z Z  I I I[ [ [T T T! ! !* * *< (+-=>>K  % % %
 HZ,,E  & & &
 Xk;//F  ) ) )
 88I     Xk;//F     HZ,,E     (8X
&
&C     Xk;//F! ! !      (+-=>>K     x}55H     Xk;//F" " "! ! ! 8-/@AAL     Xk;//F     Xk;//F     Xk;//F     * * * /?;;J" " ", , , 8-/@AAL# # #" " " H/1CDDM( ( (' ' ' ""9;RSS) ) )( ( ( #(#;=UVV# # #" " "
 H/1CDDM% % %$ $ $
 h35IJJO# # #" " "
 H/1CDDM     Xk;//F! ! !      (+-=>>K        /?;;J	 	 	
6 
6 
6
! 
! 
!! ! !% % %Q Q Q% % %" " "s s s s0    # # #$ $ $  	 	 	  d d dB B B)/ )/ )/V  2* * *X? ? ?B  8"/ "/ "/H@/ @/ @/ @/ @/r   r    c                 Z   d| cxk    rdk    rn ndS d| cxk    rdk    rn ndS d| cxk    rdk    rn ndS t          j        t          |                     rd	S d
| cxk    rdk    sn d| cxk    rdk    rn ndS d| cxk    rdk    rn ndS d| cxk    rdk    rn ndS | dv rdS | dv rd	S dS )N!   ~   r   i N  i  r   i   i  r   i@0  i0  i0  i0  i  i`  i 0  i>0  )rX     )r      )unicodedata	combininguni_chr)chars    r   _char_block_widthr    sK   	TSqqqWT]]++ q$!7!7!7!7%!7!7!7!7!7qqqxrwq1r   c                     t          t          t          t          t          t                              d|                                         S )Nr   )sumitermapr  ord_resub)r   s    r   r   r     s3    w('#swwr37G7G*H*HIIJJJr   c                    t          j                                        |                     d                    }|                     d           t          j        | |          }t          di |}|r||_        nIt          rd t          |          D             |_        n#d |	                                D             |_        |D ]!}|
                    d |D                        "|S )Ni   r   c                 6    g | ]}|                                 S r   stripr   r3   s     r   r   zfrom_csv.<locals>.<listcomp>  s     ???Aaggii???r   c                 6    g | ]}|                                 S r   r  r  s     r   r   zfrom_csv.<locals>.<listcomp>  s     @@@Aaggii@@@r   c                 6    g | ]}|                                 S r   r  r  s     r   r   zfrom_csv.<locals>.<listcomp>  s     000a		000r   r   )csvSniffersniffreadseekreaderr    rJ   r  nextr   )fprJ   rj   dialectr  tabler   s          r   from_csvr    s    kmm!!"''$--00GGGAJJJZG$$F!!&!!E A'	 A??f???@@@@@ 2 20030001111Lr   c                     | j         rPt          di |}d | j         D             |_        |                                 D ]}|                    |           |S d S )Nc                     g | ]
}|d          S ry  r   )r   cols     r   r   z"from_db_cursor.<locals>.<listcomp>  s    DDDc!fDDDr   r   )descriptionr    rJ   fetchallr   )cursorrj   r  r   s       r   from_db_cursorr    sv     %%f%%DD0BDDD??$$ 	 	CMM# r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TableHandlerc                     t          j        |            || _        g | _        g | _        g | _        d| _        d | _        d| _        d| _	        d S )Nr   r   F)
r   rl   rj   tableslast_rowr|  max_row_widthactivelast_contentis_last_row_header)ri   rj   s     r   rl   zTableHandler.__init__  sS    D!!!	"'r   c                 2    || _         |dk    r	d| _        d S d S )NthT)r  r  )ri   tagattrss      r   handle_starttagzTableHandler.handle_starttag  s'    $;;&*D### ;r   c                    |dv r3| j                                         }| j                            |           |dk    r`| j                            | j        | j        f           t          | j        t          | j                            | _        g | _        d| _        |dk    r;| 	                    | j                  }| j
                            |           g | _        d| _         d | _        d S )N)r  tdtrFr  rv   )r  r  r  rb  r|  r  r   r  r   generate_tabler  r  )ri   r  stripped_contentr  s       r   handle_endtagzTableHandler.handle_endtag  s    ,#06688M  !1222$;;IdmT-DEFFF!$T%7T]9K9K!L!LDDM&+D#'>>''	22EKu%%%DIr   c                 &    | xj         |z  c_         d S r1   )r  )ri   datas     r   handle_datazTableHandler.handle_data  s    T!r   c                    t          di | j        }| j        D ]}t          |d                   | j        k     rK| j        t          |d                   z
  }t          d|          D ]}|d                             d           |d         dk    r)|                     |d                    |d         |_        |	                    |d                    |S )zE
        Generates from a list of rows a PrettyTable object.
        r   r   r=   Tr   )
r    rj   r|  r   r  ra  rb  make_fields_uniquerJ   r   )ri   r|  r  r   appendsrk  s         r   r   zTableHandler.generate_table  s     **dk**9 
	& 
	&C3q6{{T///,s3q6{{:q'** ' 'AFMM#&&&&1v~~''A///$'F!!c!f%%%%r   c                     t          dt          |                    D ]G}t          |dz   t          |                    D ]$}||         ||         k    r||xx         dz  cc<   %HdS )zB
        iterates over the row and make each field unique
        r   r   'N)ra  r   )ri   r&   rk  js       r   r  zTableHandler.make_fields_unique&  s     q#f++&& 	% 	%A1q5#f++.. % %!9q	))1III$III%	% 	%r   N)	r  r  r  rl   r  r  r  r   r  r   r   r   r  r    sn        
 
 
+ + +
  "" " "  &% % % % %r   r  c                 R    t          di |}|                    |            |j        S )z
    Generates a list of PrettyTables from a string of HTML code. Each <table> in
    the HTML becomes one PrettyTable object.
    r   )r  feedr  )	html_coderj   parsers      r   	from_htmlr  0  s1    
 ##F##F
KK	=r   c                     t          | fi |}	 t          |          dk    sJ n# t          $ r t          d          w xY w|d         S )zf
    Generates a PrettyTables from a string of HTML code which contains only a
    single <table>
    r   zDMore than one <table> in provided HTML code!  Use from_html instead.r   )r  r   r   r   )r  rj   r  s      r   from_html_oner  :  ss    
 y++F++F`6{{a ` ` `^___` !9s   % ?c                     t          g d          } d| _        d| _        d| j        d<   d| _        d| j        d<   |                     g d	           |                     g d
           |                     g d           |                     g d           |                     g d           |                     g d           |                     g d           t          |            d S )N)	City nameArea
PopulationzAnnual Rainfallr  T04dr  z6.1fru   r  )Adelaidei  is g     Ă@)Brisbanei  i:X g@)Darwinp   iD gʚ@)HobartiM  i" g     \@)Sydneyi
  i*B g33333@)	Melbournei  i: g333337@)Perthi
  iQ g33333+@)r    r-   r.   r5   r6   rx   r   printr2   s    r   mainr!  H  so       	 	A AHAM ALANAGKII       II       II       II       II       II       II       
1IIIIIr   __main__r1   )2__version__rr  r  r[  resysr  	itertoolsr  version_infor  rq   rr   rp   mapr  r   iterzipchrr  html.parserr   imapizipunichrhtmlr   cgirU   rW   r   r   rK  rM  rO  rQ  compiler  r   objectr    r  r   r  r  r  r  r  r!  r  r   r   r   <module>r3     sK    



  				 



         
a &GJGGG&&&&&&&nGnGG%%%%%% CQ1$$		

	bj"##  G/ G/ G/ G/ G/& G/ G/ G/T$  ,K K K   "  A% A% A% A% A%: A% A% A%H    & & &R zDFFFFF r   