
    fh                         d dl mZ d dlm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mZ d dlmZ d dlmZmZmZ dd	Zd
 ZddlmZ  G d de          Z G d de          ZdS )    )defaultdictchain)
itemgetter)Serialisable)BoolNoneSetStringSequenceAliasIntegerConvertible)
NestedText)rows_from_rangecoordinate_to_tupleget_column_letter c           	         t          |          }d | D             }t          t                     }t          |t          d                    D ] \  }}||                             |           !|                                D ]r\  }} t          |          }d}t          |           dk    rd}|                    |t          |           |t          |                     }|                    |           sd                    |          S )ax   Collapse a collection of cell co-ordinates down into an optimal
        range or collection of ranges.

        E.g. Cells A1, A2, A3, B1, B2 and B3 should have the data-validation
        object applied, attempt to collapse down to a single range, A1:B3.

        Currently only collapsing contiguous vertical ranges (i.e. above
        example results in A1:A3 B1:B3).
    c              3   4   K   | ]}t          |          V  d S N)r   ).0cells     X/var/www/histauto/venv/lib/python3.11/site-packages/openpyxl/worksheet/datavalidation.py	<genexpr>z*collapse_cell_addresses.<locals>.<genexpr>(   s+      >>%d++>>>>>>       )keyz{0}{1}:{2}{3}z{0}{1} )listr   sortedr   appenditemsr   lenformatminmaxjoin)	cellsinput_rangesranges
raw_coordsgrouped_coordsrowcolfmtrs	            r   collapse_cell_addressesr1      s    ,F ?>>>>J !&&N::a==999 ( (Ss""3'''' %**,,  
U$$u::??CJJsCJJSZZ88a88Fr   c                     d |                                  D             }d |D             }t          t          |           S )z
    Expand cell ranges to a sequence of addresses.
    Reverse of collapse_cell_addresses
    Eg. converts "A1:A2 B1:B2" to (A1, A2, B1, B2)
    c              3   4   K   | ]}t          |          V  d S r   )r   )r   rss     r   r   z%expand_cell_ranges.<locals>.<genexpr>B   s*      ??BOB??????r   c              3   (   K   | ]}t          | V  d S r   r   )r   r-   s     r   r   z%expand_cell_ranges.<locals>.<genexpr>C   s&      ))SUC[))))))r   )splitsetr   )range_stringrowsr(   s      r   expand_cell_rangesr:   ;   sI     @?,*<*<*>*>???D))D)))Eue}r   r   )MultiCellRangec                       e Zd ZdZ ee          Z ed          Z ed          Z	 e
d          Z ed          Z e
d          Z e
d          Z e
d          Z ed          Z ed          Z ed          Z ed          Z ed          Z ede          Z ede          Z ed	
          Z ed
          Z ed
          Z ed
          Z ed          Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ d Z!d Z"dS )DataValidationdataValidationexpected_typesqrefT
allow_noneshowDropDown
allowBlank)rC   r@   )wholedecimalr   datetime
textLengthcustom)values)stopwarninginformation)	noControloffondisabledhiraganafullKatakanahalfKatakana	fullAlpha	halfAlpha
fullHangul
halfHangul)between
notBetweenequalnotEquallessThanlessThanOrEqualgreaterThangreaterThanOrEqualtypeNFr   c                     || _         || _        || _        || _        || _        || _        ||}|| _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        d S r   )rA   rD   imeModeoperatorformula1formula2rE   showErrorMessageshowInputMessagerc   promptTitle
errorStyleerrorprompt
errorTitle)selfrc   rg   rh   ri   rj   rD   rE   rA   rk   rl   rm   rn   ro   re   rf   allow_blanks                    r   __init__zDataValidation.__init__j   s    $ 
(   "$J$ 0 0	&$
$r   c                 T    t          |d          r|j        }| xj        |z  c_        dS )z0Adds a cell or cell coordinate to this validator
coordinateNhasattrrt   rA   rp   r   s     r   addzDataValidation.add   s/    4&& 	#?D

d



r   c                 B    t          |d          r|j        }|| j        v S )Nrt   ru   rw   s     r   __contains__zDataValidation.__contains__   s(    4&& 	#?Dtz!!r   )NNNFFFFr   NNNNNNNN)#__name__
__module____qualname__tagnamer   r;   rA   r   r(   r*   r   rD   hide_drop_downrj   ri   rE   rq   r
   ro   rm   rk   rn   r   strrg   rh   r	   rc   rl   re   rf   validation_typerr   rx   rz   r   r   r   r=   r=   J   s       GKn555EE'NNEU7^^F44(((LU>**Ntt,,,tt,,,&&&J%%%KT***JF%%%E&d+++KV&&&FzT===HzT===H7 3 4 4 4D BCCCJg : ; ; ;G w c d d dHeFmmO "'"'#!!  !!"% "% "% "%J  " " " " "r   r=   c                        e Zd ZdZ ed          Z ed          Z ed          Z e	e
          ZdZdZ	 	 	 	 	 dd	Zed
             Zd Zd Zd fd	Z xZS )DataValidationListdataValidationsTrB   r?   )r>   )disablePromptsxWindowyWindowcountNr   c                 >    || _         || _        || _        || _        d S r   )r   r   r   r>   )rp   r   r   r   r   r>   s         r   rr   zDataValidationList.__init__   s(     -,r   c                      t          |           S r   )r#   rp   s    r   r   zDataValidationList.count   s    4yyr   c                 *    t          | j                  S r   )r#   r>   r   s    r   __len__zDataValidationList.__len__   s    4&'''r   c                 :    | j                             |           d S r   )r>   r!   )rp   dvs     r   r!   zDataValidationList.append   s    ""2&&&&&r   c                     | j         }d | j         D             | _         t                                          |          }|| _         |S )zC
        Need to skip validations that have no cell ranges
        c                 :    g | ]}t          |j                  |S r   )boolrA   )r   r0   s     r   
<listcomp>z.DataValidationList.to_tree.<locals>.<listcomp>   s%    OOOQagOqOOOr   )r>   superto_tree)rp   r~   r*   xml	__class__s       r   r   zDataValidationList.to_tree   sH     $OO$*=OOOggoog&&$
r   )NNNNr   r   )r{   r|   r}   r~   r   r   r   r   r   r   r=   r>   __elements__	__attrs__rr   propertyr   r   r!   r   __classcell__)r   s   @r   r   r      s        GTT***Ng&&&Gg&&&GXN;;;N&LAI !% "
- 
- 
- 
-   X( ( (' ' '         r   r   N)r   )collectionsr   	itertoolsr   rf   r   !openpyxl.descriptors.serialisabler   openpyxl.descriptorsr   r	   r
   r   r   r   r   openpyxl.descriptors.nestedr   openpyxl.utilsr   r   r   r1   r:   
cell_ranger;   r=   r   r   r   r   <module>r      s   $ # # # # #             : : : : : :                  3 2 2 2 2 2            B	 	 	 ' & & & & &O" O" O" O" O"\ O" O" O"d. . . . . . . . . .r   