509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
F³`Q¼Ó  ã               @   s`  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
rxe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d„ Z&G dd„ de'ƒZ(dd„ Z)dd„ Z*d"dd„Z+dd„ Z,G dd„ deƒZ-dd„ Z.dd„ Z/dd „ Z0e1d!k�r\e0ƒ  dS )#z0.7.2é    Né   )Ú
HTMLParseré   é   )Úescapeé
   é   é   é   z\[[0-9;]*mc             C   s,   | j dƒ}t|ƒ}tdd„ |D ƒƒ}||fS )NÚ
c             S   s   g | ]}t |ƒ‘qS © )Ú_str_block_width)Ú.0Úliner   r   ú!/usr/lib/python3.6/prettytable.pyú
<listcomp>O   s    z_get_size.<locals>.<listcomp>)ÚsplitÚlenÚmax)ÚtextÚlinesZheightÚwidthr   r   r   Ú	_get_sizeL   s    
r   c               @   sB  e Zd ZdÍdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zer@dd„ Z	ndd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ ZeeeƒZd5d6„ Zd7d8„ Z eee ƒZ!d9d:„ Z"d;d<„ Z#ee"e#ƒZ$d=d>„ Z%d?d@„ Z&ee%e&ƒZ'dAdB„ Z(dCdD„ Z)ee(e)ƒZ*dEdF„ Z+dGdH„ Z,ee+e,ƒZ-dIdJ„ Z.dKdL„ Z/ee.e/ƒZ0dMdN„ Z1dOdP„ Z2ee1e2ƒZ3dQdR„ Z4dSdT„ Z5ee4e5ƒZ6dUdV„ Z7dWdX„ Z8ee7e8ƒZ9dYdZ„ Z:d[d\„ Z;ee:e;ƒZ<d]d^„ Z=d_d`„ Z>ee=e>ƒZ?dadb„ Z@dcdd„ ZAee@eAƒZBdedf„ ZCdgdh„ ZDeeCeDƒZEdidj„ ZFdkdl„ ZGeeFeGƒZHdmdn„ ZIdodp„ ZJeeIeJƒZKdqdr„ ZLdsdt„ ZMeeLeMƒZNdudv„ ZOdwdx„ ZPeeOePƒZQdydz„ ZRd{d|„ ZSeeReSƒZTd}d~„ ZUdd€„ ZVeeUeVƒZWd�d‚„ ZXdƒd„„ ZYeeXeYƒZZd…d†„ Z[d‡dˆ„ Z\ee[e\ƒZ]d‰dŠ„ Z^d‹dŒ„ Z_ee^e_ƒZ`d�dŽ„ Zad�d�„ ZbeeaebƒZcd‘d’„ Zdd“d”„ ZeeedeeƒZfd•d–„ Zgd—d˜„ ZheegehƒZid™dš„ Zjd›dœ„ Zkd�dž„ ZldŸd „ Zmd¡d¢„ Znd£d¤„ Zod¥d¦„ Zpd§d¨„ ZqdÎd«d¬„Zrd­d®„ Zsd¯d°„ Ztd±d²„ Zud³d´„ Zvdµd¶„ Zwd·d¸„ Zxd¹dº„ Zyd»d¼„ Zzd½d¾„ Z{d¿dÀ„ Z|dÁdÂ„ Z}dÃdÄ„ Z~dÅdÆ„ ZdÇdÈ„ Z€dÉdÊ„ Z�dËdÌ„ Z‚dS )ÏÚPrettyTableNc             K   sZ  |j ddƒ| _g | _i | _i | _i | _g | _|r8|| _ng | _dj	ƒ | _
| j
jdj	ƒ ƒ | j
jdj	ƒ ƒ x0| j
D ]&}||krŽ| j||| ƒ qpd||< qpW |d p¤d| _|d	 p²d| _|d
 pÀd| _|d d'krÜ|d | _nd| _|d pìd| _|d d(k�r
