a F³`Q¼Óã@s`dZddlZddlZddlZddlZddlZddlZddlZddlZej ddkZ e rxe Z e Z eZeZeZddlmZnejZejZeZddlmZe r´ej ddkr´ddlmZn ddlmZdZdZdZdZdZ d Z!d Z"d Z#e $d ¡Z%d d„Z&Gdd„de'ƒZ(dd„Z)dd„Z*d"dd„Z+dd„Z,Gdd„deƒZ-dd„Z.dd„Z/dd „Z0e1d!kr\e0ƒdS)#z0.7.2éNé)Ú HTMLParseréé)Úescapeé é é éz \[[0-9;]*mcCs,| d¡}t|ƒ}tdd„|Dƒƒ}||fS)NÚ cSsg|] }t|ƒ‘qS©©Ú_str_block_width)Ú.0Úliner r ú//usr/lib/python3.9/site-packages/prettytable.pyÚ Oóz_get_size..)ÚsplitÚlenÚmax)ÚtextÚlinesZheightÚwidthr r rÚ _get_sizeLs rc@sBeZdZdÍdd„Zdd„Zdd„Zdd „Zd d „Zer@d d „Z ndd „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„ZeeeƒZd5d6„Zd7d8„Z eee ƒZ!d9d:„Z"d;d<„Z#ee"e#ƒZ$d=d>„Z%d?d@„Z&ee%e&ƒZ'dAdB„Z(dCdD„Z)ee(e)ƒZ*dEdF„Z+dGdH„Z,ee+e,ƒZ-dIdJ„Z.dKdL„Z/ee.e/ƒZ0dMdN„Z1dOdP„Z2ee1e2ƒZ3dQdR„Z4dSdT„Z5ee4e5ƒZ6dUdV„Z7dWdX„Z8ee7e8ƒZ9dYdZ„Z:d[d\„Z;ee:e;ƒZee=e>ƒZ?dadb„Z@dcdd„ZAee@eAƒZBdedf„ZCdgdh„ZDeeCeDƒZEdidj„ZFdkdl„ZGeeFeGƒZHdmdn„ZIdodp„ZJeeIeJƒZKdqdr„ZLdsdt„ZMeeLeMƒZNdudv„ZOdwdx„ZPeeOePƒZQdydz„ZRd{d|„ZSeeReSƒZTd}d~„ZUdd€„ZVeeUeVƒZWdd‚„ZXdƒd„„ZYeeXeYƒZZd…d†„Z[d‡dˆ„Z\ee[e\ƒZ]d‰dŠ„Z^d‹dŒ„Z_ee^e_ƒZ`ddŽ„Zadd„ZbeeaebƒZcd‘d’„Zdd“d”„ZeeedeeƒZfd•d–„Zgd—d˜„ZheegehƒZid™dš„Zjd›dœ„Zkddž„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Æ„ZdÇdÈ„Z€dÉdÊ„ZdËdÌ„Z‚dS)ÏÚ PrettyTableNcKsV| dd¡|_g|_i|_i|_i|_g|_|r8||_ng|_d  ¡|_ |j   d  ¡¡|j   d  ¡¡|j D]&}||vrŒ|  |||¡qnd||<qn|dp d|_ |d p®d|_|d p¼d|_|d d vrØ|d |_nd |_|dpèd|_|dd vr|d|_nd |_|dpt|_|dp(t|_|dp8d|_|dd vrV|d|_nd|_|dpldd„|_|dp|i|_|dpŒi|_|dpœd|_|dp¬d|_|dp¼d|_|dpÒ| d¡|_ |d pè| d!¡|_!|d"pþ| d#¡|_"|d$d vr|d$|_#nd |_#|d%p.d|_$|d&p>d|_%|d'pNi|_&dS)(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ÚencodingzUTF-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Úheader©TFTÚ header_styleÚborderÚhrulesÚvrulesÚsortbyÚ reversesortFÚsort_keycSs|S©Nr ©Úxr r rÚrz&PrettyTable.__init__..Ú 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Ú_formatZ_xhtmlÚ _attributes)ÚselfrBÚkwargsÚoptionr r rÚ__init__Ts^        zPrettyTable.__init__cCs.t|tƒst|ƒ}t|tƒs*t||jdƒ}|S)NÚstrict)Ú isinstanceÚ basestringÚstrÚunicoder)r`Úvaluer r rrY±s   zPrettyTable._unicodecCsª|t|ƒ}|dkr ||dS|dkr4|d|S|drŠt|ƒdrh|dd||dddS|ddd||ddSn|dd||ddSdS)NÚlú Úrrrr )r`rrÚalignZexcessr r rÚ_justify¸s     "zPrettyTable._justifycCsP|dkrt|jƒS|dkrD|jr*t|jƒS|jr>t|jdƒSdSnt|ƒ‚dS)NÚrowcountZcolcountr)rrAr=ÚAttributeError)r`Únamer r rÚ __getattr__Ís  zPrettyTable.__getattr__cCsœtƒ}|j|_|jD]}t|d|t|d|ƒƒqt|dt|dƒƒt|tƒrl|j|D]}| |¡qZn,t|t ƒrˆ| |j|¡nt dt |ƒƒ‚|S)NÚ_r>z0Index %s is invalid, must be an integer or slice) rrBrDÚsetattrÚgetattrreÚslicerAÚadd_rowÚintÚ Exceptionrg)r`ÚindexÚnewÚattrÚrowr r rÚ __getitem__Ûs   zPrettyTable.__getitem__cCs| ¡Sr))Ú __unicode__©r`r r rÚ__str__ìszPrettyTable.__str__cCs| ¡ |j¡Sr))rÚencoderr€r r rrïscCs| ¡Sr))Ú get_stringr€r r rròszPrettyTable.__unicode__cCs2|dvr| |¡n|dvr.| ||¡n|dvrD| ||¡nê|dvrZ| ||¡nÔ|dvrp| ||¡n¾|dvr†| ||¡n¨|dvrœ| ||¡n’|dvr²| ||¡n||d vrÆ| |¡nh|d vrÜ|  ||¡nR|d vrò|  ||¡n<|d vr |  ||¡n$|d vr"|  ||¡n t d|ƒ‚dS)NrB)rrÚ max_widthr/r0r1r9r&r(r$r%r)r r#r'r:r8r"r-r.)r2r4r6r;zUnrecognised 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_attributesry)r`rbÚvalr r rrFs6   zPrettyTable._validate_optionc Cs˜|jr8zWn,ty6tdt|ƒt|jƒfƒ‚Yn0|jrtzWn0tyrtdt|ƒt|jdƒfƒ‚Yn0zWnty’tdƒ‚Yn0dS)NzJField name list has incorrect number of values, (actual) %d!=%d (expected)rzField names must be unique!)r=ÚAssertionErrorryrrA©r`r’r r rr…s   $ z!PrettyTable._validate_field_namescCs$zWntytdƒ‚Yn0dS)Nz;Invalid header style, use cap, title, upper, lower or None!©r“ryr”r r rr0s z"PrettyTable._validate_header_stylecCs(zWnty"td|ƒ‚Yn0dS)Nz'Alignment %s is invalid, use l, c or r!r•r”r r rÚ_validate_align6s zPrettyTable._validate_aligncCs(zWnty"td|ƒ‚Yn0dS)Nz-Alignment %s is invalid, use t, m, b or None!r•r”r r rÚ_validate_valign<s zPrettyTable._validate_valignc Cs2zWn(ty,td|| |¡fƒ‚Yn0dS)NzInvalid value for %s: %s!)r“ryrY©r`rqr’r r rr†Bs z%PrettyTable._validate_nonnegative_intcCs(zWnty"td|ƒ‚Yn0dS)Nz-Invalid value for %s! Must be True or False.r•r˜r r rrŒHs z#PrettyTable._validate_true_or_falsecCs4|dkr dSzWnty.td|ƒ‚Yn0dS)NÚz8Invalid value for %s! Must be an integer format string.r•r˜r r rrŽNs  z PrettyTable._validate_int_formatcCs>|dkr dSz| d¡}Wnty8td|ƒ‚Yn0dS)Nr™Ú.z5Invalid value for %s! Must be a float format string.)rr“ry)r`rqr’Úbitsr r rrWs  z"PrettyTable._validate_float_formatcCs(zWnty"td|ƒ‚Yn0dS)Nz*Invalid value for %s! Must be a function.r•r˜r r rrˆds zPrettyTable._validate_functioncCs(zWnty"td|ƒ‚Yn0dS)Nz:Invalid value for %s! Must be ALL, FRAME, HEADER or NONE.r•r˜r r rr‰js zPrettyTable._validate_hrulescCs(zWnty"td|ƒ‚Yn0dS)Nz3Invalid value for %s! Must be ALL, FRAME, or NONE.r•r˜r r rrŠps zPrettyTable._validate_vrulescCs(zWnty"td|ƒ‚Yn0dS)NzInvalid field name: %s!r•r˜r r rr‡vs z PrettyTable._validate_field_namecCs:z|D]}| ||¡qWnty4tdƒ‚Yn0dS)Nz)fields must be a sequence of field names!)r‡r“ry)r`rqr’r+r r rr‹|s  z%PrettyTable._validate_all_field_namescCs(zWnty"td|ƒ‚Yn0dS)Nz4Invalid value for %s! Must be a string of length 1.r•r˜r r rrƒs z!PrettyTable._validate_single_charcCs$zWntytdƒ‚Yn0dS)Nz4attributes must be a dictionary of name/value pairs!r•r˜r r rr‘‰s z PrettyTable._validate_attributescCs|jSr))r=r€r r rÚ_get_field_names“szPrettyTable._get_field_namescs‡fdd„|Dƒ}ˆ d|¡ˆjr2ˆjdd…}|ˆ_ˆjrˆ|rˆt||ƒD]\}}ˆj|ˆj|<qL|D]}|ˆjvrjˆj |¡qjnˆjD]}dˆj|<qŽˆjrî|rît||ƒD]\}}ˆj|ˆj|<q²|D]}|ˆjvrЈj |¡qÐnˆjD]}dˆj|<qôdS)Ncsg|]}ˆ |¡‘qSr )rY©rr+r€r rr›rz0PrettyTable._set_field_names..rBÚcÚt)rFr=r>ÚzipÚpopr?)r`r’Z old_namesZold_nameÚnew_nameÚfieldr r€rÚ_set_field_namesšs*        zPrettyTable._set_field_namescCs|jSr))r>r€r r rÚ _get_align´szPrettyTable._get_aligncCs$| |¡|jD]}||j|<qdSr))r–r=r>©r`r’r£r r rÚ _set_align¶s  zPrettyTable._set_aligncCs|jSr))r?r€r r rÚ _get_valign¼szPrettyTable._get_valigncCs$| |¡|jD]}||j|<qdSr))r—r=r?r¦r r rÚ _set_valign¾s  zPrettyTable._set_valigncCs|jSr))r@r€r r rÚ_get_max_widthÄszPrettyTable._get_max_widthcCs&| d|¡|jD]}||j|<qdS)Nr„)rFr=r@r¦r r rÚ_set_max_widthÆs  zPrettyTable._set_max_widthcCs|jS)zList or tuple of field names to include in displays Arguments: fields - list or tuple of field names to include in displays)rIr€r r rÚ _get_fieldsÌszPrettyTable._get_fieldscCs| d|¡||_dS)Nr)rFrIr”r r rÚ _set_fieldsÓs zPrettyTable._set_fieldscCs|jS)z{Start index of the range of rows to print Arguments: start - index of first data row to include in output)rGr€r r rÚ _get_startØszPrettyTable._get_startcCs| d|¡||_dS)Nr)rFrGr”r r rÚ _set_startàs zPrettyTable._set_startcCs|jS)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))rHr€r r rÚ_get_endåszPrettyTable._get_endcCs| d|¡||_dS)Nr)rFrHr”r r rÚ_set_endìs zPrettyTable._set_endcCs|jS)z_Name of field by which to sort rows Arguments: sortby - field name to sort by)rQr€r r rÚ _get_sortbyñszPrettyTable._get_sortbycCs| d|¡||_dS)Nr&)rFrQr”r r rÚ _set_sortbyøs zPrettyTable._set_sortbycCs|jS)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)rRr€r r rÚ_get_reversesortýszPrettyTable._get_reversesortcCs| d|¡||_dS)Nr')rFrRr”r r rÚ_set_reversesorts zPrettyTable._set_reversesortcCs|jS)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)rSr€r r rÚ _get_sort_key szPrettyTable._get_sort_keycCs| d|¡||_dS)Nr()rFrSr”r r rÚ _set_sort_keys zPrettyTable._set_sort_keycCs|jS)z‹Controls printing of table header with field names Arguments: header - print a header showing field names (True or False))rJr€r r rÚ _get_headerszPrettyTable._get_headercCs| d|¡||_dS)Nr )rFrJr”r r rÚ _set_headers zPrettyTable._set_headercCs|jS)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))rKr€r r rÚ_get_header_style!szPrettyTable._get_header_stylecCs| |¡||_dSr))rrKr”r r rÚ_set_header_style(s zPrettyTable._set_header_stylecCs|jS)z~Controls printing of border around table Arguments: border - print a border around the table (True or False))rLr€r r rÚ _get_border-szPrettyTable._get_bordercCs| d|¡||_dS)Nr#)rFrLr”r r rÚ _set_border4s zPrettyTable._set_bordercCs|jS)z˜Controls printing of horizontal rules after rows Arguments: hrules - horizontal rules style. Allowed values: FRAME, ALL, HEADER, NONE)rNr€r r rÚ _get_hrules9szPrettyTable._get_hrulescCs| d|¡||_dS)Nr$)rFrNr”r r rÚ _set_hrules@s zPrettyTable._set_hrulescCs|jS)z‘Controls printing of vertical rules between columns Arguments: vrules - vertical rules style. Allowed values: FRAME, ALL, NONE)rPr€r r rÚ _get_vrulesEszPrettyTable._get_vrulescCs| d|¡||_dS)Nr%)rFrPr”r r rÚ _set_vrulesLs zPrettyTable._set_vrulescCs|jS)zbControls formatting of integer data Arguments: int_format - integer format string)rTr€r r rÚ_get_int_formatQszPrettyTable._get_int_formatcCs|jD]}||j|<qdSr))r=rTr¦r r rÚ_set_int_formatWs zPrettyTable._set_int_formatcCs|jS)zrControls formatting of floating point data Arguments: float_format - floating point format string)rUr€r r rÚ_get_float_format]szPrettyTable._get_float_formatcCs|jD]}||j|<qdSr))r=rUr¦r r rÚ_set_float_formatcs zPrettyTable._set_float_formatcCs|jS)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)rVr€r r rÚ_get_padding_widthiszPrettyTable._get_padding_widthcCs| d|¡||_dS)Nr/)rFrVr”r r rÚ_set_padding_widthps zPrettyTable._set_padding_widthcCs|jS)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)rWr€r r rÚ_get_left_padding_widthusz#PrettyTable._get_left_padding_widthcCs| d|¡||_dS)Nr0)rFrWr”r r rÚ_set_left_padding_width|s z#PrettyTable._set_left_padding_widthcCs|jS)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)rXr€r r rÚ_get_right_padding_widthsz$PrettyTable._get_right_padding_widthcCs| d|¡||_dS)Nr1)rFrXr”r r rÚ_set_right_padding_widthˆs z$PrettyTable._set_right_padding_widthcCs|jS)z¥The charcter used when printing table borders to draw vertical lines Arguments: vertical_char - single character string used to draw vertical lines)rZr€r r rÚ_get_vertical_charszPrettyTable._get_vertical_charcCs | |¡}| d|¡||_dS©Nr2)rYrFrZr”r r rÚ_set_vertical_char”s  zPrettyTable._set_vertical_charcCs|jS)z«The charcter used when printing table borders to draw horizontal lines Arguments: horizontal_char - single character string used to draw horizontal lines)r[r€r r rÚ_get_horizontal_charšsz PrettyTable._get_horizontal_charcCs | |¡}| d|¡||_dS)Nr4)rYrFr[r”r r rÚ_set_horizontal_char¡s  z PrettyTable._set_horizontal_charcCs|jS)z¥The charcter used when printing table borders to draw line junctions Arguments: junction_char - single character string used to draw line junctions)r\r€r r rÚ_get_junction_char§szPrettyTable._get_junction_charcCs | |¡}| d|¡||_dSrÍ)rYrFr\r”r r rÚ_set_junction_char®s  zPrettyTable._set_junction_charcCs|jS)z~Controls whether or not HTML tables are formatted to match styling options Arguments: format - True or False)r^r€r r rÚ _get_format´szPrettyTable._get_formatcCs| d|¡||_dS)Nr9)rFr^r”r r rÚ _set_format»s zPrettyTable._set_formatcCs|jS)zControls whether or not empty tables produce a header and frame or just an empty string Arguments: print_empty - True or False)r]r€r r rÚ_get_print_emptyÀszPrettyTable._get_print_emptycCs| d|¡||_dS)Nr8)rFr]r”r r rÚ_set_print_emptyÇs zPrettyTable._set_print_emptycCs|jS)z§A dictionary of HTML attribute name/value pairs to be included in the tag when printing HTML Arguments: attributes - dictionary of attributes)r_r€r r rÚ_get_attributesÌszPrettyTable._get_attributescCs| d|¡||_dS)Nr;)rFr_r”r r rÚ_set_attributesÓs zPrettyTable._set_attributescCsLi}|jD]<}||vr4| |||¡||||<q t|d|ƒ||<q |S)Nrs)rDrFru)r`raÚoptionsrbr r rÚ _get_optionsÜs zPrettyTable._get_optionscCsT|tkr| ¡n>|tkr$| ¡n,|tkr6| ¡n|tkrH| ¡ntdƒ‚dS)NzInvalid pre-set style!) ÚDEFAULTÚ_set_default_styleÚMSWORD_FRIENDLYÚ_set_msword_styleÚ PLAIN_COLUMNSÚ_set_columns_styleÚRANDOMÚ_set_random_stylery)r`Zstyler r rÚ set_styleës    zPrettyTable.set_stylecCs@d|_d|_t|_t|_d|_d|_d|_d|_ d|_ d|_ dS)NTrr3r5r7) r r#rMrNrOrPr/r0r1r2r4r6r€r r rrÜøszPrettyTable._set_default_stylecCs.d|_d|_t|_d|_d|_d|_d|_dS)NTrr3)r r#ÚNONErNr/r0r1r2r€r r rrÞszPrettyTable._set_msword_stylecCs"d|_d|_d|_d|_d|_dS)NTFrré)r r#r/r0r1r€r r rràs zPrettyTable._set_columns_stylecCs‚t d¡|_t d¡|_t ttttf¡|_t tttf¡|_ t  dd¡|_ t  dd¡|_ t d¡|_ t d¡|_t d¡|_dS)Nr!réz ~!@#$%^&*()_+|-=\{}[];':",./;<>?)ÚrandomÚchoicer r#rOrMÚHEADERrärNrPZrandintr0r1r2r4r6r€r r rrâs    zPrettyTable._set_random_stylecCsf|jr2t|ƒt|jƒkr2tdt|ƒt|jƒfƒ‚|jsRdd„tdt|ƒƒDƒ|_|j t|ƒ¡dS)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)cSsg|]}d|d‘qS)zField %drr )rÚnr r rr4rz'PrettyTable.add_row..rN)r=rryÚrangerBrAÚappendÚlist)r`r}r r rrw(s zPrettyTable.add_rowcCs4|t|jƒdkr(td|t|jƒfƒ‚|j|=dS)z‚Delete a row to the table Arguments: row_index - The index of the row you want to delete. Indexing starts at 0.rz4Cant delete row at index %d, table only has %d rows!N)rrAry)r`Z row_indexr r rÚdel_row7szPrettyTable.del_rowržrŸcCs°t|jƒdt|ƒfvr’| |¡| |¡|j |¡||j|<||j|<tdt|ƒƒD]6}t|jƒ|dkrz|j g¡|j| ||¡qXnt dt|ƒt|jƒfƒ‚dS)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 bottomrrz2Column length %d does not match number of rows %d!N) rrAr–r—r=rìr>r?rëry)r`Ú fieldnameÚcolumnrmÚvalignÚir r rÚ add_columnCs       zPrettyTable.add_columncCs g|_dS)z?Delete all rows from the table but keep the current field namesN)rAr€r r rÚ clear_rows\szPrettyTable.clear_rowscCsg|_g|_g|_dS)zWDelete all rows and field names from the table, maintaining nothing but styling optionsN)rAr=rCr€r r rÚclearbszPrettyTable.clearcCs t |¡Sr))ÚcopyÚdeepcopyr€r r rrönszPrettyTable.copycCsdt|tƒr.||jvr.| d|j||¡}n,t|tƒrZ||jvrZ| d|j||¡}| |¡S)Nz%%%sdz%%%sf)rerxrTrYÚfloatrU)r`r£rir r rÚ _format_valueus zPrettyTable._format_valuecCs¦|drdd„|jDƒ}nt|jƒdg}|D]l}t|ƒD]^\}}|j|}||jvr~t||tt|ƒd|j|ƒƒ||<q:t||t|ƒdƒ||<q:q.||_dS)Nr cSsg|]}t|ƒd‘qS©r)r)rr£r r rr~rz/PrettyTable._compute_widths..r) r=rrBÚ enumerater„rÚminrrC)r`ÚrowsrÙZwidthsr}rzrirïr r rÚ_compute_widths|s  (zPrettyTable._compute_widthscCsD|ddur|d}n|d}|ddur4|d}n|d}||fS)Nr0r/r1r )r`rÙÚlpadÚrpadr r rÚ_get_padding_widthsŠs    zPrettyTable._get_padding_widthscsnt |j|d|d…¡}|drj|j |d¡‰‡fdd„|Dƒ}|j|d|ddd d„|Dƒ}|S) z—Return only those data rows that should be printed, based on slicing and sorting. Arguments: options - dictionary of option settings.rrr&csg|]}|ˆg|‘qSr r ©rr}©Z sortindexr rr£rz)PrettyTable._get_rows..r'r()ÚreverseÚkeycSsg|]}|dd…‘qS)rNr rr r rr§r)rör÷rAr=rzÚsort)r`rÙrýr rrÚ _get_rows–szPrettyTable._get_rowscs‡fdd„tˆj|ƒDƒS)Ncsg|]\}}ˆ ||¡‘qSr )rù)rr£rir€r rr«rz+PrettyTable._format_row..)r r=)r`r}rÙr r€rÚ _format_rowªszPrettyTable._format_rowcs‡‡fdd„|DƒS)Ncsg|]}ˆ |ˆ¡‘qSr )rr©rÙr`r rr®rz,PrettyTable._format_rows..r )r`rýrÙr r rÚ _format_rows­szPrettyTable._format_rowscKsä| |¡}g}|jdkr,|dr(|ds,dS| |¡}| ||¡}| ||¡| |¡|_|drt| | |¡¡n$|dr˜|dt t fvr˜| |j¡|D]}| |  ||¡¡qœ|drÔ|dt krÔ| |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 rr8r#r™r r$r )rÚrorr rþÚ_stringify_hruleÚ_hrulerìÚ_stringify_headerrOrMÚ_stringify_rowrYÚjoin)r`rarÙrrýÚformatted_rowsr}r r rrƒ´s"       zPrettyTable.get_stringcCsü|ds dS| |¡\}}|dttfvr6|dg}n |dg}|js^| |d¡d |¡St|j|jƒD]b\}}|drŠ||dvrŠql| ||||d¡|dtkrÀ| |d¡ql| |d¡ql|dtkrò| ¡| |d¡d |¡S)Nr#r™r%r6r4r) rrOrMr=rìrr rCr¡)r`rÙrÿrr›r£rr r rr ñs(     zPrettyTable._stringify_hrulec Csàg}| |¡\}}|drj|dttfvr@| |j¡| d¡|dttfvr`| |d¡n | d¡|jsš|dttfvr| |d¡n | d¡t|j|jƒD]Ð\}}|drÆ||dvrÆq¨|jdkrÚ|  ¡}nD|jd krî|  ¡}n0|jd kr|  ¡}n|jd kr|  ¡}n|}| d||  |||j|¡d|¡|dr¨|dtkrn| |d¡q¨| d¡q¨|dr¨|dtkr¨| ¡| |d¡|drÖ|dtkrÖ| d¡| |j¡d  |¡S) Nr#r$r r%r2rkrZcapÚtitleÚupperÚlowerr™)rrOrMrìr r=r rCrKÚ capitalizerrrrnr>r¡rär)r`rÙr›rÿrr£rrïr r rr  sJ            *   zPrettyTable._stringify_headerc Csøttdt|ƒƒ|j||jƒD]\\}}}}| d¡}g}|D]&} t| ƒ|krVt | |¡} |  | ¡q:|}d  |¡}|||<qd} |D]} t | ƒd} | | kr‚| } q‚g} |  |¡\}}td| ƒD]F}|   g¡|dr¼|dt tfvrô| |  |j¡q¼| |  d¡q¼t|j||jƒD],\}}}|j|}| d¡}| t|ƒ}|r¦|dkr~dgt|d ƒ|dg|t|d ƒ}n(|d kr˜dg||}n|dg|}d}|D]}|d rÎ||d vrÎq®| |  d|| |||j|¡d|¡|dr4|dt kr&| |  |j¡n| |  d¡|d7}q®qtd| ƒD]<}|drN|dtkrN| | ¡| |  |d ¡qN|drÊ|d t krÊ| | d  d¡| | d  |j¡td| ƒD]}d  | |¡| |<qÔd  | ¡S)Nrr rr#r%rkÚmr™rÚbrr2r$)r rërr=rCrrÚtextwrapÚfillrìrrrrOrMr2r?rxrnr>r¡r )r`r}rÙrzr£rirrZ new_linesrZ row_heightržÚhr›rÿrÚyrñZdHeightrjr r rr:sj(            . .  zPrettyTable._stringify_rowcKs,| |¡}|dr| |¡}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
tag xhtml - print
tags if True,
tags if falser9)rÚÚ_get_formatted_html_stringÚ_get_simple_html_string)r`rarÙÚstringr r rÚget_html_string†s    zPrettyTable.get_html_stringc Cs^g}|drd}nd}g}| d¡|drT|dD]}| d||d|f¡q4| d¡| d |¡¡|d rÆ| d ¡|jD]4}|d r ||d vr q†| d t|ƒ d |¡¡q†| d¡| |¡}| ||¡}|D]b} | d ¡t|j| ƒD]<\}} |d r||d vrqú| dt| ƒ d |¡¡qú| d¡qà| d¡| d ¡ |¡S)Nr:ú
ú
úr™r ú rz r ú z ú
%s
%s
) rìrr=rÚreplacerr r rY) r`rÙrÚ linebreakÚopen_tagÚ attr_namer£rýrr}Údatumr r rr¦s:           z#PrettyTable._get_simple_html_stringc Cs¼g}| |¡\}}|dr d}nd}g}| d¡|dr|dtkr`|dtkr`| d¡n¨|dtkr„|dtkr„| d ¡n„|dtkr¨|dtkr¨| d ¡n`|dtkrÀ| d ¡nH|dtkrØ| d ¡n0|dtkrð| d ¡n|dtkr| d¡|dr<|dD] }| d||d|f¡q| d¡| d |¡¡|dr¾| d¡|jD]B}|dr||dvrqp| d||t|ƒ d|¡f¡qp| d¡| |¡} |  | |¡} g} g} |jD]>}|  ddddœ|j |¡|  dddd œ|j |¡qâ| D]z} | d¡t |j| | | ƒD]N\}}}}|drl||dvrlqD| d!||||t|ƒ d|¡f¡qD| d¡q&| d"¡|  d¡ |¡S)#Nr:rr 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"r;r"r#r™r r$rzW %sr r%ÚleftÚrightÚcenter)rjrlržÚtopZmiddleZbottom)rŸrrzg %sr&)rrìrOrMrr=rr'rr r>r?r rY)r`rÙrrÿrr(r)r*r£rýrZalignsZvalignsr}r+rmrñr r rrÎsd                  $      ( z&PrettyTable._get_formatted_html_string)N)ržrŸ)ƒÚ__name__Ú __module__Ú __qualname__rcrYrnrrr~Úpy3krrrFr…rr–r—r†rŒrŽrrˆr‰rŠr‡r‹rr‘rœr¤ÚpropertyrBr¥r§rmr¨r©rñrªr«r„r¬r­rr®r¯rr°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ÂrÃr-rÄrÅr.rÆrÇr/rÈrÉr0rÊrËr1rÌrÎr2rÏrÐr4rÑrÒr6rÓrÔr9rÕrÖr8r×rØr;rÚrãrÜrÞràrârwrîrórôrõrörùrþrrrr rƒr r rrrrr r r rrRs ]                                    =/L (rcCsìd|krdkrnndSd|kr0dkr8nndSd|krLdkrTnndSt t|ƒ¡rfd Sd |krzd ks”nd |krd kr˜nndSd|kr¬dkr´nndSd|krÈdkrÐnndS|dvrÜdS|dvrèd SdS)Né!é~riNiÿŸri¬i¯×ri@0iŸ0i 0iÿ0iÿi`ÿi0i>0)råééÿÿÿÿ)ré)Ú unicodedataZ combiningÚuni_chr)Úcharr r rÚ_char_block_widths&.r=c Cstttttt d|¡ƒƒƒS)Nr™)ÚsumÚitermapr=ÚordÚ_reÚsub)r’r r rr/srcKs”t ¡ | d¡¡}| d¡t ||¡}tfi|¤Ž}|rD||_n.tr^dd„t |ƒDƒ|_ndd„|  ¡Dƒ|_|D]}|  dd„|Dƒ¡qv|S)NircSsg|] }| ¡‘qSr ©Ústriprr r rrBrzfrom_csv..cSsg|] }| ¡‘qSr rCrr r rrDrcSsg|] }| ¡‘qSr rCrr r rrGr) ÚcsvZSnifferZsniffÚreadÚseekÚreaderrrBr3Únextrw)ÚfprBraZdialectrHÚtabler}r r rÚfrom_csv7s  rLcKsF|jrBtfi|¤Ž}dd„|jDƒ|_| ¡D]}| |¡q.|SdS)NcSsg|] }|d‘qSrúr )rÚcolr r rrOrz"from_db_cursor..)Ú descriptionrrBZfetchallrw)ZcursorrarKr}r r rÚfrom_db_cursorKs   rOc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú TableHandlercKs>t |¡||_g|_g|_g|_d|_d|_d|_d|_ dS)Nrr™F) rrcraÚtablesÚlast_rowrýÚ max_row_widthÚactiveÚ last_contentÚis_last_row_header)r`rar r rrcVs zTableHandler.__init__cCs||_|dkrd|_dS)NÚthT)rTrV)r`ÚtagÚattrsr r rÚhandle_starttagaszTableHandler.handle_starttagcCs|dvr|j ¡}|j |¡|dkrZ|j |j|jf¡t|jt|jƒƒ|_g|_d|_|dkr€|  |j¡}|j  |¡g|_d|_d|_ dS)N)rWZtdÚtrFrKrk) rUrDrRrìrýrVrrSrÚgenerate_tablerQrT)r`rXZstripped_contentrKr r rÚ handle_endtagfs    ÿ  zTableHandler.handle_endtagcCs|j|7_dSr))rU)r`Údatar r rÚ handle_dataxszTableHandler.handle_datacCs–tfi|j¤Ž}|jD]z}t|dƒ|jkr\|jt|dƒ}td|ƒD]}|d d¡qH|ddkr‚| |d¡|d|_q|  |d¡q|S)zE Generates from a list of rows a PrettyTable object. rrr5T) rrarýrrSrërìÚmake_fields_uniquerBrw)r`rýrKr}Zappendsròr r rr\{s   zTableHandler.generate_tablecCsPtdt|ƒƒD]<}t|dt|ƒƒD]$}||||kr$||d7<q$qdS)zB iterates over the row and make each field unique rrú'N)rër)r`rròÚjr r rr`szTableHandler.make_fields_uniqueN) r0r1r2rcrZr]r_r\r`r r r rrPTs  rPcKstfi|¤Ž}| |¡|jS)zƒ Generates a list of PrettyTables from a string of HTML code. Each in the HTML becomes one PrettyTable object. )rPZfeedrQ)Ú html_coderaÚparserr r rÚ from_html–s recKs8t|fi|¤Ž}zWnty.tdƒ‚Yn0|dS)zf Generates a PrettyTables from a string of HTML code which contains only a single
zDMore than one
in provided HTML code! Use from_html instead.r)rer“ry)rcrarQr r rÚ from_html_one s  rfcCs tgd¢ƒ}d|_d|_d|jd<d|_d|jd<| gd ¢¡| gd ¢¡| gd ¢¡| gd ¢¡| gd ¢¡| gd¢¡| gd¢¡t|ƒdS)N)ú City nameÚAreaÚ PopulationzAnnual RainfallriTZ04drhz6.1frjrg)ZAdelaideiis¬gÄ‚@)ZBrisbaneii:Xgš™™™™é‘@)ZDarwinépiDØgÍÌÌÌÌÊš@)ZHobartiMiô"g\ƒ@)ZSydneyi iö*Bg33333û’@)Z MelbourneiiŒ:g333337„@)ZPerthi iQ¹g33333+‹@)rr&r'r-r.rmrwÚprintr*r r rÚmain±s   rlÚ__main__)N)2Ú __version__rörErçÚreÚsysrÚ itertoolsr:Ú version_infor3rgrhrfÚmapr?r ZiterzipÚchrr;Z html.parserrÚimapZizipZunichrZhtmlrZcgirMrOrärérÛrÝrßráÚcompilerArÚobjectrr=rrLrOrPrerfrlr0r r r rÚ sj   E!  B