U
    ,d>                     @   s  d dl mZ dZdaedkrd 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mZmZ G dd deZejZdd	 Zd
d Zdd Zdd Zd)ddZdd Zdd Zd*ddZdd Zdd Zejdd Zesee ed   Zedkrvd dl Z d dl!Z edd ZdZ"e #e"Z$e$j%efef Z&e'd e(e& e$)  e j*+e"Z*e*,  e*-d!d" e*.d# nZed$krd dl/Z/edd Ze/0d%d& d dl1Z1e12d&Z3e3, -d'.d( nee dS )+    )print_functionaj  
Commands:

2rows           Print the contents of first and last row in each sheet
3rows           Print the contents of first, second and last row in each sheet
bench           Same as "show", but doesn't print -- for profiling
biff_count[1]   Print a count of each type of BIFF record in the file
biff_dump[1]    Print a dump (char and hex) of the BIFF records in the file
fonts           hdr + print a dump of all font objects
hdr             Mini-overview of file (no per-sheet information)
hotshot         Do a hotshot profile run e.g. ... -f1 hotshot bench bigfile*.xls
labels          Dump of sheet.col_label_ranges and ...row... for each sheet
name_dump       Dump of each object in book.name_obj_list
names           Print brief information for each NAME record
ov              Overview of file
profile         Like "hotshot", but uses cProfile
show            Print the contents of all rows in each sheet
version[0]      Print versions of xlrd and Python and exit
xfc             Print "XF counts" and cell-type counts -- see code for details

[0] means no file arg
[1] means only one file arg i.e. no glob.glob pattern
N__main__)xrangeREPRc                   @   s$   e Zd Zdd Zdd Zdd ZdS )
LogHandlerc                 C   s   || _ d | _d| _d S Nr   )
logfileobjfileheadingshown)selfr    r   >/usr/local/lib/python3.8/dist-packages/../../../bin/runxlrd.py__init__.   s    zLogHandler.__init__c                 C   s   || _ d| _d S r   )r	   r
   )r   r	   r   r   r   setfileheading3   s    zLogHandler.setfileheadingc                 C   s0   | j r | js | j| j  d| _| j| d S )N   )r	   r
   r   write)r   textr   r   r   r   7   s    zLogHandler.writeN)__name__
__module____qualname__r   r   r   r   r   r   r   r   ,   s   r   c           
      C   s   | j rt||}|sd S |r&t  | jrnt| |||D ]0\}}}}|r:tdt||d |||f  q:n>t| |||D ].\}}}}	|r|tdt||d ||f  q|d S )Nz%cell %s%d: type=%d, data: %r, xfx: %sr   zcell %s%d: type=%d, data: %r)ragged_rowsrangerow_lenprintformatting_infoget_row_dataxlrdZcolname)
bkshrowxcolrangeprintitcolxtyvalcxfxZ_unusedr   r   r   show_row?   s      
r&   c                 C   s   g }| j }||}||}|D ]}|| }	|| }
| jrNt|||}nd}|	tjkrzt|
|}W q tj	k
r } zdt
|j|f }tj}	W 5 d }~X Y qX n"|	tjkrtj|
d|
 }n|
}|||	||f q"|S )N z%s:%sz<Unknown error code 0x%02x>)datemode	row_types
row_valuesr   strcell_xf_indexr   ZXL_CELL_DATEZxldate_as_tupleZXLDateErrortyper   ZXL_CELL_ERRORZerror_text_from_codegetappend)r   r   r   r    resultZdmodeZctysZcvalsr"   ctycvalr%   Zshowvaler   r   r   r   N   s*    



