a F`Q@s`dZddlZddlZddlZddlZddlZddlZddlZddlZej ddkZ e rxe Z e Z eZeZeZddlmZnejZejZeZddlmZe rej ddkrddlmZn ddlmZdZdZdZdZdZ d Z!d Z"d Z#e$d Z%d dZ&Gddde'Z(ddZ)ddZ*d"ddZ+ddZ,GdddeZ-ddZ.ddZ/dd Z0e1d!kr\e0dS)#z0.7.2N) HTMLParser)escape z \[[0-9;]*mcCs,|d}t|}tdd|D}||fS)N cSsg|] }t|qS_str_block_width).0liner r //usr/lib/python3.9/site-packages/prettytable.py Oz_get_size..)splitlenmax)textlinesZheightwidthr r r _get_sizeLs rc@sBeZdZdddZddZddZdd Zd d Zer@d d Z ndd Z ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4ZeeeZd5d6Zd7d8Z eee Z!d9d:Z"d;d<Z#ee"e#Z$d=d>Z%d?d@Z&ee%e&Z'dAdBZ(dCdDZ)ee(e)Z*dEdFZ+dGdHZ,ee+e,Z-dIdJZ.dKdLZ/ee.e/Z0dMdNZ1dOdPZ2ee1e2Z3dQdRZ4dSdTZ5ee4e5Z6dUdVZ7dWdXZ8ee7e8Z9dYdZZ:d[d\Z;ee:e;Zee=e>Z?dadbZ@dcddZAee@eAZBdedfZCdgdhZDeeCeDZEdidjZFdkdlZGeeFeGZHdmdnZIdodpZJeeIeJZKdqdrZLdsdtZMeeLeMZNdudvZOdwdxZPeeOePZQdydzZRd{d|ZSeeReSZTd}d~ZUddZVeeUeVZWddZXddZYeeXeYZZddZ[ddZ\ee[e\Z]ddZ^ddZ_ee^e_Z`ddZaddZbeeaebZcddZdddZeeedeeZfddZgddZheegehZiddZjddZkddZlddZmddZnddZoddZpddZqdddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|dd„Z}ddĄZ~ddƄZddȄZddʄZdd̄ZdS) PrettyTableNcKsV|dd|_g|_i|_i|_i|_g|_|r8||_ng|_d |_ |j d |j d |j D]&}||vr| |||qnd||<qn|dpd|_ |d pd|_|d pd|_|d d vr|d |_nd |_|dpd|_|dd vr|d|_nd |_|dpt|_|dp(t|_|dp8d|_|dd vrV|d|_nd|_|dpldd|_|dp|i|_|dpi|_|dpd|_|dpd|_|dpd|_|dp|d|_ |d p|d!|_!|d"p|d#|_"|d$d vr|d$|_#nd |_#|d%p.d|_$|d&p>d|_%|d'pNi|_&dS)(aReturn 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 orderencodingzUTF-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_emptyNstartrendfieldsheaderTFT header_styleborderhrulesvrulessortby reversesortFsort_keycSs|SNr xr r rrz&PrettyTable.__init__.. int_format float_format padding_widthrleft_padding_widthright_padding_width vertical_char|horizontal_char- junction_char+ print_emptyformatxhtml attributes)'getr _field_names_align_valign _max_width_rows field_names_widthsr_optionsextend_validate_option_start_end_fields_header _header_style_borderFRAME_hrulesALL_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)selfrBkwargsoptionr r r__init__Ts^        zPrettyTable.__init__cCs.t|tst|}t|ts*t||jd}|S)Nstrict) isinstance basestringstrunicoder)r`valuer r rrYs   zPrettyTable._unicodecCs|t|}|dkr ||dS|dkr4|d|S|drt|drh|dd||dddS|ddd||ddSn|dd||ddSdS)Nl rrrr )r`rralignZexcessr r r_justifys     "zPrettyTable._justifycCsP|dkrt|jS|dkrD|jr*t|jS|jr>t|jdSdSnt|dS)NrowcountZcolcountr)rrAr=AttributeError)r`namer r r __getattr__s  zPrettyTable.__getattr__cCst}|j|_|jD]}t|d|t|d|qt|dt|dt|trl|j|D]}||qZn,t|t r||j|nt dt ||S)N_r>z0Index %s is invalid, must be an integer or slice) rrBrDsetattrgetattrreslicerAadd_rowint Exceptionrg)r`indexnewattrrowr r r __getitem__s   zPrettyTable.__getitem__cCs|Sr)) __unicode__r`r r r__str__szPrettyTable.__str__cCs||jSr))rencoderrr r rrscCs|Sr)) get_stringrr r rrszPrettyTable.__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`rbvalr r rrFs6   zPrettyTable._validate_optionc Cs|jrNzt|t|jksJWn,tyLtdt|t|jfYn0|jrzt|t|jdkspJWn0tytdt|t|jdfYn0zt|tt|ksJWntytdYn0dS)NzJField name list has incorrect number of values, (actual) %d!=%d (expected)rzField names must be unique!)r=rAssertionErrorryrAsetr`rr r rrs   $ z!PrettyTable._validate_field_namescCs0z|dvsJWnty*tdYn0dS)N)captitleupperlowerNz;Invalid header style, use cap, title, upper, lower or None!rryrr r rr0s z"PrettyTable._validate_header_stylecCs4z|dvsJWnty.td|Yn0dS)N)rjcrlz'Alignment %s is invalid, use l, c or r!rrr r r_validate_align6s zPrettyTable._validate_aligncCs4z|dvsJWnty.td|Yn0dS)N)tmbNz-Alignment %s is invalid, use t, m, b or None!rrr r r_validate_valign<s zPrettyTable._validate_valignc CsBzt|dksJWn(ty<td|||fYn0dS)NrzInvalid value for %s: %s!)rxrryrYr`rqrr r rrBs z%PrettyTable._validate_nonnegative_intcCs4z|dvsJWnty.td|Yn0dS)Nr!z-Invalid value for %s! Must be True or False.rrr r rrHs z#PrettyTable._validate_true_or_falsecCsT|dkr dSz$t|ttfvs"J|s.JWntyNtd|Yn0dS)Nz8Invalid value for %s! Must be an integer format string.)typergrhisdigitrryrr r rrNs z PrettyTable._validate_int_formatcCs|dkr dSzvt|ttfvs"Jd|vs.J|d}t|dksHJ|ddksd|dsdJ|ddks|dsJWntytd|Yn0dS)Nr.rrrz5Invalid value for %s! Must be a float format string.)rrgrhrrrrry)r`rqrbitsr r rrWs    z"PrettyTable._validate_float_formatcCs6zt|dsJWnty0td|Yn0dS)N__call__z*Invalid value for %s! Must be a function.)hasattrrryrr r rrds zPrettyTable._validate_functioncCs<z|ttttfvsJWnty6td|Yn0dS)Nz:Invalid value for %s! Must be ALL, FRAME, HEADER or NONE.)rOrMHEADERNONErryrr r rrjs zPrettyTable._validate_hrulescCs:z|tttfvsJWnty4td|Yn0dS)Nz3Invalid value for %s! Must be ALL, FRAME, or NONE.)rOrMrrryrr r rrps zPrettyTable._validate_vrulescCs>z||jvs|dusJWnty8td|Yn0dS)NzInvalid field name: %s!)r=rryrr r rrvs z PrettyTable._validate_field_namecCs:z|D]}|||qWnty4tdYn0dS)Nz)fields must be a sequence of field names!)rrry)r`rqrr+r r rr|s  z%PrettyTable._validate_all_field_namescCs8zt|dksJWnty2td|Yn0dS)Nrz4Invalid value for %s! Must be a string of length 1.)rrryrr r rrs z!PrettyTable._validate_single_charcCs2zt|tsJWnty,tdYn0dS)Nz4attributes must be a dictionary of name/value pairs!)redictrryrr r rrs z PrettyTable._validate_attributescCs|jSr))r=rr r r_get_field_namesszPrettyTable._get_field_namescsfdd|D}d|jr2jdd}|_jr|rt||D]\}}j|j|<qL|D]}|jvrjj|qjnjD]}dj|<qjr|rt||D]\}}j|j|<q|D]}|jvrЈj|qnjD]}dj|<qdS)Ncsg|]}|qSr )rYrr+rr rrrz0PrettyTable._set_field_names..rBrr)rFr=r>zippopr?)r`rZ old_namesZold_namenew_namefieldr rr_set_field_namess*        zPrettyTable._set_field_namescCs|jSr))r>rr r r _get_alignszPrettyTable._get_aligncCs$|||jD]}||j|<qdSr))rr=r>r`rrr r r _set_aligns  zPrettyTable._set_aligncCs|jSr))r?rr r r _get_valignszPrettyTable._get_valigncCs$|||jD]}||j|<qdSr))rr=r?rr r r _set_valigns  zPrettyTable._set_valigncCs|jSr))r@rr r r_get_max_widthszPrettyTable._get_max_widthcCs&|d||jD]}||j|<qdS)Nr)rFr=r@rr r r_set_max_widths  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)rIrr r r _get_fieldsszPrettyTable._get_fieldscCs|d|||_dS)Nr)rFrIrr r r _set_fieldss 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)rGrr r r _get_startszPrettyTable._get_startcCs|d|||_dS)Nr)rFrGrr r r _set_starts zPrettyTable._set_startcCs|jS)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))rHrr r r_get_endszPrettyTable._get_endcCs|d|||_dS)Nr)rFrHrr r r_set_ends zPrettyTable._set_endcCs|jS)z_Name of field by which to sort rows Arguments: sortby - field name to sort by)rQrr r r _get_sortbyszPrettyTable._get_sortbycCs|d|||_dS)Nr&)rFrQrr r r _set_sortbys zPrettyTable._set_sortbycCs|jS)zControls direction of sorting (ascending vs descending) Arguments: reveresort - set to True to sort by descending order, or False to sort by ascending order)rRrr r r_get_reversesortszPrettyTable._get_reversesortcCs|d|||_dS)Nr')rFrRrr r r_set_reversesorts zPrettyTable._set_reversesortcCs|jS)zSorting key function, applied to data points before sorting Arguments: sort_key - a function which takes one argument and returns something to be sorted)rSrr r r _get_sort_key szPrettyTable._get_sort_keycCs|d|||_dS)Nr()rFrSrr r r _set_sort_keys zPrettyTable._set_sort_keycCs|jS)zControls printing of table header with field names Arguments: header - print a header showing field names (True or False))rJrr r r _get_headerszPrettyTable._get_headercCs|d|||_dS)Nr )rFrJrr r r _set_headers zPrettyTable._set_headercCs|jS)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))rKrr r r_get_header_style!szPrettyTable._get_header_stylecCs||||_dSr))rrKrr 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))rLrr r r _get_border-szPrettyTable._get_bordercCs|d|||_dS)Nr#)rFrLrr r r _set_border4s zPrettyTable._set_bordercCs|jS)zControls printing of horizontal rules after rows Arguments: hrules - horizontal rules style. Allowed values: FRAME, ALL, HEADER, NONE)rNrr r r _get_hrules9szPrettyTable._get_hrulescCs|d|||_dS)Nr$)rFrNrr r r _set_hrules@s zPrettyTable._set_hrulescCs|jS)zControls printing of vertical rules between columns Arguments: vrules - vertical rules style. Allowed values: FRAME, ALL, NONE)rPrr r r _get_vrulesEszPrettyTable._get_vrulescCs|d|||_dS)Nr%)rFrPrr r r _set_vrulesLs zPrettyTable._set_vrulescCs|jS)zbControls formatting of integer data Arguments: int_format - integer format string)rTrr r r_get_int_formatQszPrettyTable._get_int_formatcCs|jD]}||j|<qdSr))r=rTrr r r_set_int_formatWs zPrettyTable._set_int_formatcCs|jS)zrControls formatting of floating point data Arguments: float_format - floating point format string)rUrr r r_get_float_format]szPrettyTable._get_float_formatcCs|jD]}||j|<qdSr))r=rUrr r r_set_float_formatcs zPrettyTable._set_float_formatcCs|jS)zThe number of empty spaces between a column's edge and its content Arguments: padding_width - number of spaces, must be a positive integer)rVrr r r_get_padding_widthiszPrettyTable._get_padding_widthcCs|d|||_dS)Nr/)rFrVrr r r_set_padding_widthps zPrettyTable._set_padding_widthcCs|jS)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)rWrr r r_get_left_padding_widthusz#PrettyTable._get_left_padding_widthcCs|d|||_dS)Nr0)rFrWrr r r_set_left_padding_width|s z#PrettyTable._set_left_padding_widthcCs|jS)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)rXrr r r_get_right_padding_widthsz$PrettyTable._get_right_padding_widthcCs|d|||_dS)Nr1)rFrXrr r r_set_right_padding_widths z$PrettyTable._set_right_padding_widthcCs|jS)zThe charcter used when printing table borders to draw vertical lines Arguments: vertical_char - single character string used to draw vertical lines)rZrr r r_get_vertical_charszPrettyTable._get_vertical_charcCs ||}|d|||_dSNr2)rYrFrZrr r r_set_vertical_chars  zPrettyTable._set_vertical_charcCs|jS)zThe charcter used when printing table borders to draw horizontal lines Arguments: horizontal_char - single character string used to draw horizontal lines)r[rr r r_get_horizontal_charsz PrettyTable._get_horizontal_charcCs ||}|d|||_dS)Nr4)rYrFr[rr r r_set_horizontal_chars  z PrettyTable._set_horizontal_charcCs|jS)zThe charcter used when printing table borders to draw line junctions Arguments: junction_char - single character string used to draw line junctions)r\rr r r_get_junction_charszPrettyTable._get_junction_charcCs ||}|d|||_dSr)rYrFr\rr r r_set_junction_chars  zPrettyTable._set_junction_charcCs|jS)z~Controls whether or not HTML tables are formatted to match styling options Arguments: format - True or False)r^rr r r _get_formatszPrettyTable._get_formatcCs|d|||_dS)Nr9)rFr^rr r r _set_formats 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]rr r r_get_print_emptyszPrettyTable._get_print_emptycCs|d|||_dS)Nr8)rFr]rr r r_set_print_emptys zPrettyTable._set_print_emptycCs|jS)zA dictionary of HTML attribute name/value pairs to be included in the tag when printing HTML Arguments: attributes - dictionary of attributes)r_rr r r_get_attributesszPrettyTable._get_attributescCs|d|||_dS)Nr;)rFr_rr r r_set_attributess zPrettyTable._set_attributescCsLi}|jD]<}||vr4||||||||<q t|d|||<q |S)Nrs)rDrFru)r`raoptionsrbr r r _get_optionss zPrettyTable._get_optionscCsT|tkr|n>|tkr$|n,|tkr6|n|tkrH|ntddS)NzInvalid pre-set style!) DEFAULT_set_default_styleMSWORD_FRIENDLY_set_msword_style PLAIN_COLUMNS_set_columns_styleRANDOM_set_random_stylery)r`Zstyler r r set_styles    zPrettyTable.set_stylecCs@d|_d|_t|_t|_d|_d|_d|_d|_ d|_ d|_ dS)NTrr3r5r7) r r#rMrNrOrPr/r0r1r2r4r6rr r rrszPrettyTable._set_default_stylecCs.d|_d|_t|_d|_d|_d|_d|_dS)NTrr3)r r#rrNr/r0r1r2rr r rrszPrettyTable._set_msword_stylecCs"d|_d|_d|_d|_d|_dS)NTFrr)r r#r/r0r1rr r rrs zPrettyTable._set_columns_stylecCstd|_td|_tttttf|_ttttf|_ t dd|_ t dd|_ td|_ td|_td|_dS)Nr!rz ~!@#$%^&*()_+|-=\{}[];':",./;<>?)randomchoicer r#rOrMrrrNrPZrandintr0r1r2r4r6rr r rrs    zPrettyTable._set_random_stylecCsf|jr2t|t|jkr2tdt|t|jf|jsRddtdt|D|_|jt|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|dqS)zField %drr )rnr r rr4rz'PrettyTable.add_row..rN)r=rryrangerBrAappendlist)r`r}r r rrw(s zPrettyTable.add_rowcCs4|t|jdkr(td|t|jf|j|=dS)zDelete 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 rdel_row7szPrettyTable.del_rowrrcCst|jdt|fvr|||||j|||j|<||j|<tdt|D]6}t|j|dkrz|jg|j|||qXnt dt|t|jfdS)aAdd 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) rrArrr=rr>r?rry)r` fieldnamecolumnrmvalignir r r add_columnCs       zPrettyTable.add_columncCs g|_dS)z?Delete all rows from the table but keep the current field namesN)rArr 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=rCrr r rclearbszPrettyTable.clearcCs t|Sr))copydeepcopyrr r rrnszPrettyTable.copycCsdt|tr.||jvr.|d|j||}n,t|trZ||jvrZ|d|j||}||S)Nz%%%sdz%%%sf)rerxrTrYfloatrU)r`rrir r r _format_valueus zPrettyTable._format_valuecCs|drdd|jD}nt|jdg}|D]l}t|D]^\}}|j|}||jvr~t||tt|d|j|||<q:t||t|d||<q:q.||_dS)Nr cSsg|]}t|dqSr)r)rrr r rr~rz/PrettyTable._compute_widths..r) r=rrB enumeraterrminrrC)r`rowsrZwidthsr}rzrirr r r_compute_widths|s  (zPrettyTable._compute_widthscCsD|ddur|d}n|d}|ddur4|d}n|d}||fS)Nr0r/r1r )r`rlpadrpadr r r_get_padding_widthss    zPrettyTable._get_padding_widthscsnt|j|d|d}|drj|j|dfdd|D}|j|d|ddd d|D}|S) zReturn 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 rrrz)PrettyTable._get_rows..r'r()reversekeycSsg|]}|ddqS)rNr rr r rrr)rrrAr=rzsort)r`rr r rr _get_rowsszPrettyTable._get_rowscsfddtj|DS)Ncsg|]\}}||qSr )r)rrrirr rrrz+PrettyTable._format_row..)rr=)r`r}rr rr _format_rowszPrettyTable._format_rowcsfdd|DS)Ncsg|]}|qSr )rrrr`r rrrz,PrettyTable._format_rows..r )r`r rr rr _format_rowsszPrettyTable._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#rr r$r )rrorrr _stringify_hrule_hruler_stringify_headerrOrM_stringify_rowrYjoin)r`rarrr formatted_rowsr}r r rrs"       zPrettyTable.get_stringcCs|ds dS||\}}|dttfvr6|dg}n |dg}|js^||dd|St|j|jD]b\}}|dr||dvrql|||||d|dtkr||dql||dql|dtkr|||dd|S)Nr#rr%r6r4r) r rOrMr=rrrrCr)r`rr r rrrr r rrs(     zPrettyTable._stringify_hrulec Csg}||\}}|drj|dttfvr@||j|d|dttfvr`||dn |d|js|dttfvr||dn |dt|j|jD]\}}|dr||dvrq|jdkr| }nD|jd kr| }n0|jd kr| }n|jd kr| }n|}|d|| |||j|d||dr|dtkrn||dq|dq|dr|dtkr|||d|dr|dtkr|d||jd |S) Nr#r$r r%r2rkrrrrrr)r rOrMrrr=rrCrK capitalizerrrrnr>rrr)r`rrr r rrrr r rr sJ            *   zPrettyTable._stringify_headerc Csttdt||j||jD]\\}}}}|d}g}|D]&} t| |krVt| |} | | q:|}d |}|||<qd} |D]} t | d} | | kr| } qg} | |\}}td| D]F}| g|dr|dt tfvr| | |jq| | dqt|j||jD],\}}}|j|}|d}| t|}|r|dkr~dgt|d |dg|t|d }n(|d krdg||}n|dg|}d}|D]}|d r||d vrΐq| | d|||||j|d||dr4|dt kr&| | |jn| | d|d7}qqtd| D]<}|drN|dtkrN| || | |d qN|dr|d t kr| | d d| | d |jtd| D]}d | || |<qd | S)Nrr rr#r%rkrrrrrr2r$)rrrr=rCrrtextwrapfillrrrr rOrMr2r?rxrnr>rr)r`r}rrzrrirrZ new_linesrZ row_heightrhrr r yrZdHeightrjr 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`rarstringr r rget_html_strings    zPrettyTable.get_html_stringc Cs^g}|drd}nd}g}|d|drT|dD]}|d||d|fq4|d|d||d r|d |jD]4}|d r||d vrq|d t|d |q|d||}|||}|D]b} |d t|j| D]<\}} |d r||d vrq|dt| d |q|dq|d|d |S)Nr:

