o
    b                     @   s   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZmZ eg dZdeZe d	eZd
Ze eZdZe eZe deeee j Z!dd Z"dd Z#G dd deZ$G dd deZ%dS )    N)Serialisable)
AliasTypedStringFloatIntegerBoolNoneSetSetSequence
Descriptor)safe_string)	Tokenizer)SHEETRANGE_RESHEET_TITLE)Z
Print_AreaZPrint_TitlesZCriteriaZ_FilterDatabaseZExtractZConsolidate_AreaZSheet_Title|z^_xlnm\.(?P<name>{0})z-(?P<cols>[$]?[a-zA-Z]{1,3}:[$]?[a-zA-Z]{1,3})z(?P<rows>[$]?\d+:[$]?\d+)z{0}{1}?,?{2}?c                 C   s2   t | j}tdd |D }|d|dfS )zg
    Extract rows and or columns from print titles so that they can be
    assigned to a worksheet
    c                 s   s2    | ]}|   D ]\}}|r
||fV  q
qd S N)	groupdictitems).0matchkv r   ]/var/www/secure340b-portal/env/lib/python3.10/site-packages/openpyxl/workbook/defined_name.py	<genexpr>/   s    
z'_unpack_print_titles.<locals>.<genexpr>rowscols)TITLES_REGEXfinditervaluedictget)defnscannerkwr   r   r   _unpack_print_titles)   s   r&   c                 C   s2   g }t | jD ]}|d}|r|| q|S )z
    Extract print area
    cells)r   r   r    groupappend)r#   newmZcoordr   r   r   _unpack_print_area5   s   

r,   c                   @   s  e Zd ZdZe ZeddZeddZeddZeddZ	eddZ
eddZeddZeddZeddZeddZeddZeddZeddZeddZe ZedZ																dddZedd	 Zed
d Zedd Zedd Zdd Z dS )DefinedNamedefinedNameT)
allow_none	attr_textNc                 C   sd   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _d S r   )namecomment
customMenudescriptionhelp	statusBarlocalSheetIdhiddenfunctionvbProcedurexlmfunctionGroupIdshortcutKeypublishToServerworkbookParameterr0   )selfr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r0   r   r   r   __init__X   s    
zDefinedName.__init__c                 C   s.   t d| j }|jd }|jdkr|jS |jS )N=r   ZOPERAND)r   r    r   typesubtype)r@   tokparsedr   r   r   rC   |   s
   

zDefinedName.typec                 c   sh    | j dkr0td| j }|jD ]!}|jdkr/t|j}|dp&|d}||dfV  qd S d S )NRANGErB   Z	notquotedquotedr'   )rC   r   r    r   rD   r   r   r(   )r@   rE   partr+   Z	sheetnamer   r   r   destinations   s   


zDefinedName.destinationsc                 C   s   t | j}|r|dS d S )Nr1   )RESERVED_REGEXr   r1   r(   )r@   r+   r   r   r   is_reserved   s   
zDefinedName.is_reservedc                 C   s   t d| jd uS )Nz
^\[\d+\].*)recompiler   r    r@   r   r   r   is_external   s   zDefinedName.is_externalc                 c   sL    | j D ]}|dkrqt| |}|d ur#|tv rd| }|t|fV  qd S )Nr0   z_xlnm.)	__attrs__getattrRESERVEDr   )r@   keyr   r   r   r   __iter__   s   

zDefinedName.__iter__)NNNNNNNNNNNNNNNN)!__name__
__module____qualname__tagnamer   r1   r2   r3   r4   r5   r6   r   r7   r   r8   r9   r:   r;   r<   r=   r>   r?   r   r0   r   r    rA   propertyrC   rJ   rL   rP   rU   r   r   r   r   r-   A   sZ    














$




r-   c                   @   sx   e Zd ZdZee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dZdd ZdddZdd ZdS )DefinedNameListZdefinedNames)expected_typer   c                 C   s
   || _ d S r   r.   )r@   r.   r   r   r   rA         
zDefinedNameList.__init__c                 C   sF   g }| j D ]}|jdv r|jdu rq|jdkrq|| q|| _ dS )zJ
        Strip invalid definitions and remove special hidden ones
        )z_xlnm.Print_Titlesz_xlnm.Print_AreaNz_xlnm._FilterDatabase)r.   r1   r7   r)   )r@   Zvalid_namesnr   r   r   _cleanup   s   


zDefinedNameList._cleanupc                 C   s.   | j D ]}|j|jkr|j|jkr dS qdS )zc
        Check for whether DefinedName with the same name and scope already
        exists
        TNr.   r1   r7   )r@   r#   dr   r   r   
_duplicate   s
   
zDefinedNameList._duplicatec                 C   sF   t |ts	td| |rtd| jd d  }|| || _d S )Nz You can only append DefinedNamesz7DefinedName with the same name and scope already exists)
isinstancer-   	TypeErrorrc   
ValueErrorr.   r)   )r@   r#   namesr   r   r   r)      s   



zDefinedNameList.appendc                 C   s
   t | jS r   )lenr.   rO   r   r   r   __len__   r^   zDefinedNameList.__len__c                 C   s*   | j D ]}|j|kr|jdu r dS qdS )z6
        See if a globaly defined name exists
        NTra   r@   r1   r#   r   r   r   __contains__   s
   
zDefinedNameList.__contains__c                 C   s    |  |}|std||S )z+
        Get globally defined name
        zNo definition called {0})r"   KeyErrorformatrj   r   r   r   __getitem__   s   
zDefinedNameList.__getitem__Nc                 C   s,   | j D ]}|j|kr|j|kr|  S qdS )zE
        Get the name assigned to a specicic sheet or global
        Nra   )r@   r1   scoper#   r   r   r   r"      s
   
zDefinedNameList.getc                 C   s   |  |std|dS )z0
        Delete a globally defined name
        zNo globally defined name {0}N)deleterl   rm   )r@   r1   r   r   r   __delitem__   s   
zDefinedNameList.__delitem__c                 C   s:   t | jD ]\}}|j|kr|j|kr| j|=  dS qdS )z@
        Delete a name assigned to a specific or global
        TN)	enumerater.   r1   r7   )r@   r1   ro   idxr#   r   r   r   rp      s   zDefinedNameList.deletec                    s    fdd| j D S )zH
        Provide a list of all names for a particular worksheet
        c                    s   g | ]
}|j  kr|jqS r   )r7   r1   )r   r#   ro   r   r   
<listcomp>
  s    z.DefinedNameList.localnames.<locals>.<listcomp>r]   )r@   ro   r   rt   r   
localnames  s   zDefinedNameList.localnames)r   r   )rV   rW   rX   rY   r   r-   r.   rA   r`   rc   r)   ri   rk   rn   r"   rq   rp   rv   r   r   r   r   r[      s    



	

	

r[   )&rM   Z!openpyxl.descriptors.serialisabler   Zopenpyxl.descriptorsr   r   r   r   r   r   r	   r
   r   r   Zopenpyxl.compatr   Zopenpyxl.formular   Zopenpyxl.utils.cellr   r   	frozensetrS   joinZ_namesrN   rm   rK   Z	COL_RANGEZCOL_RANGE_REZ	ROW_RANGEZROW_RANGE_REVERBOSEr   r&   r,   r-   r[   r   r   r   r   <module>   s(   0


f