o
    gM                     @   s^   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ dd	 ZG d
d dZdS )z Read worksheets on-demand
   )	Worksheet    )ReadOnlyCell
EMPTY_CELL)get_column_letter)WorkSheetParser)DefinedNameDictc                 C   s   t | g }| S N)r   parse_dimensions)sourceparser r   W/var/www/html/api-tag/env/lib/python3.10/site-packages/openpyxl/worksheet/_read_only.pyread_dimension   s   
r   c                   @   s   e Zd ZdZdZd ZZejZej	Z	ej
Z
ejZejZejZdd Zdd Zdd Zdd
dZdddZdd ZdddZdd Zdd Zedd Zedd Zedd Zedd ZdS ) ReadOnlyWorksheetr   Nc                 C   s8   || _ || _d| _d | _|| _|| _|   t | _d S )Nvisible)	parenttitlesheet_state_current_row_worksheet_path_shared_strings	_get_sizer   defined_names)selfparent_workbookr   worksheet_pathshared_stringsr   r   r   __init__#   s   zReadOnlyWorksheet.__init__c                 C   sF   |   }t|g }| }|  |d ur!|\| _| _| _| _d S d S r	   )_get_sourcer   r
   close_min_column_min_row_max_column_max_row)r   srcr   
dimensionsr   r   r   r   .   s   
zReadOnlyWorksheet._get_sizec                 C   s   | j j| jS )z0Parse xml source on demand, must close after use)r   _archiveopenr   r   r   r   r   r   7   s   zReadOnlyWorksheet._get_sourceFc              	   c   s6   t }|rd}|p| j}|p| j}g }|dur |f|d |  }|}d}	|  P}
t|
| j| jj| jj| jj	| jj
d}| D ]0\}	}|durN|	|krN n#t||	D ]	}|d7 }|V  qS||	krp| ||||}|d7 }|V  q@W d   n1 s{w   Y  |dur||	k rt||d D ]	}|V  qdS dS dS )zt
        The source worksheet file may have columns or rows missing.
        Missing cells will be created.
        Nr   )	data_onlyepochdate_formatstimedelta_formats)r   
max_columnmax_rowr   r   r   r   r*   r+   _date_formats_timedelta_formatsparserange_get_row)r   min_colmin_rowmax_colr/   values_onlyfiller	empty_rowcounteridxr%   r   row_r   r   r   _cells_by_row<   sH   


zReadOnlyWorksheet._cells_by_rowc           
      C   s   |s|sdS |p|d d }|d | }t g| }|r dg| }|D ](}|d }||  kr2|krJn q"|| }	|d ||	< |sJt| fi |||	< q"t|S )zT
        Make sure a row contains always the same number of cells or values
        r   columnr   Nvalue)r   r   tuple)
r   r=   r5   r7   r8   	row_widthnew_rowcellr;   r<   r   r   r   r4   i   s    

zReadOnlyWorksheet._get_rowc                 C   s*   |  ||||D ]
}|r|d   S qtS )z4Cells are returned by a generator which can be emptyr   )r?   r   )r   r=   rA   r   r   r   	_get_cell   s
   zReadOnlyWorksheet._get_cellc                 C   sL   t | j| jgs|r|   ntdt| j | j dt| j | j S )Nz9Worksheet is unsized, use calculate_dimension(force=True):)allr.   r/   _calculate_dimension
ValueErrorr   
min_columnr6   )r   forcer   r   r   calculate_dimension   s
   
&z%ReadOnlyWorksheet.calculate_dimensionc                 C   s<   d}| j D ]}|s
q|d }t||j}q|j| _|| _dS )z
        Loop through all the cells to get the size of a worksheet.
        Do this only if it is explicitly requested.
        r   r@   N)rowsmaxrA   r=   r$   r#   )r   r7   rrF   r   r   r   rJ      s   

z&ReadOnlyWorksheet._calculate_dimensionc                 C   s   d | _ | _dS )z
        Remove worksheet dimensions if these are incorrect in the worksheet source.
        NB. This probably indicates a bug in the library or application that created
        the workbook.
        N)r$   r#   r)   r   r   r   reset_dimensions   s   z"ReadOnlyWorksheet.reset_dimensionsc                 C      | j S r	   )r"   r)   r   r   r   r6         zReadOnlyWorksheet.min_rowc                 C   rS   r	   )r$   r)   r   r   r   r/      rT   zReadOnlyWorksheet.max_rowc                 C   rS   r	   )r!   r)   r   r   r   rL      rT   zReadOnlyWorksheet.min_columnc                 C   rS   r	   )r#   r)   r   r   r   r.      rT   zReadOnlyWorksheet.max_column)F)r   NF)__name__
__module____qualname__r!   r"   r#   r$   r   rF   	iter_rowsvaluesrO   __getitem____iter__r   r   r   r?   r4   rG   rN   rJ   rR   propertyr6   r/   rL   r.   r   r   r   r   r      s6    	

-
		


r   N)__doc__	worksheetr   openpyxl.cell.read_onlyr   r   openpyxl.utilsr   _readerr   openpyxl.workbook.defined_namer   r   r   r   r   r   r   <module>   s   