rr  rz r z 
%s
%s
) rrr=rreplacerrrrY) r`rr linebreakopen_tag attr_namerr rr}datumr r rr#s:           z#PrettyTable._get_simple_html_stringc Csg}||\}}|dr d}nd}g}|d|dr|dtkr`|dtkr`|dn|dtkr|dtkr|d n|dtkr|dtkr|d n`|dtkr|d nH|dtkr|d n0|dtkr|d n|dtkr|d|dr<|dD] }|d||d|fq|d|d||dr|d|jD]B}|dr||dvrqp|d||t|d|fqp|d||} | | |} g} g} |jD]>}| dddd|j || dddd |j |q| D]z} |dt |j| | | D]N\}}}}|drl||dvrlqD|d!||||t|d|fqD|dq&|d"| d|S)#Nr: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"r;r)r*rr r+rzW %sr r,leftrightcenter)rjrlrtopZmiddleZbottom)rrrzg %sr-)r rrOrMrr=rr.rrr>r?rrY)r`rrr r r/r0r1rr rZalignsZvalignsr}r2rmrr r rr"sd                  $      ( z&PrettyTable._get_formatted_html_string)N)rr)__name__ __module__ __qualname__rcrYrnrrr~py3krrrFrrrrrrrrrrrrrrrrrpropertyrBrrrmrrrrrrrrrrrrrrrrrr&rrr'rrr(rrr rrr"rrr#rrr$rrr%rrr-rrr.rrr/rrr0rrr1rrr2rrr4rrr6rrr9rrr8rrr;rrrrrrrwrrrrrrr r rrrrrrrr%r#r"r r r rrRs ]                                    =/L (rcCsd|krdkrnndSd|kr0dkr8nndSd|krLdkrTnndStt|rfd Sd |krzd ksnd |krd krnndSd|krdkrnndSd|krdkrnndS|dvrdS|dvrd SdS)N!~riNiriiri@0i0i0i0ii`i0i>0)r)r) unicodedataZ combininguni_chr)charr r r_char_block_widths&.rDc Csttttttd|S)Nr)sumitermaprDord_resub)rr r rr/srcKst|d}|dt||}tfi|}|rD||_n.tr^ddt |D|_ndd| D|_|D]}| dd|Dqv|S)NircSsg|] }|qSr striprr r rrBrzfrom_csv..cSsg|] }|qSr rJrr r rrDrcSsg|] }|qSr rJrr r rrGr) csvZSnifferZsniffreadseekreaderrrBr:nextrw)fprBraZdialectrOtabler}r r rfrom_csv7s  rScKsF|jrBtfi|}dd|jD|_|D]}||q.|SdS)NcSsg|] }|dqSrr )rcolr r rrOrz"from_db_cursor..) descriptionrrBZfetchallrw)ZcursorrarRr}r r rfrom_db_cursorKs   rVc@s<eZdZddZddZddZddZd d Zd d Zd S) TableHandlercKs>t|||_g|_g|_g|_d|_d|_d|_d|_ dS)NrrF) rrcratableslast_rowr  max_row_widthactive last_contentis_last_row_header)r`rar r rrcVs zTableHandler.__init__cCs||_|dkrd|_dS)NthT)r[r])r`tagattrsr r rhandle_starttagaszTableHandler.handle_starttagcCs|dvr|j}|j||dkrZ|j|j|jft|jt|j|_g|_d|_|dkr| |j}|j |g|_d|_d|_ dS)N)r^ZtdtrFrRrk) r\rKrYrr r]rrZrgenerate_tablerXr[)r`r_Zstripped_contentrRr r r handle_endtagfs      zTableHandler.handle_endtagcCs|j|7_dSr))r\)r`datar r r handle_dataxszTableHandler.handle_datacCstfi|j}|jD]z}t|d|jkr\|jt|d}td|D]}|ddqH|ddkr||d|d|_q| |dq|S)zE Generates from a list of rows a PrettyTable object. rrr5T) rrar rrZrrmake_fields_uniquerBrw)r`r rRr}Zappendsrr r rrc{s   zTableHandler.generate_tablecCsPtdt|D]<}t|dt|D]$}||||kr$||d7<q$qdS)zB iterates over the row and make each field unique rr'N)rr)r`rrjr r rrgszTableHandler.make_fields_uniqueN) r7r8r9rcrardrfrcrgr r r rrWTs  rWcKstfi|}|||jS)z Generates a list of PrettyTables from a string of HTML code. Each in the HTML becomes one PrettyTable object. )rWZfeedrX) html_coderaparserr r r from_htmls rlcKsHt|fi|}zt|dks"JWnty>tdYn0|dS)zf Generates a PrettyTables from a string of HTML code which contains only a single
rzDMore than one
in provided HTML code! Use from_html instead.r)rlrrry)rjrarXr r r from_html_ones  rmcCstgd}d|_d|_d|jd<d|_d|jd<|gd |gd |gd |gd |gd |gd|gdt|dS)N) City nameArea PopulationzAnnual RainfallrpTZ04droz6.1frjrn)ZAdelaideiisgĂ@)ZBrisbaneii:Xg@)ZDarwinpiDgʚ@)ZHobartiMi"g\@)ZSydneyi i*Bg33333@)Z Melbourneii:g333337@)ZPerthi iQg33333+@)rr&r'r-r.rmrwprintr*r r rmains   rs__main__)N)2 __version__rrLrresysr itertoolsrA version_infor:rgrhrfmaprFrZiterzipchrrBZ html.parserrimapZizipZunichrZhtmlrZcgirMrOrrrrrrcompilerHrobjectrrDrrSrVrWrlrmrsr7r r r r sj   E!  B