|d | _nd| _|d �pt| _|d �p,t| _|d �p<d| _|d d)k�rZ|d | _nd| _|d �ppdd„ | _|d �p€i | _|d �p�i | _|d �p d| _|d �p°d| _|d �pÀd| _|d �pÖ| jdƒ| _ |d �pì| jd ƒ| _!|d! �p| jd"ƒ| _"|d# d*k�r |d# | _#nd| _#|d$ �p2d| _$|d% �pBd| _%|d& �pRi | _&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ÚencodingzUTF-8zZstart 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ÚheaderTFÚheader_styleÚborderÚhrulesÚvrulesÚsortbyÚreversesortÚsort_keyc             S   s   | S )Nr   )Úxr   r   r   Ú<lambda>�   s    z&PrettyTable.__init__.<locals>.<lambda>Ú
int_formatÚfloat_formatÚpadding_widthr   Úleft_padding_widthÚright_padding_widthÚvertical_charú|Úhorizontal_charú-Újunction_charú+Úprint_emptyÚformatÚxhtmlÚ
attributes)TF)TF)TF)TF)'Ú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Ú_formatZ_xhtmlÚ_attributes)Úselfr=   ÚkwargsÚoptionr   r   r   Ú__init__T   s^    
zPrettyTable.__init__c             C   s.   t |tƒst|ƒ}t |tƒs*t|| jdƒ}|S )NÚstrict)Ú
isinstanceÚ
basestringÚstrÚunicoder   )r[   Úvaluer   r   r   rT   ±   s
    

zPrettyTable._unicodec             C   sª   |t |ƒ }|dkr ||d  S |dkr4|d | S |d rŠt |ƒd rh|d d | |d d d  S |d d d | |d d  S n|d d | |d d  S d S )NÚlú Úrr   r   )r   )r[   r   r   ÚalignZexcessr   r   r   Ú_justify¸   s     "zPrettyTable._justifyc             C   sP   |dkrt | jƒS |dkrD| jr*t | jƒS | jr>t | jd ƒS dS nt|ƒ‚d S )NÚrowcountZcolcountr   )r   r<   r8   ÚAttributeError)r[   Únamer   r   r   Ú__getattr__Í   s    

zPrettyTable.__getattr__c             C   s¤   t ƒ }| j|_x(| jD ]}t|d| t| d| ƒƒ qW t|dt| dƒƒ t|tƒrtxJ| j| D ]}|j|ƒ q`W n,t|t	ƒr�|j| j| ƒ nt
dt|ƒ ƒ‚|S )NÚ_r9   z0Index %s is invalid, must be an integer or slice)r   r=   r?   ÚsetattrÚgetattrr`   Úslicer<   Úadd_rowÚintÚ	Exceptionrb   )r[   ÚindexÚnewÚattrÚrowr   r   r   Ú__getitem__Û   s    

zPrettyTable.__getitem__c             C   s   | j ƒ S )N)Ú__unicode__)r[   r   r   r   Ú__str__ì   s    zPrettyTable.__str__c             C   s   | j ƒ j| jƒS )N)rz   Úencoder   )r[   r   r   r   r{   ï   s    c             C   s   | j ƒ S )N)Ú
get_string)r[   r   r   r   rz   ò   s    zPrettyTable.__unicode__c             C   s4  |dkr| j |ƒ �n|dkr.| j||ƒ �n|d	krD| j||ƒ nì|d
krZ| j||ƒ nÖ|dkrp| j||ƒ nÀ|dkr†| j||ƒ nª|dkrœ| j||ƒ n”|dkr²| j||ƒ n~|dkrÆ| j|ƒ nj|dkrÜ| j	||ƒ nT|dk� rô| j
||ƒ n<|dk�r| j||ƒ n$|dk�r$| j||ƒ ntd| ƒ‚d S )Nr=   r   r   Ú	max_widthr*   r+   r,   r4   r#   r%   r!   r"   r   r   r    r$   r5   r3   r   r(   r)   r-   r/   r1   r6   zUnrecognised option: %s!)r   r   r~   r*   r+   r,   r4   )r   r    r$   r5   r3   )r-   r/   r1   )Ú_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_attributesrt   )r[   r]   Úvalr   r   r   rA      s6    


