o
    h'                     @   s   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 d dlmZ d dl	m	Z	 d dl
Zd dlmZ d dlmZ d dlmZ dd	lmZ G d
d dZdS )    N)Image)BytesIO)tqdm)By)WebDriverWait)expected_conditions   )Tablec                   @   sn   e Zd Z																		d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S )GenerateTablecell      
   r      r   chrome  c                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|| _|| _	|| _
|| _|| _|	| _|
| _|| _|| _|| _|| _| jdkrKddlm} ddlm} nddlm} ddlm} | }|d |d ||d	| _d S )
Nr   r   )Chrome)ChromeOptions)Firefox)FirefoxOptionsz
--headlessz--no-sandbox)Zoptions)outputch_dict_pathen_dict_pathcell_box_typemin_rowmax_rowmin_colmax_colmax_txt_lenmin_txt_len
color_probcell_max_widthcell_max_heightmax_span_row_countmax_span_col_countmax_span_valuebrowerbrower_heightbrower_widthZselenium.webdriverr   r   r   r   add_argumentdriver)selfr   r   r   r   r   r   r   r   r#   r$   r%   r   r   r    r!   r"   r&   r(   r'   ZBrowerZOptionsZopts r,   /home/user/Coding/uni/python-cache-poisoning/cache-reproduction-tests/Temp/table-synthesis@1.0.0/table_synthesis/TableGeneration/GenerateTable.py__init__   s8   


zGenerateTable.__init__c              	   C   s  t j| jdd tt j| jdddd}tt|D ]}|  }|d u r&q|\}}}}}	| 	||\}}dt
jtjtj dd	}
d
|	||
}
t jt j| jddd t jt j| jddd t j| jd|
d }t j| jd|
d }t|ddd}|| W d    n1 sw   Y  |j|dd t jd|
d }| |||}|dtj|dd q|  |   d S )NT)exist_okzgt.txtzutf-8w)encodingmode r   )kz{}_{}_{}htmlZimgz.htmlz.jpg)X  r6   )Zdpiz{}
F)Zensure_ascii)osmakedirsr   openpathjoinr   rangegenerate_table
clip_whiterandomchoicesstringZascii_uppercaseZdigitsformatwriteZsavemake_ppstructure_labeljsondumpsclose)r+   Z	img_countZf_gtioutimhtml_content	structurecontensborderZoutput_file_nameZhtml_save_pathZimg_save_pathfZimg_file_name
label_infor,   r,   r-   gen_table_imgE   sN   zGenerateTable.gen_table_imgc                 C   s   t | j| j}t | j| j}z3t| j| j| j	||| j
| j| j| j| j| j| j| j}| \}}}}| ||\}}	||||	|fW S  tyU   dd l}
|
  Y d S    dd l}|  Y d S )Nr   )r?   randintr   r   r   r   r	   r   r   r   r   r   r#   r$   r%   r    r!   r"   Zcreatehtml_to_imgKeyboardInterruptsysexit	traceback	print_exc)r+   ZcolsZrowstableid_countrK   rL   rN   rJ   rM   rU   rW   r,   r,   r-   r=   r   s*   

zGenerateTable.generate_tablec                 C   sb   |dd|iid}g }|D ]}|d }| t||dd  d q||d d< | ||d	< |S )
NrL   tokens)filenamer5      r   )r[   bboxr5   cellsgt)appendlist#rebuild_html_from_ppstructure_label)r+   rL   bboxesZimg_pathdr_   r^   textr,   r,   r-   rD      s   z$GenerateTable.make_ppstructure_labelc                    s   ddl m  |d d d  }dd t|D }t|d d d |d d	 d d d D ] \}}|d rL fd
d|d D }d|}||d | q,d|}d|}|S )Nr   escaper5   rL   r[   c                 S   s   g | ]
\}}|d v r|qS ))z<td>>r,   ).0rH   tagr,   r,   r-   
<listcomp>   s    zEGenerateTable.rebuild_html_from_ppstructure_label.<locals>.<listcomp>r_   c                    s$   g | ]}t |d kr |n|qS )r]   )len)rj   tokenrg   r,   r-   rl      s    r3   r]   z+<html><body><table>{}</table></body></html>)r5   rh   copy	enumeratezipr;   insertrB   )r+   rP   Z	html_codeZ	to_insertrH   r   r,   rg   r-   rc      s$   .


z1GenerateTable.rebuild_html_from_ppstructure_labelc                 C   sT  |j \}}tdd |D }|d d d d df  }|d d d d df  }|d d d d df  }|d d d d df  }	td|tdd }td|tdd }t||tdd }t||	tdd }	|||||	g}|d d d d df  |8  < |d d d d df  |8  < t||D ]
\}
}|	 |
d< q||fS )Nc                 S   s   g | ]}|d  qS )r   r,   )rj   xr,   r,   r-   rl      s    z,GenerateTable.clip_white.<locals>.<listcomp>r   r]   r   r   )
sizenpZarrayminmaxr?   rR   croprr   tolist)r+   rJ   rd   r0   hr^   xminyminxmaxymaxitemZboxr,   r,   r-   r>      s    
zGenerateTable.clip_whitec              
   C   s.  | j d|  | j   | j j| j| jdd | j  }|d |d }}g }t|D ]N}t| j d	t
tjt|f}|j }	t|	}
|j}|j}|d }|d }t|d | }t|d | }||
|	||g||g||g||ggg q,| j  }tt|d	}|d
d
||f}||fS )zconverts html to imagezdata:text/html;charset=utf-8,Zcurrent)widthheightZwindowHandler   r   r   rt   yZRGBr   )r*   getZmaximize_windowZset_window_sizer(   r'   Zget_window_sizer<   r   ZuntilECZpresence_of_element_locatedr   ZIDstrrf   striprn   locationru   intra   Zget_screenshot_as_pngr   r9   r   Zconvertry   )r+   rK   rZ   Zwindow_sizeZ
max_heightZ	max_widthrM   ideZtxtZlentextZlocZsize_r|   r}   r~   r   ZpngrJ   r,   r,   r-   rS      sD   



zGenerateTable.html_to_imgc                 C   s   | j   | j   d S )N)r*   Zstop_clientquit)r+   r,   r,   r-   rG      s   
zGenerateTable.closeN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname__r.   rQ   r=   rD   rc   r>   rS   rG   r,   r,   r,   r-   r
      s2    
3-%r
   )rE   r7   rU   r?   rA   ZPILr   ior   r   Znumpyrv   Zselenium.webdriver.common.byr   Zselenium.webdriver.support.uir   Zselenium.webdriver.supportr   r   ZTableGeneration.Tabler	   r
   r,   r,   r,   r-   <module>   s    