o
    -h;                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZmZmZ G d	d
 d
eZdS )    N)StringIO)chain)AnyDictListOptionalSetTextIO   )utils)T_obj
T_obj_list)CSV_COLS_REQUIREDCSV_COLS_TO_PREPEND
Serializerc                   @   s4  e Zd Zg dZedeee  fddZede	e
ef fddZ	d3deee
  de	e
ef fd	d
Zd3deee
  ddfddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefd d!Zedefd"d#Zedefd$d%Zedefd&d'Zedefd(d)Z						d4d*ee deee
  d+eee
  d,eee
  d-ee d.ee dee
 fd/d0Z					d5d*ee deee
  d-ee d+eee
  d,eee
  dee
 fd1d2Z dS )6	Container)_rect_edges_curve_edges_edges_objectsreturnc                 C      t NNotImplementedErrorself r   M/var/www/html/govbot/env/lib/python3.10/site-packages/pdfplumber/container.pypages      zContainer.pagesc                 C   r   r   r   r   r   r   r   objects   r    zContainer.objectsNobject_typesc                 C   r   r   r   )r   r"   r   r   r   to_dict   s   zContainer.to_dict
propertiesc                 C   s4   |d u r| j n|}|D ]}t| |rt| | qd S r   )cached_propertieshasattrdelattr)r   r$   propspr   r   r   flush_cache   s   

zContainer.flush_cachec                 C      | j dg S )Nrectr!   getr   r   r   r   rects"      zContainer.rectsc                 C   r+   )Nliner-   r   r   r   r   lines&   r0   zContainer.linesc                 C   r+   )Ncurver-   r   r   r   r   curves*   r0   zContainer.curvesc                 C   r+   )Nimager-   r   r   r   r   images.   r0   zContainer.imagesc                 C   r+   )Ncharr-   r   r   r   r   chars2   r0   zContainer.charsc                 C   r+   )Ntextboxverticalr-   r   r   r   r   textboxverticals6   r0   zContainer.textboxverticalsc                 C   r+   )Ntextboxhorizontalr-   r   r   r   r   textboxhorizontals:   r0   zContainer.textboxhorizontalsc                 C   r+   )Ntextlineverticalr-   r   r   r   r   textlineverticals>   r0   zContainer.textlineverticalsc                 C   r+   )Ntextlinehorizontalr-   r   r   r   r   textlinehorizontalsB   r0   zContainer.textlinehorizontalsc                 C   4   t | dr| jS dd | jD }tt| | _| jS )Nr   c                 s       | ]}t |V  qd S r   )r   rect_to_edges.0rr   r   r   	<genexpr>J       z'Container.rect_edges.<locals>.<genexpr>)r&   r   r/   listr   )r   rect_edges_genr   r   r   
rect_edgesF   
   
zContainer.rect_edgesc                 C   rA   )Nr   c                 s   rB   r   )r   curve_to_edgesrD   r   r   r   rG   R   rH   z(Container.curve_edges.<locals>.<genexpr>)r&   r   r4   rI   r   )r   curve_edges_genr   r   r   curve_edgesN   rL   zContainer.curve_edgesc                 C   s:   t | dr| jS tttj| j}|| j | j | _| jS )Nr   )	r&   r   rI   mapr   line_to_edger2   rK   rO   )r   
line_edgesr   r   r   edgesV   s
   
zContainer.edgesc                 C   "   dt dtfdd}tt|| jS )Nxr   c                 S      t | d dkS )NorientationhboolrU   r   r   r   test`      z(Container.horizontal_edges.<locals>.testr   rZ   rI   filterrS   r   r\   r   r   r   horizontal_edges^      zContainer.horizontal_edgesc                 C   rT   )NrU   r   c                 S   rV   )NrW   vrY   r[   r   r   r   r\   g   r]   z&Container.vertical_edges.<locals>.testr^   r`   r   r   r   vertical_edgese   rb   zContainer.vertical_edgesstreaminclude_attrsexclude_attrs	precisionindentc           	      C   sH   |  |}t|||d|}|d u rtj||dS tj|||d d S )Nrh   rf   rg   )ri   )r#   r   	serializejsondumpsdump)	r   re   r"   rf   rg   rh   ri   data
serializedr   r   r   to_jsonl   s   

zContainer.to_jsonc                 C   s4  |d u r
t  }d}nd}|d u rt| j dg }g }t }| jd u r'| gn| j}	t|||d}
|	D ]+}|D ]&}t||d }t|r]||
	|7 }dd |d 
 D }|t|}q7q3tttt|ttt   }ttt|
j| }tj||d	tjd
d}|  || |r|d | S d S )NTFannotrj   sc                 S   s    g | ]\}}t |tur|qS r   )typedict)rE   krc   r   r   r   
<listcomp>   s     z$Container.to_csv.<locals>.<listcomp>r   ignore\)
fieldnamesextrasactionquoting
escapechar)r   rI   r!   keyssetr   r   getattrlenrk   itemsunionr   sortedr   r_   attr_filtercsv
DictWriterQUOTE_MINIMALwriteheader	writerowsseekread)r   re   r"   rh   rf   rg   	to_stringrp   fieldsr   
serializerpagetobjsnew_keysnon_req_colscolswr   r   r   to_csv   sP   

zContainer.to_csvr   )NNNNNN)NNNNN)!__name__
__module____qualname__r%   propertyr   r   r   r   r   strr   r!   r#   r*   r/   r2   r4   r6   r8   r:   r<   r>   r@   rK   rO   rS   ra   rd   r	   intrq   r   r   r   r   r   r      s    









r   )r   rl   ior   	itertoolsr   typingr   r   r   r   r   r	    r   _typingr   r   convertr   r   r   objectr   r   r   r   r   <module>   s     