zPrettyTable._validate_optionc             C   sž   | j r:yW n. tk
r8   tdt|ƒt| j ƒf ƒ‚Y nX | jrxyW n2 tk
rv   tdt|ƒt| jd ƒf ƒ‚Y nX yW n tk
r˜   tdƒ‚Y nX d S )NzJField name list has incorrect number of values, (actual) %d!=%d (expected)r   zField names must be unique!)r8   ÚAssertionErrorrt   r   r<   )r[   rŒ   r   r   r   r     s     $z!PrettyTable._validate_field_namesc             C   s&   yW n t k
r    tdƒ‚Y nX d S )Nz;Invalid header style, use cap, title, upper, lower or None!)r�   rt   )r[   rŒ   r   r   r   r‡   0  s    z"PrettyTable._validate_header_stylec             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz'Alignment %s is invalid, use l, c or r!)r�   rt   )r[   rŒ   r   r   r   Ú_validate_align6  s    zPrettyTable._validate_alignc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz-Alignment %s is invalid, use t, m, b or None!)r�   rt   )r[   rŒ   r   r   r   Ú_validate_valign<  s    zPrettyTable._validate_valignc             C   s4   yW n* t k
r.   td|| j|ƒf ƒ‚Y nX d S )NzInvalid value for %s: %s!)r�   rt   rT   )r[   rl   rŒ   r   r   r   r€   B  s    z%PrettyTable._validate_nonnegative_intc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz-Invalid value for %s!  Must be True or False.)r�   rt   )r[   rl   rŒ   r   r   r   r†   H  s    z#PrettyTable._validate_true_or_falsec             C   s6   |dkrd S yW n  t k
r0   td| ƒ‚Y nX d S )NÚ z8Invalid value for %s!  Must be an integer format string.)r�   rt   )r[   rl   rŒ   r   r   r   rˆ   N  s    z PrettyTable._validate_int_formatc             C   s@   |dkrd S y|j dƒ}W n  tk
r:   td| ƒ‚Y nX d S )Nr�   Ú.z5Invalid value for %s!  Must be a float format string.)r   r�   rt   )r[   rl   rŒ   Úbitsr   r   r   r‰   W  s    
z"PrettyTable._validate_float_formatc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz*Invalid value for %s!  Must be a function.)r�   rt   )r[   rl   rŒ   r   r   r   r‚   d  s    zPrettyTable._validate_functionc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz:Invalid value for %s!  Must be ALL, FRAME, HEADER or NONE.)r�   rt   )r[   rl   rŒ   r   r   r   rƒ   j  s    zPrettyTable._validate_hrulesc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz3Invalid value for %s!  Must be ALL, FRAME, or NONE.)r�   rt   )r[   rl   rŒ   r   r   r   r„   p  s    zPrettyTable._validate_vrulesc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )NzInvalid field name: %s!)r�   rt   )r[   rl   rŒ   r   r   r   r�   v  s    z PrettyTable._validate_field_namec             C   s@   yx|D ]}| j ||ƒ qW W n tk
r:   tdƒ‚Y nX d S )Nz)fields must be a sequence of field names!)r�   r�   rt   )r[   rl   rŒ   r&   r   r   r   r…   |  s
    
z%PrettyTable._validate_all_field_namesc             C   s*   yW n  t k
r$   td| ƒ‚Y nX d S )Nz4Invalid value for %s!  Must be a string of length 1.)r�   rt   )r[   rl   rŒ   r   r   r   rŠ   ƒ  s    z!PrettyTable._validate_single_charc             C   s&   yW n t k
r    tdƒ‚Y nX d S )Nz4attributes must be a dictionary of name/value pairs!)r�   rt   )r[   rl   rŒ   r   r   r   r‹   ‰  s    z PrettyTable._validate_attributesc             C   s   | j S )N)r8   )r[   r   r   r   Ú_get_field_names“  s    zPrettyTable._get_field_namesc                s$  ‡ fdd„|D ƒ}ˆ j d|ƒ ˆ jr2ˆ jd d … }|ˆ _ˆ jr�|r�x&t||ƒD ]\}}ˆ j| ˆ j|< qNW x>|D ]}|ˆ jkrpˆ jj|ƒ qpW nxˆ jD ]}dˆ j|< q˜W ˆ jo²|�rx&t||ƒD ]\}}ˆ j| ˆ j|< qÂW x@|D ]}|ˆ jkräˆ jj|ƒ qäW nxˆ jD ]}dˆ j|< �qW d S )Nc                s   g | ]}ˆ j |ƒ‘qS r   )rT   )r   r&   )r[   r   r   r   ›  s    z0PrettyTable._set_field_names.<locals>.<listcomp>r=   ÚcÚt)rA   r8   r9   ÚzipÚpopr:   )r[   rŒ   Z	old_namesZold_nameÚnew_nameÚfieldr   )r[   r   Ú_set_field_namesš  s*    




zPrettyTable._set_field_namesc             C   s   | j S )N)r9   )r[   r   r   r   Ú
_get_align´  s    zPrettyTable._get_alignc             C   s(   | j |ƒ x| jD ]}|| j|< qW d S )N)rŽ   r8   r9   )r[   rŒ   r™   r   r   r   Ú
_set_align¶  s    
zPrettyTable._set_alignc             C   s   | j S )N)r:   )r[   r   r   r   Ú_get_valign¼  s    zPrettyTable._get_valignc             C   s(   | j |ƒ x| jD ]}|| j|< qW d S )N)r�   r8   r:   )r[   rŒ   r™   r   r   r   Ú_set_valign¾  s    
zPrettyTable._set_valignc             C   s   | j S )N)r;   )r[   r   r   r   Ú_get_max_widthÄ  s    zPrettyTable._get_max_widthc             C   s*   | j d|ƒ x| jD ]}|| j|< qW d S )Nr~   )rA   r8   r;   )r[   rŒ   r™   r   r   r   Ú_set_max_widthÆ  s    zPrettyTable._set_max_widthc             C   s   | j S )z�List or tuple of field names to include in displays

        Arguments:

        fields - list or tuple of field names to include in displays)rD   )r[   r   r   r   Ú_get_fieldsÌ  s    zPrettyTable._get_fieldsc             C   s   | j d|ƒ || _d S )Nr   )rA   rD   )r[   rŒ   r   r   r   Ú_set_fieldsÓ  s    zPrettyTable._set_fieldsc             C   s   | j S )z{Start index of the range of rows to print

        Arguments:

        start - index of first data row to include in output)rB   )r[   r   r   r   Ú
_get_startØ  s    zPrettyTable._get_startc             C   s   | j d|ƒ || _d S )Nr   )rA   rB   )r[   rŒ   r   r   r   Ú
_set_startà  s    zPrettyTable._set_startc             C   s   | j S )z’End index of the range of rows to print

        Arguments:

        end - index of last data row to include in output PLUS ONE (list slice style))rC   )r[   r   r   r   Ú_get_endå  s    zPrettyTable._get_endc             C   s   | j d|ƒ || _d S )Nr   )rA   rC   )r[   rŒ   r   r   r   Ú_set_endì  s    zPrettyTable._set_endc             C   s   | j S )z_Name of field by which to sort rows

        Arguments:

        sortby - field name to sort by)rL   )r[   r   r   r   Ú_get_sortbyñ  s    zPrettyTable._get_sortbyc             C   s   | j d|ƒ || _d S )Nr#   )rA   rL   )r[   rŒ   r   r   r   Ú_set_sortbyø  s    zPrettyTable._set_sortbyc             C   s   | j S )z®Controls direction of sorting (ascending vs descending)

        Arguments:

        reveresort - set to True to sort by descending order, or False to sort by ascending order)rM   )r[   r   r   r   Ú_get_reversesortý  s    zPrettyTable._get_reversesortc             C   s   | j d|ƒ || _d S )Nr$   )rA   rM   )r[   rŒ   r   r   r   Ú_set_reversesort  s    zPrettyTable._set_reversesortc             C   s   | j S )zªSorting key function, applied to data points before sorting

        Arguments:

        sort_key - a function which takes one argument and returns something to be sorted)rN   )r[   r   r   r   Ú_get_sort_key	  s    zPrettyTable._get_sort_keyc             C   s   | j d|ƒ || _d S )Nr%   )rA   rN   )r[   rŒ   r   r   r   Ú_set_sort_key  s    zPrettyTable._set_sort_keyc             C   s   | j S )z‹Controls printing of table header with field names

        Arguments:

        header - print a header showing field names (True or False))rE   )r[   r   r   r   Ú_get_header  s    zPrettyTable._get_headerc             C   s   | j d|ƒ || _d S )Nr   )rA   rE   )r[   rŒ   r   r   r   Ú_set_header  s    zPrettyTable._set_headerc             C   s   | j S )zºControls stylisation applied to field names in header

        Arguments:

        header_style - stylisation to apply to field names in header ("cap", "title", "upper", "lower" or None))rF   )r[   r   r   r   Ú_get_header_style!  s    zPrettyTable._get_header_stylec             C   s   | j |ƒ || _d S )N)r‡   rF   )r[   rŒ   r   r   r   Ú_set_header_style(  s    
zPrettyTable._set_header_stylec             C   s   | j S )z~Controls printing of border around table

        Arguments:

        border - print a border around the table (True or False))rG   )r[   r   r   r   Ú_get_border-  s    zPrettyTable._get_borderc             C   s   | j d|ƒ || _d S )Nr    )rA   rG   )r[   rŒ   r   r   r   Ú_set_border4  s    zPrettyTable._set_borderc             C   s   | j S )z˜Controls printing of horizontal rules after rows

        Arguments:

        hrules - horizontal rules style.  Allowed values: FRAME, ALL, HEADER, NONE)rI   )r[   r   r   r   Ú_get_hrules9  s    zPrettyTable._get_hrulesc             C   s   | j d|ƒ || _d S )Nr!   )rA   rI   )r[   rŒ   r   r   r   Ú_set_hrules@  s    zPrettyTable._set_hrulesc             C   s   | j S )z‘Controls printing of vertical rules between columns

        Arguments:

        vrules - vertical rules style.  Allowed values: FRAME, ALL, NONE)rK   )r[   r   r   r   Ú_get_vrulesE  s    zPrettyTable._get_vrulesc             C   s   | j d|ƒ || _d S )Nr"   )rA   rK   )r[   rŒ   r   r   r   Ú_set_vrulesL  s    zPrettyTable._set_vrulesc             C   s   | j S )zbControls formatting of integer data
        Arguments:

        int_format - integer format string)rO   )r[   r   r   r   Ú_get_int_formatQ  s    zPrettyTable._get_int_formatc             C   s   x| j D ]}|| j|< qW d S )N)r8   rO   )r[   rŒ   r™   r   r   r   Ú_set_int_formatW  s    zPrettyTable._set_int_formatc             C   s   | j S )zrControls formatting of floating point data
        Arguments:

        float_format - floating point format string)rP   )r[   r   r   r   Ú_get_float_format]  s    zPrettyTable._get_float_formatc             C   s   x| j D ]}|| j|< qW d S )N)r8   rP   )r[   rŒ   r™   r   r   r   Ú_set_float_formatc  s    zPrettyTable._set_float_formatc             C   s   | j S )zœThe number of empty spaces between a column's edge and its content

        Arguments:

        padding_width - number of spaces, must be a positive integer)rQ   )r[   r   r   r   Ú_get_padding_widthi  s    zPrettyTable._get_padding_widthc             C   s   | j d|ƒ || _d S )Nr*   )rA   rQ   )r[   rŒ   r   r   r   Ú_set_padding_widthp  s    zPrettyTable._set_padding_widthc             C   s   | j S )z The number of empty spaces between a column's left edge and its content

        Arguments:

        left_padding - number of spaces, must be a positive integer)rR   )r[   r   r   r   Ú_get_left_padding_widthu  s    z#PrettyTable._get_left_padding_widthc             C   s   | j d|ƒ || _d S )Nr+   )rA   rR   )r[   rŒ   r   r   r   Ú_set_left_padding_width|  s    z#PrettyTable._set_left_padding_widthc             C   s   | j S )z¢The number of empty spaces between a column's right edge and its content

        Arguments:

        right_padding - number of spaces, must be a positive integer)rS   )r[   r   r   r   Ú_get_right_padding_width�  s    z$PrettyTable._get_right_padding_widthc             C   s   | j d|ƒ || _d S )Nr,   )rA   rS   )r[   rŒ   r   r   r   Ú_set_right_padding_widthˆ  s    z$PrettyTable._set_right_padding_widthc             C   s   | j S )z¥The charcter used when printing table borders to draw vertical lines

        Arguments:

        vertical_char - single character string used to draw vertical lines)rU   )r[   r   r   r   Ú_get_vertical_char�  s    zPrettyTable._get_vertical_charc             C   s    | j |ƒ}| jd|ƒ || _d S )Nr-   )rT   rA   rU   )r[   rŒ   r   r   r   Ú_set_vertical_char”  s    
zPrettyTable._set_vertical_charc             C   s   | j S )z«The charcter used when printing table borders to draw horizontal lines

        Arguments:

        horizontal_char - single character string used to draw horizontal lines)rV   )r[   r   r   r   Ú_get_horizontal_charš  s    z PrettyTable._get_horizontal_charc             C   s    | j |ƒ}| jd|ƒ || _d S )Nr/   )rT   rA   rV   )r[   rŒ   r   r   r   Ú_set_horizontal_char¡  s    
z PrettyTable._set_horizontal_charc             C   s   | j S )z¥The charcter used when printing table borders to draw line junctions

        Arguments:

        junction_char - single character string used to draw line junctions)rW   )r[   r   r   r   Ú_get_junction_char§  s    zPrettyTable._get_junction_charc             C   s    | j |ƒ}| jd|ƒ || _d S )Nr-   )rT   rA   rW   )r[   rŒ   r   r   r   Ú_set_junction_char®  s    
zPrettyTable._set_junction_charc             C   s   | j S )z~Controls whether or not HTML tables are formatted to match styling options

        Arguments:

        format - True or False)rY   )r[   r   r   r   Ú_get_format´  s    zPrettyTable._get_formatc             C   s   | j d|ƒ || _d S )Nr4   )rA   rY   )r[   rŒ   r   r   r   Ú_set_format»  s    zPrettyTable._set_formatc             C   s   | j S )z�Controls whether or not empty tables produce a header and frame or just an empty string

        Arguments:

        print_empty - True or False)rX   )r[   r   r   r   Ú_get_print_emptyÀ  s    zPrettyTable._get_print_emptyc             C   s   | j d|ƒ || _d S )Nr3   )rA   rX   )r[   rŒ   r   r   r   Ú_set_print_emptyÇ  s    zPrettyTable._set_print_emptyc             C   s   | j S )z§A dictionary of HTML attribute name/value pairs to be included in the <table> tag when printing HTML

        Arguments:

        attributes - dictionary of attributes)rZ   )r[   r   r   r   Ú_get_attributesÌ  s    zPrettyTable._get_attributesc             C   s   | j d|ƒ || _d S )Nr6   )rA   rZ   )r[   rŒ   r   r   r   Ú_set_attributesÓ  s    zPrettyTable._set_attributesc             C   sP   i }xF| j D ]<}||kr6| j||| ƒ || ||< qt| d| ƒ||< qW |S )Nrn   )r?   rA   rp   )r[   r\   Úoptionsr]   r   r   r   Ú_get_optionsÜ  s    zPrettyTable._get_optionsc             C   sT   |t kr| jƒ  n>|tkr$| jƒ  n,|tkr6| jƒ  n|tkrH| jƒ  ntdƒ‚d S )NzInvalid pre-set style!)	ÚDEFAULTÚ_set_default_styleÚMSWORD_FRIENDLYÚ_set_msword_styleÚPLAIN_COLUMNSÚ_set_columns_styleÚRANDOMÚ_set_random_stylert   )r[   Zstyler   r   r   Ú	set_styleë  s    



zPrettyTable.set_stylec             C   s@   d| _ d| _t| _t| _d| _d| _d| _d| _	d| _
d| _d S )NTr   r.   r0   r2   )r   r    rH   rI   rJ   rK   r*   r+   r,   r-   r/   r1   )r[   r   r   r   rÐ   ø  s    zPrettyTable._set_default_stylec             C   s.   d| _ d| _t| _d| _d| _d| _d| _d S )NTr   r.   )r   r    ÚNONErI   r*   r+   r,   r-   )r[   r   r   r   rÒ     s    zPrettyTable._set_msword_stylec             C   s"   d| _ d| _d| _d| _d| _d S )NTFr   r   é   )r   r    r*   r+   r,   )r[   r   r   r   rÔ     s
    zPrettyTable._set_columns_stylec             C   s‚   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 )NTFr   é   z ~!@#$%^&*()_+|-=\{}[];':",./;<>?)TF)TF)ÚrandomZchoicer   r    rJ   rH   ÚHEADERrØ   rI   rK   Zrandintr+   r,   r-   r/   r1   )r[   r   r   r   rÖ     s    zPrettyTable._set_random_stylec             C   sf   | j r2t|ƒt| j ƒkr2tdt|ƒt| j ƒf ƒ‚| j sRdd„ tdt|ƒƒD ƒ| _| jjt|ƒƒ dS )z�Add 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             S   s   g | ]}d |d  ‘qS )zField %dr   r   )r   Únr   r   r   r   4  s    z'PrettyTable.add_row.<locals>.<listcomp>r   N)r8   r   rt   Úranger=   r<   ÚappendÚlist)r[   rx   r   r   r   rr   (  s
    	zPrettyTable.add_rowc             C   s4   |t | jƒd kr(td|t | jƒf ƒ‚| j|= dS )z‚Delete 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   r<   rt   )r[   Z	row_indexr   r   r   Údel_row7  s    zPrettyTable.del_rowr”   r•   c             C   s´   t | jƒdt |ƒfkr–| j|ƒ | j|ƒ | jj|ƒ || j|< || j|< xdtdt |ƒƒD ]6}t | jƒ|d k r|| jjg ƒ | j| j|| ƒ qZW nt	dt |ƒt | jƒf ƒ‚dS )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   r<   rŽ   r�   r8   rß   r9   r:   rÞ   rt   )r[   Ú	fieldnameÚcolumnrh   ÚvalignÚir   r   r   Ú
add_columnC  s    



zPrettyTable.add_columnc             C   s
   g | _ dS )z?Delete all rows from the table but keep the current field namesN)r<   )r[   r   r   r   Ú
clear_rows\  s    zPrettyTable.clear_rowsc             C   s   g | _ g | _g | _dS )zWDelete all rows and field names from the table, maintaining nothing but styling optionsN)r<   r8   r>   )r[   r   r   r   Úclearb  s    zPrettyTable.clearc             C   s
   t j| ƒS )N)ÚcopyÚdeepcopy)r[   r   r   r   ré   n  s    zPrettyTable.copyc             C   sd   t |tƒr.|| jkr.| jd| j|  | ƒ}n,t |tƒrZ|| jkrZ| jd| j|  | ƒ}| j|ƒS )Nz%%%sdz%%%sf)r`   rs   rO   rT   ÚfloatrP   )r[   r™   rd   r   r   r   Ú_format_valueu  s
    zPrettyTable._format_valuec             C   s®   |d rdd„ | j D ƒ}nt| jƒdg }xx|D ]p}xjt|ƒD ]^\}}| j| }|| jkr‚t|| tt|ƒd | j| ƒƒ||< q>t|| t|ƒd ƒ||< q>W q0W || _d S )Nr   c             S   s   g | ]}t |ƒd  ‘qS )r   )r   )r   r™   r   r   r   r   ~  s    z/PrettyTable._compute_widths.<locals>.<listcomp>r   )	r8   r   r=   Ú	enumerater~   r   Úminr   r>   )r[   ÚrowsrÍ   Zwidthsrx   ru   rd   râ   r   r   r   Ú_compute_widths|  s    


("zPrettyTable._compute_widthsc             C   sD   |d d k	r|d }n|d }|d d k	r4|d }n|d }||fS )Nr+   r*   r,   r   )r[   rÍ   ÚlpadÚrpadr   r   r   Ú_get_padding_widthsŠ  s    

zPrettyTable._get_padding_widthsc                sn   t j| j|d |d … ƒ}|d rj| jj|d ƒ‰ ‡ fdd„|D ƒ}|j|d |d d� d	d„ |D ƒ}|S )
z—Return only those data rows that should be printed, based on slicing and sorting.

        Arguments:

        options - dictionary of option settings.r   r   r#   c                s   g | ]}|ˆ  g| ‘qS r   r   )r   rx   )Ú	sortindexr   r   r   £  s    z)PrettyTable._get_rows.<locals>.<listcomp>r$   r%   )ÚreverseÚkeyc             S   s   g | ]}|d d… ‘qS )r   Nr   )r   rx   r   r   r   r   §  s    )ré   rê   r<   r8   ru   Úsort)r[   rÍ   rï   r   )rô   r   Ú	_get_rows–  s    zPrettyTable._get_rowsc                s   ‡ fdd„t ˆ j|ƒD ƒS )Nc                s   g | ]\}}ˆ j ||ƒ‘qS r   )rì   )r   r™   rd   )r[   r   r   r   «  s    z+PrettyTable._format_row.<locals>.<listcomp>)r–   r8   )r[   rx   rÍ   r   )r[   r   Ú_format_rowª  s    zPrettyTable._format_rowc                s   ‡ ‡fdd„|D ƒS )Nc                s   g | ]}ˆj |ˆ ƒ‘qS r   )rù   )r   rx   )rÍ   r[   r   r   r   ®  s    z,PrettyTable._format_rows.<locals>.<listcomp>r   )r[   rï   rÍ   r   )rÍ   r[   r   Ú_format_rows­  s    zPrettyTable._format_rowsc             K   sì   | j |ƒ}g }| jdkr0|d  s,|d  r0dS | j|ƒ}| j||ƒ}| j||ƒ | j|ƒ| _|d rx|j| j|ƒƒ n$|d rœ|d t	t
fkrœ|j| jƒ x|D ]}|j| j||ƒƒ q¢W |d rÜ|d t
krÜ|j| jƒ | jdƒj|ƒ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   r3   r    r�   r   r!   r   )rÎ   rj   rø   rú   rð   Ú_stringify_hruleÚ_hrulerß   Ú_stringify_headerrJ   rH   Ú_stringify_rowrT   Újoin)r[   r\   rÍ   r   rï   Úformatted_rowsrx   r   r   r   r}   ´  s"    


zPrettyTable.get_stringc             C   s   |d sdS | j |ƒ\}}|d ttfkr6|d g}n
|d g}| js^|j|d ƒ dj|ƒS xtt| j| jƒD ]b\}}|d rŒ||d krŒqn|j|| | |d  ƒ |d tkrÂ|j|d ƒ qn|j|d ƒ qnW |d tkrö|jƒ  |j|d ƒ dj|ƒS )Nr    r�   r"   r1   r/   r   )	ró   rJ   rH   r8   rß   rÿ   r–   r>   r—   )r[   rÍ   rñ   rò   r’   r™   r   r   r   r   rû   ñ  s(    

zPrettyTable._stringify_hrulec             C   sä  g }| j |ƒ\}}|d rj|d ttfkr@|j| jƒ |jdƒ |d ttfkr`|j|d ƒ n
|jdƒ | jsš|d ttfkr�|j|d ƒ n
|jdƒ xât| j| jƒD ]Ð\}}|d rÈ||d krÈqª| jdkrÜ|j	ƒ }nD| jd	krð|j
ƒ }n0| jd
k�r|jƒ }n| jdk�r|jƒ }n|}|jd| | j||| j| ƒ d|  ƒ |d rª|d tk�rp|j|d ƒ qª|jdƒ qªW |d �r¬|d tk�r¬|jƒ  |j|d ƒ |d �rÚ|d tk�rÚ|jdƒ |j| jƒ dj|ƒS )Nr    r!   r   r"   r-   rf   r   ZcapÚtitleÚupperÚlowerr�   )ró   rJ   rH   rß   rü   r8   r–   r>   rF   Ú
capitalizer  r  r  ri   r9   r—   rØ   rÿ   )r[   rÍ   r’   rñ   rò   r™   r   râ   r   r   r   rý     sJ    








*
zPrettyTable._stringify_headerc          	   C   s  x€t tdt|ƒƒ| j|| jƒD ]`\}}}}|jdƒ}g }x.|D ]&}	t|	ƒ|krZtj|	|ƒ}	|j	|	ƒ q>W |}dj
|ƒ}|||< qW d}
x$|D ]}t|ƒd }||
krŒ|}
qŒW g }| j|ƒ\}}xVtd|
ƒD ]H}|j	g ƒ |d rÊ|d ttfk�r|| j	| jƒ qÊ|| j	dƒ qÊW �xFt | j|| jƒD �]0\}}}| j| }|jdƒ}|
t|ƒ }|�r¼|dk�r”dgt|d	 ƒ | dg|t|d	 ƒ   }n(|d
k�r®dg| | }n|dg|  }d}x˜|D ]�}|d �ræ||d k�ræ�qÆ|| j	d| | j||| j| ƒ d|  ƒ |d �rL|d tk�r>|| j	| jƒ n|| j	dƒ |d7 }�qÆW �q*W xJtd|
ƒD ]<}|d �rl|d tk�rl|| jƒ  || j	|d ƒ �qlW |d �rê|d tk�rê||
d  j	dƒ ||
d  j	| jƒ x&td|
ƒD ]}dj
|| ƒ||< �qöW dj
|ƒS )Nr   r   r   r    r"   rf   Úmr�   r   Úbr   r-   r!   )r–   rÞ   r   r8   r>   r   r   ÚtextwrapZfillrß   rÿ   r   ró   rJ   rH   r-   r:   rs   ri   r9   r—   rü   )r[   rx   rÍ   ru   r™   rd   r   r   Z	new_linesr   Z
row_heightr”   Úhr’   rñ   rò   Úyrä   ZdHeightre   r   r   r   rþ   :  sj    *




 


.

.
zPrettyTable._stringify_rowc             K   s,   | j |ƒ}|d r| j|ƒ}n
| j|ƒ}|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 falser4   )rÎ   Ú_get_formatted_html_stringÚ_get_simple_html_string)r[   r\   rÍ   Ústringr   r   r   Úget_html_string†  s
    

zPrettyTable.get_html_stringc             C   sr  g }|d rd}nd}g }|j dƒ |d rXx*|d D ]}|j d||d | f ƒ q6W |j dƒ |j dj|ƒƒ |d	 rÎ|j d
ƒ x>| jD ]4}|d r¦||d kr¦qŒ|j dt|ƒjd|ƒ ƒ qŒW |j dƒ | j|ƒ}| j||ƒ}xr|D ]j}	|j d
ƒ xPt| j|	ƒD ]@\}}
|d �r*||d k�r*�q|j dt|
ƒjd|ƒ ƒ �qW |j dƒ qêW |j dƒ | jdƒj|ƒS )Nr5   z<br/>z<br>z<tabler6   z %s="%s"ú>r�   r   z    <tr>r   z        <th>%s</th>r   z	    </tr>z        <td>%s</td>z</table>)	rß   rÿ   r8   r   Úreplacerø   rú   r–   rT   )r[   rÍ   r   Ú	linebreakÚopen_tagÚ	attr_namer™   rï   r   rx   Údatumr   r   r   r  ¦  s:    






 
z#PrettyTable._get_simple_html_stringc             C   sÐ  g }| j |ƒ\}}|d r d}nd}g }|jdƒ |d �r|d tkr`|d tkr`|jdƒ n¨|d tkr„|d tkr„|jd	ƒ n„|d tkr¨|d tkr¨|jd
ƒ n`|d tkrÀ|jdƒ nH|d tkrØ|jdƒ n0|d tkrð|jdƒ n|d tk�r|jdƒ |d �r@x,|d D ] }|jd||d | f ƒ �qW |jdƒ |jdj|ƒƒ |d �rÆ|jdƒ xL| jD ]B}|d �r–||d k�r–�qv|jd||t|ƒjd|ƒf ƒ �qvW |jdƒ | j|ƒ}	| j	|	|ƒ}
g }g }xH| jD ]>}|jddddœ| j
|  ƒ |jdddd œ| j|  ƒ �qìW x†|
D ]~}|jdƒ xbt| j|||ƒD ]N\}}}}|d �r|||d k�r|�qT|jd!||||t|ƒjd|ƒf ƒ �qTW |jdƒ �q4W |jd"ƒ | jdƒj|ƒS )#Nr5   z<br/>z<br>z<tabler    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"r6   z %s="%s"r  r�   r   z    <tr>r   zW        <th style="padding-left: %dem; padding-right: %dem; text-align: center">%s</th>r   z	    </tr>ÚleftÚrightÚcenter)re   rg   r”   ÚtopZmiddleZbottom)r•   r  r  zg        <td style="padding-left: %dem; padding-right: %dem; text-align: %s; vertical-align: %s">%s</td>z</table>)ró   rß   rJ   rH   rÿ   r8   r   r  rø   rú   r9   r:   r–   rT   )r[   rÍ   r   rñ   rò   r  r  r  r™   rï   r   ZalignsZvalignsrx   r  rh   rä   r   r   r   r
  Î  sd    



 


&

"

*
z&PrettyTable._get_formatted_html_string)N)r”   r•   )ƒÚ__name__Ú
__module__Ú__qualname__r^   rT   ri   rm   ry   Úpy3kr{   rz   rA   r   r‡   rŽ   r�   r€   r†   rˆ   r‰   r‚   rƒ   r„   r�   r…   rŠ   r‹   r“   rš   Úpropertyr=   r›   rœ   rh   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¶   r"   r·   r¸   r(   r¹   rº   r)   r»   r¼   r*   r½   r¾   r+   r¿   rÀ   r,   rÁ   rÂ   r-   rÃ   rÄ   r/   rÅ   rÆ   r1   rÇ   rÈ   r4   rÉ   rÊ   r3   rË   rÌ   r6   rÎ   r×   rÐ   rÒ   rÔ   rÖ   rr   rá   ræ   rç   rè   ré   rì   rð   ró   rø   rù   rú   r}   rû   rý   rþ   r  r  r
  r   r   r   r   r   R   s   
]
	




























