ó
è?F[c           @   s   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 d e j f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   User(   t   InvalidCorsError(   t   handlert
   CorsConfigt   Corst   Originst   Origint   Methodst   Methodt   ResponseHeaderst   ResponseHeadert	   MaxAgeSecc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s0   Encapsulates the CORS configuration XML documentc         C   sz   g  |  _  g  |  _ g  |  _ i t g t 6t g t 6t g t 6g  t	 6|  _
 t t t g |  _ d |  _ d  |  _ d  |  _ d  S(   Ni    (   t   corst   collectionst   elementst   ORIGINt   ORIGINSt   METHODt   METHODSt   HEADERt   HEADERSt	   MAXAGESECt   legal_collectionst   legal_elementst   parse_levelt   Nonet
   collectiont   element(   t   self(    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyt   __init__(   s    			


		c         C   s/   |  j  | k r+ t d | |  j  f ƒ ‚ n  d S(   s#   Verify parse level for a given tag.s"   Invalid tag %s at parse level %d: N(   R   R   (   R   t   tagt   level(    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyt   validateParseLevelG   s    c         C   s)  | t  k r. |  j | d ƒ |  j d 7_ n÷ | t k r\ |  j | d ƒ |  j d 7_ nÉ | |  j k r– |  j | d ƒ |  j d 7_ | |  _ n | |  j k r|  j | d ƒ |  j d k r× t d | ƒ ‚ n  | |  j |  j k r	t d | |  j f ƒ ‚ n  | |  _	 n t d | ƒ ‚ d S(	   s,   SAX XML logic for parsing new element found.i    i   i   i   s   Tag %s found outside collections#   Tag %s not allowed in %s collections   Unsupported tag N(
   t   CORS_CONFIGR    R   t   CORSR   R   R   R   R   R   (   R   t   namet   attrst
   connection(    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyt   startElementM   s&    c         C   s  | t  k r. |  j | d ƒ |  j d 8_ nÓ| t k rx |  j | d ƒ |  j d 8_ |  j j |  j ƒ g  |  _ n‰| |  j k r+|  j | d ƒ | |  j k rÂ t	 d |  j | f ƒ ‚ n  |  j d 8_ |  j | sý |  j j | | j
 ƒ  f ƒ n |  j j | |  j f ƒ g  |  _ d |  _ nÖ | |  j k rñ|  j | d ƒ |  j d k rlt	 d | ƒ ‚ n  | |  j |  j k ržt	 d | |  j f ƒ ‚ n  | |  j k rÉt	 d |  j | f ƒ ‚ n  |  j j | | j
 ƒ  f ƒ d |  _ n t	 d | ƒ ‚ d S(	   s,   SAX XML logic for parsing new element found.i   i   i   s%   Mismatched start and end tags (%s/%s)s   Tag %s found outside collections#   Tag %s not allowed in %s collections   Unsupported end tag N(   R!   R    R   R"   R   t   appendR   R   R   R   t   stripR   R   R   R   (   R   R#   t   valueR%   (    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyt
   endElementf   s@    	c         C   s"  d t  d } xû |  j D]ð } | d t d 7} xÃ | D]» \ } } | d k	 sU t ‚ | d | d 7} t | t ƒ rƒ | | 7} n] xZ | D]R \ } } | d k	 s¨ t ‚ | d k	 sº t ‚ | d | d | d | d 7} qŠ W| d | d 7} q7 W| d t d 7} q W| d t  d 7} | S(   s3   Convert CORS object into XML string representation.t   <t   >s   </N(   R!   R   R"   R   t   AssertionErrort
   isinstancet   str(   R   t   sR   R   t   elements_or_valueR#   R)   (    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyt   to_xml•   s     &(   t   __name__t
   __module__t   __doc__R   R    R&   R*   R2   (    (    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyR   &   s   				/(   t   typest   boto.gs.userR    t   boto.exceptionR   t   xml.saxR   R!   R"   R   R   R   R   R   R   R   t   ContentHandlerR   (    (    (    s+   lib/python2.7/site-packages/boto/gs/cors.pyt   <module>   s   