r   c                 C   s   t   t dtj| j | jf  t d| j| j| jf  t d| j  t d| j	  t d| j
| j| jf  t d| j  | jrt dt| jt| jt| jf  tjst d| j| jf  t   d S )	NzBIFF version: %s; datemode: %sz*codepage: %r (encoding: %s); countries: %rzLast saved by: %rzNumber of data sheets: %dz+Use mmap: %d; Formatting: %d; On demand: %dzRagged rows: %dzFORMATs: %d, FONTs: %d, XFs: %dz8Load time: %.2f seconds (stage 1) %.2f seconds (stage 2))r   r   Zbiff_text_from_numbiff_versionr(   ZcodepageencodingZ	countriesZ	user_namensheetsuse_mmapr   	on_demandr   lenformat_list	font_listZxf_listoptionssuppress_timingZload_time_stage_1Zload_time_stage_2)r   r   r   r   	bk_headerg   s,    
r>   c                 C   s<   t d tt| jD ] }| j| }|jd| dd qd S )NzFonts:z== Index %d ==   )headerindent)r   r   r9   r;   dump)r   xZfontr   r   r   
show_fontsz   s    
rD   c                 C   s~   t |  | jdk rtd d S | j}tdt|  |D ]@}|rX|jtjd|j d q8td|j|j	|j
|j|jf  q8d S )N2   z(Names not extracted in this BIFF versionzName list: %d entriesz"
=== Dump of name_obj_list[%d] ===)r@   z*[%d]	Name:%r macro:%r scope:%d
	result:%r
)r>   r4   r   Zname_obj_listr9   rB   sysstdout
name_indexnamemacroscoper0   )r   rB   ZnlistZnobjr   r   r   
show_names   s    
rL   c           	   
   C   s   |sd S |D ]v\}}}}t d|t||t|d |d f  t||D ]4}t||D ]$}t dt||| ||f  qZqLqd S )Nz%s label range %s:%s contains:r   z
    %s: %r)r   r   Zcellnamer   Z
cell_value)	r   ZlabstitleZrloZrhiZclochirxZcxr   r   r   print_labels   s      rP   c                 C   s   d}t | jD ]t}| |}|j}|j}|s0|rr|s@t|  d}td||j|j|j	f  t
||d t
||d | jr| | qd S )Nr   r   +sheet %d: name = %r; nrows = %d; ncols = %dZColRow)r   r6   sheet_by_indexZcol_label_rangesZrow_label_rangesr>   r   rI   nrowsncolsrP   r8   unload_sheet)r   hdrshxr   ZclabsZrlabsr   r   r   show_labels   s     
 rY     r   c                 C   s  t |  tjrHzttj}W n" tk
r>   | tjj	}Y nX |g}n
t
| j}|D ].}| |}|j|j }}t
|}t||}	td|t|j|j|jf  |r|rt|D ]F}
||
}|r||
|d   ||
|d   ||
|d  qt|	d D ]F}
|s<|
d dkr<|
dkr<td|
d f  t| ||
|| q|	rp|rpt| ||d || t  | jrV| | qVd S )Nz+sheet %d: name = %s; nrows = %d; ncols = %dr   i'  zdone %d rows)r>   r   sortedr   r<   Zonesheetint
ValueErrorZsheet_by_namenumberr   r6   rS   rT   rU   minr   rI   r   r   r)   r*   cellr&   r8   rV   )r   Znshowr!   rX   Zshxranger   rT   rU   r    Zanshowr   ncr   r   r   show   s@    




 rb   c           	      C   s   t |  t| jD ]}| |}|j}td||j|j|jf  dddddddg}t|D ]L}t|	|D ]8}|
||}|dkst|||}||  d7  < qlqZtd|j td| t  | jr| | qd S )NrQ   r   r   zXF statsz
type stats)r>   r   r6   rS   rT   r   rI   rU   r   r   r,   AssertionErrorZ	cell_typeZ_xf_index_statsr8   rV   )	r   rX   r   rT   Z
type_statsr   r"   Zxfxr1   r   r   r   	count_xfs   s&    

 rd   c                 C   s0  dd l }dt }||}|jddddd |jdd	d