=/L (r   c             C   sî   d|   kodkn  rdS d|   ko.dkn  r8dS d|   koJdkn  rTdS t jt| ƒƒrfd	S d
|   koxdkn  s–d|   ko�dkn  ršdS d|   ko¬dkn  r¶dS d|   koÈdkn  rÒdS | dkrÞdS | dkrêd	S dS )Né!   é~   r   i N  iÿŸ  r   i ¬  i¯×  r   i@0  iŸ0  i 0  iÿ0  iÿ  i`ÿ  i 0  i>0  rÙ   é   é   )rÙ   r  éÿÿÿÿ)r   r   )ÚunicodedataZ	combiningÚuni_chr)Úcharr   r   r   Ú_char_block_width  s&    0r%  c             C   s   t tttttjd| ƒƒƒƒS )Nr�   )ÚsumÚitermapr%  ÚordÚ_reÚsub)rŒ   r   r   r   r   /  s    r   c             K   s”   t jƒ j| jdƒƒ}| jdƒ t j| |ƒ}tf |Ž}|r@||_n.trZdd„ t	|ƒD ƒ|_ndd„ |j	ƒ D ƒ|_x |D ]}|j
dd„ |D ƒƒ qtW |S )Ni   r   c             S   s   g | ]}|j ƒ ‘qS r   )Ústrip)r   r&   r   r   r   r   B  s    zfrom_csv.<locals>.<listcomp>c             S   s   g | ]}|j ƒ ‘qS r   )r+  )r   r&   r   r   r   r   D  s    c             S   s   g | ]}|j ƒ ‘qS r   )r+  )r   r&   r   r   r   r   G  s    )ÚcsvZSnifferZsniffÚreadÚseekÚreaderr   r=   r  Únextrr   )Úfpr=   r\   Zdialectr/  Útablerx   r   r   r   Úfrom_csv7  s    


r3  c             K   sF   | j rBtf |Ž}dd„ | j D ƒ|_x| jƒ D ]}|j|ƒ q,W |S d S )Nc             S   s   g | ]}|d  ‘qS )r   r   )r   Úcolr   r   r   r   O  s    z"from_db_cursor.<locals>.<listcomp>)Údescriptionr   r=   Zfetchallrr   )Zcursorr\   r2  rx   r   r   r   Úfrom_db_cursorK  s    
r6  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTableHandlerc             K   s>   t j| ƒ || _g | _g | _g | _d| _d | _d| _d| _	d S )Nr   r�   F)
r   r^   r\   ÚtablesÚlast_rowrï   Úmax_row_widthÚactiveÚlast_contentÚis_last_row_header)r[   r\   r   r   r   r^   V  s    
zTableHandler.__init__c             C   s   || _ |dkrd| _d S )NÚthT)r;  r=  )r[   ÚtagÚattrsr   r   r   Úhandle_starttaga  s    zTableHandler.handle_starttagc             C   s�   |dkr| j jƒ }| jj|ƒ |dkrZ| jj| j| jfƒ t| jt| jƒƒ| _g | _d| _|dkr€| j	| jƒ}| j
j|ƒ g | _d| _ d | _d S )Nr>  ÚtdZtrFr2  rf   )r>  rB  )r<  r+  r9  rß   rï   r=  r   r:  r   Úgenerate_tabler8  r;  )r[   r?  Zstripped_contentr2  r   r   r   Úhandle_endtagf  s    
zTableHandler.handle_endtagc             C   s   |  j |7  _ d S )N)r<  )r[   Údatar   r   r   Úhandle_datax  s    zTableHandler.handle_datac             C   sš   t f | jŽ}xˆ| jD ]~}t|d ƒ| jk r^| jt|d ƒ }x td|ƒD ]}|d jdƒ qHW |d dkr„| j|d ƒ |d |_q|j	|d ƒ qW |S )zE
        Generates from a list of rows a PrettyTable object.
        r   r   r0   T)
r   r\   rï   r   r:  rÞ   rß   Úmake_fields_uniquer=   rr   )r[   rï   r2  rx   Zappendsrå   r   r   r   rC  {  s    zTableHandler.generate_tablec             C   sX   xRt dt|ƒƒD ]@}x:t |d t|ƒƒD ]$}|| || kr(||  d7  < q(W qW dS )zB
        iterates over the row and make each field unique
        r   r   ú'N)rÞ   r   )r[   r   rå   Újr   r   r   rG  �  s    zTableHandler.make_fields_uniqueN)	r  r  r  r^   rA  rD  rF  rC  rG  r   r   r   r   r7  T  s   r7  c             K   s   t f |Ž}|j| ƒ |jS )zƒ
    Generates a list of PrettyTables from a string of HTML code. Each <table> in
    the HTML becomes one PrettyTable object.
    )r7  Zfeedr8  )Ú	html_coder\   Úparserr   r   r   Ú	from_html–  s    

rL  c             K   s6   t | f|Ž}yW n tk
r,   tdƒ‚Y nX |d S )zf
    Generates a PrettyTables from a string of HTML code which contains only a
    single <table>
    zDMore than one <table> in provided HTML code!  Use from_html instead.r   )rL  r�   rt   )rJ  r\   r8  r   r   r   Úfrom_html_one   s    rM  c              C   sÀ   t ddddgƒ} d| _d| _d| jd< d| _d| jd< | jd	d
ddgƒ | jddddgƒ | jddddgƒ | jddddgƒ | jddddgƒ | jdddd gƒ | jd!d"d#d$gƒ t| ƒ d S )%Nz	City nameZAreaZ
PopulationzAnnual RainfallTZ04dz6.1fre   ZAdelaidei  is¬ g     Ä‚@ZBrisbanei  i:X gš™™™™é‘@ZDarwinép   iDØ gÍÌÌÌÌÊš@ZHobartiM  iô" g     \ƒ@ZSydneyi
  iö*B g33333û’@Z	Melbournei  iŒ: g333337„@ZPerthi
  iQ¹ g33333+‹@)r   r#   r$   r(   r)   rh   rr   Úprint)r&   r   r   r   Úmain±  s    

rP  Ú__main__)N)2Ú__version__ré   r,  rÛ   ÚreÚsysr  Ú	itertoolsr"  Úversion_infor  rb   rc   ra   Úmapr'  r–   ZiterzipÚchrr#  Zhtml.parserr   ZimapZizipZunichrZhtmlr   ZcgirH   rJ   rØ   rÜ   rÏ   rÑ   rÓ   rÕ   Úcompiler)  r   Úobjectr   r%  r   r3  r6  r7  rL  rM  rP  r  r   r   r   r   Ú<module>    sj   
         E!
	B

