o
    È·e%  ã                   @   sf   d dl Z d dlmZ d dlmZ d dlmZ dZdZdZ	dZ
d	Zd
ZdZdZdZG dd„ dejƒZdS )é    N)ÚUser)ÚInvalidCorsError)ÚhandlerÚ
CorsConfigÚCorsÚOriginsÚOriginÚMethodsÚMethodÚResponseHeadersÚResponseHeaderÚ	MaxAgeSecc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )r   z0Encapsulates the CORS configuration XML documentc                 C   sP   g | _ g | _g | _ttgttgttgt	g i| _
tttg| _d| _d | _d | _d S )Nr   )ÚcorsÚcollectionsÚelementsÚORIGINSÚORIGINÚMETHODSÚMETHODÚHEADERSÚHEADERÚ	MAXAGESECÚlegal_collectionsÚlegal_elementsÚparse_levelÚ
collectionÚelement)Úself© r   úC/var/www/ideatree/venv/lib/python3.10/site-packages/boto/gs/cors.pyÚ__init__(   s   ü
zCors.__init__c                 C   s    | j |krtd|| j f ƒ‚dS )z#Verify parse level for a given tag.z"Invalid tag %s at parse level %d: N)r   r   )r   ÚtagÚlevelr   r   r   ÚvalidateParseLevelG   s
   
ÿÿzCors.validateParseLevelc                 C   sÞ   |t kr|  |d¡ |  jd7  _dS |tkr&|  |d¡ |  jd7  _dS || jv r=|  |d¡ |  jd7  _|| _dS || jv ri|  |d¡ | jdu rStd| ƒ‚|| j| j vrdtd|| jf ƒ‚|| _dS td| ƒ‚)	ú,SAX XML logic for parsing new element found.r   é   é   é   NúTag %s found outside collectionú#Tag %s not allowed in %s collectionzUnsupported tag )	ÚCORS_CONFIGr#   r   ÚCORSr   r   r   r   r   )r   ÚnameÚattrsÚ
connectionr   r   r   ÚstartElementM   s(   



ÿ
zCors.startElementc                 C   sv  |t kr|  |d¡ |  jd8  _dS |tkr0|  |d¡ |  jd8  _| j | j¡ g | _dS || jv rq|  |d¡ || jkrIt	d| j|f ƒ‚|  jd8  _| j| s`| j || 
¡ f¡ n	| j || jf¡ g | _d| _dS || jv rµ|  |d¡ | jdu r‡t	d| ƒ‚|| j| j vr˜t	d|| jf ƒ‚|| jkr¦t	d| j|f ƒ‚| j || 
¡ f¡ d| _dS t	d| ƒ‚)	r$   r%   r&   r'   z%Mismatched start and end tags (%s/%s)Nr(   r)   zUnsupported end tag )r*   r#   r   r+   r   Úappendr   r   r   r   Ústripr   r   r   )r   r,   Úvaluer.   r   r   r   Ú
endElementf   sF   


ÿ



ÿ
ÿ
zCors.endElementc                 C   sà   dt  d }| jD ]\}|dt d 7 }|D ]G\}}|dusJ ‚|d| d 7 }t|tƒr1||7 }n#|D ] \}}|dus=J ‚|dusCJ ‚|d| d | d | d 7 }q3|d| d 7 }q|dt d 7 }q	|dt  d 7 }|S )z3Convert CORS object into XML string representation.ú<ú>Nz</)r*   r   r+   Ú
isinstanceÚstr)r   Úsr   r   Úelements_or_valuer,   r2   r   r   r   Úto_xml•   s    


"zCors.to_xmlN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r#   r/   r3   r:   r   r   r   r   r   &   s    /)ÚtypesÚboto.gs.userr   Úboto.exceptionr   Úxml.saxr   r*   r+   r   r   r   r   r   r   r   ÚContentHandlerr   r   r   r   r   Ú<module>   s   