ddd |jddd
ddd |jddddd |jddd
ddd |jddd
ddd |jddddd |jddddd d! |jd"d#ddd$d! |jd%d&ddd'd! |jd(d)ddd*d! || \a}t|d+kr|d d,krn t|d-k r<|d.t|  |d }tt	d/d0}|d1krxt	j
|d+ tjd2 td |d3krt	|d+  td |d4krtd5|t	jf  td6tj td tjrtttjd7}ntj}tj}t	j}	|d8kr|}	n|dkrtd9|  tj|d:kB }
tj}|r@t  |d+d  D ]}t|D ]}td;|  |tjkr|d<|  |d+krt }|rtd=|d> zPt }t	j|tj ||	tj!|
tj"tj#d?}t }tj$std@|| f  W n t	j%k
rB } z$tdAt&|j'|f  W Y q\W 5 d }~X Y n t(k
rv   tdB t)j*tjdC td+ Y nR t+k
r } z2tdAt&|j'|f  t)j*tjdC W Y q\W 5 d }~X Y nX t }|dDkrt,| n|dEkrt-|d n|dFkrt-| n|dGkr$t-|d- n|dHkr:t-|dI n|dJkrRt-|ddK n|dLkrnt,| t.| nj|dMkrt/| nV|dNkrt/|d+dO n>|dPkrt0| n*|dQkrt1| ntdR|  td+ ~|d+krt }|rtdS|dT|d> tj$s\t }tdU|| f  q\qLd S )VNr   z/
%prog [options] command [input-file-patterns]
z-lz--logfilenamer'   zcontains error messages)defaulthelpz-vz--verbosityr\   z-level of information and diagnostics provided)r-   re   rf   z-mz--mmapz41: use mmap; 0: don't use mmap; -1: accept heuristicz-ez
--encodingzencoding overridez-fz--formattingz10 (default): no fmt info
1: fmt info (all cells)
z-gz--gczQ0: auto gc enabled; 1: auto gc disabled, manual collect after each file; 2: no gcz-sz
--onesheetz-restrict output to this sheet (name or index)z-uz--unnumbered
store_truez)omit line numbers or offsets in biff_dump)actionre   rf   z-dz--on-demandz,load sheets on demand instead of all at oncez-tz--suppress-timingz*don't print timings (diffs are less messy)z-rz--ragged-rowsz$open_workbook(..., ragged_rows=True)r   )version   z"Expected at least 2 args, found %dZ__VERSION__zunknown; before 0.5Z	biff_dump)
unnumberedZ
biff_countrj   zxlrd: %s, from %szPython:w)r   r   z9Unexpected value (%r) for mmap option -- assuming default)xfcz
=== File: %s ===z
=== File: %s ===
zGC before open:zunreachable objects)	verbositylogfiler7   Zencoding_overrider   r8   r   zOpen took %.2f secondsz*** Open failed: %s: %sz*** KeyboardInterrupt ***)filerW   ovrb   Z2rowsZ3rows   Zbench)r!   ZfontsnamesZ	name_dump)rB   labelsrn   z*** Unknown command <%s>zGC post cmd:z->z
command took %.2f seconds
)2optparsecmd_docOptionParser
add_option
parse_argsr<   r9   errorgetattrr   rB   rl   rF   exitZcount_recordsr   __file__rj   Zlogfilenamer   openrG   mmapZUSE_MMAPZ
formattinggcdisableglobr   ZcollecttimeZopen_workbookro   r5   r8   r   r=   Z	XLRDErrorr-   r   KeyboardInterrupt	traceback	print_excBaseExceptionr>   rb   rD   rL   rY   rd   )cmd_argsrv   usageZoparserargscmdZxlrd_versionrp   Zmmap_optZmmap_argZfmt_optZgc_modepatternfnameZn_unreachablet0r   t1r3   r   r   r   main   sb   
                   








 	


















r   hotshotz	XXXX.profr0   r   Zcalls   Zprofilezmain(av)z	YYYY.profZ
cumulative   )r   )rZ   r   )4
__future__r   rw   r<   r   r   rF   r   r   r   r   Zxlrd.timemachiner   r   objectr   Z
empty_cellZ	null_cellr&   r   r>   rD   rL   rP   rY   rb   rd   r   argvavlowerZfirstargr   Zhotshot.statsZprof_log_nameZProfileZprofZruncallr0   r   reprclosestatsloadZ
strip_dirsZ
sort_statsZprint_statsZcProfilerunZpstatsZStatspr   r   r   r   <module>   s`   

	
) 



