ó
h€
\c           @   sÜ   d  d l  Z  d  d l Z 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 d  d l m Z d  d l m Z d  d	 l m Z m Z e j e ƒ Z d
 g Z d
 e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   etree(   t
   exceptions(   t   UnexpectedElementError(   t
   qname_attr(   t   Nilt   NotSett   xsi_ns(   t   XmlParserContext(   t   Base(   t   create_prefixed_namet   max_occurs_itert   Elementc           B   sæ   e  Z d d  d  e d e d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 d „  ƒ Z d d  d  d „ Z e d d	 „ Z d
 „  Z d d d „ Z d d „ Z d „  Z d d „ Z d „  Z d „  Z d „  Z d e d „ Z RS(   i   c	   	      C   s²   | d  k r! t d |  j ƒ ‚ n  t | t j ƒ sE t j | ƒ } n  | rT | j n d  |  _ | |  _ | |  _	 | |  _
 | |  _ | |  _ | |  _ | |  _ | p¨ |  j |  _ d  S(   Ns   name cannot be None(   t   Nonet
   ValueErrort	   __class__t
   isinstanceR    t   QNamet	   localnamet   namet   qnamet   typet
   min_occurst
   max_occurst   nillablet	   is_globalt   defaultt	   attr_name(	   t   selfR   t   type_R   R   R   R   R   R   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   __init__   s    							c         C   sT   |  j  rI |  j  j r, d |  j |  j  j f Sd |  j |  j  j ƒ  f Sn  d |  j S(   Ns   %s(%s)s   %s()(   R   R   R   R   t	   signature(   R   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   __str__'   s
    	c         O   s1   |  j  | | Ž  } t | d ƒ r- |  | _ n  | S(   Nt	   _xsd_type(   R   t   hasattrt   _xsd_elm(   R   t   argst   kwargst   instance(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   __call__/   s    c         C   s   d |  j  j |  j |  j f S(   Ns   <%s(name=%r, type=%r)>(   R   t   __name__R   R   (   R   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   __repr__5   s    c         C   s.   | d  k	 o- |  j | j k o- |  j | j k S(   N(   R   R   t   __dict__(   R   t   other(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   __eq__9   s    c         C   s   t  |  j | ƒ S(   N(   R	   R   (   R   t   schema(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   get_prefixed_name?   s    c         C   s!   |  j  r g  S|  j r d  S|  j S(   N(   t   accepts_multiplet   is_optionalR   R   (   R   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   default_valueB   s
    		c         C   ss   t  j  |  ƒ } | r] t | t j ƒ s9 t j | ƒ } n  | j | _ | | _ | j | _ n  | | _ | | _	 | S(   N(
   t   copyR   R    R   R   R   R   R   R   R   (   R   R   R   R   t   new(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   cloneJ   s    			c         C   s|   | p t  ƒ  } t | t d ƒ ƒ } d } | rH | j | d t ƒ} n  | pT |  j } | j | | d | d | d |  j ƒS(   s´  Process the given xmlelement. If it has an xsi:type attribute then
        use that for further processing. This should only be done for subtypes
        of the defined type but for now we just accept everything.

        This is the entrypoint for parsing an xml document.

        :param xmlelement: The XML element to parse
        :type xmlelements: lxml.etree._Element
        :param schema: The parent XML schema
        :type schema: zeep.xsd.Schema
        :param allow_none: Allow none
        :type allow_none: bool
        :param context: Optional parsing context (for inline schemas)
        :type context: zeep.xsd.context.XmlParserContext
        :return: dict or None

        R   t   fail_silentlyt
   allow_nonet   contextt   schema_typeN(   R   R   R   R   t   get_typet   TrueR   t   parse_xmlelement(   R   t
   xmlelementR,   R5   R6   t   instance_typet   xsd_type(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   parseX   s    c         C   s   |  j  j | | p |  j | ƒ S(   N(   R   t   parse_kwargsR   (   R   R$   R   t   available_kwargs(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyR?   t   s    	c         C   s8  g  } d } xt  |  j ƒ D]ò } | s, Pn  t j | d j ƒ } | j r| |  j j r| | j |  j j k r| | j j r| Pn  | j	 |  j j	 k rÕ | j
 ƒ  }	 | d 7} |  j |	 | d t d | ƒ}
 | j |
 ƒ q | d k r|  j rt d | j |  j j f ƒ ‚ n  Pq W|  j s4| r+| d n d } n  | S(   s  Consume matching xmlelements and call parse() on each of them

        :param xmlelements: Dequeue of XML element objects
        :type xmlelements: collections.deque of lxml.etree._Element
        :param schema: The parent XML schema
        :type schema: zeep.xsd.Schema
        :param name: The name of the parent element
        :type name: str
        :param context: Optional parsing context (for inline schemas)
        :type context: zeep.xsd.context.XmlParserContext
        :return: dict or None

        i    i   R5   R6   s"   Unexpected element %r, expected %rN(   R
   R   R    R   t   tagt	   namespaceR   t   settingst   strictR   t   popleftR>   R9   t   appendR/   R   t   textR.   R   (   R   t   xmlelementsR,   R   R6   t   resultt   num_matchest   _unusedt   element_tagR;   t   item(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   parse_xmlelementsx   s0    	
	c         C   s   | s |  j  j g } n  | d k	 s* t ‚ |  j | | ƒ |  j ry t | t ƒ ry x7 | D] } |  j | | | ƒ qY Wn |  j | | | ƒ d S(   s~   Render the value(s) on the parent lxml.Element.

        This actually just calls _render_value_item for each value.

        N(	   R   R   R   t   AssertionErrort   validateR.   R   t   listt   _render_value_item(   R   t   parentt   valuet   render_patht   val(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   render¯   s    c         C   s  | t  k r; t j | |  j ƒ } | j t d ƒ d ƒ d S| d k sS | t k r› |  j r` d St j | |  j ƒ } |  j	 r— | j t d ƒ d ƒ n  d St j | |  j ƒ } t
 | d |  j ƒ } | |  j k rí | j j | | | | ƒ S|  j j | | d | ƒ S(   s+   Render the value on the parent lxml.Elementt   nilt   trueNR    (   R   R    t
   SubElementR   t   setR   R   R   R/   R   t   getattrR   R    RW   (   R   RS   RT   RU   t   elmt   nodeR=   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyRR   Á   s     		c         C   s$  |  j  rË t | t ƒ rË t | ƒ |  j k  rX t j d |  j t | ƒ f d | ƒ‚ nO |  j d k r§ t | ƒ |  j k r§ t j d |  j t | ƒ f d | ƒ‚ n  xv | D] } |  j | | ƒ q® WnU |  j	 r|  j
 r| d t f k rt j d |  j d | ƒ‚ n  |  j | | ƒ d S(   s    Validate that the value is valids<   Expected at least %d items (minOccurs check) %d items found.t   patht	   unboundeds;   Expected at most %d items (maxOccurs check) %d items found.s   Missing element %sN(   R.   R   RQ   t   lenR   R   t   ValidationErrorR   t   _validate_itemR/   R   R   R   R   (   R   RT   RU   RV   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyRP   Ù   s    $&c         C   s{   |  j  r | d  t f k r d  Sy |  j j | d t ƒWn; t j k
 rv } t j d |  j | j	 f d | ƒ‚ n Xd  S(   Nt   requireds   The element %s is not valid: %sR_   (
   R   R   R   R   RP   R9   R   Rb   R   t   message(   R   RT   RU   t   exc(    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyRc   ð   s    c         C   s   |  j  j ƒ  |  _  d  S(   N(   R   t   resolve(   R   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   resolve_typeû   s    c         C   s   |  j  ƒ  |  S(   N(   Rh   (   R   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyRg   þ   s    
c         C   s¶   d d l  m } |  j j s, | rA |  j rA |  j j | ƒ } n> |  j j | d t ƒ} | r t |  j | ƒ r d | } n  | r¡ d |  j | ƒ | f } n  |  j r² d | S| S(   Niÿÿÿÿ(   t   ComplexTypet
   standalones   {%s}s   %s(%s)s   %s[](	   t   zeep.xsdRi   R   R   R-   R   t   FalseR   R.   (   R   R,   Rj   Ri   RT   (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyR     s    	N(   R'   t
   __module__R   Rl   R   R   R&   R(   R+   R-   t   propertyR0   R3   R>   R?   RN   RW   RR   RP   Rc   Rh   Rg   R9   R   (    (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyR      s&   							7				(   R1   t   loggingt   lxmlR    t   zeepR   t   zeep.exceptionsR   t
   zeep.utilsR   t   zeep.xsd.constR   R   R   t   zeep.xsd.contextR   t   zeep.xsd.elements.baseR   t   zeep.xsd.utilsR	   R
   t	   getLoggerR'   t   loggert   __all__R   (    (    (    sN   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/xsd/elements/element.pyt   <module>   s   	