ó
f#ñ]c           @  sÌ  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z d d l	 m
 Z
 d d l Z e j e ƒ Z d d „ Z d e j j j f d „  ƒ  YZ d	 „  Z d
 „  Z d e j j e j j j f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e k rÈd d l" Z" d Z# d e$ e" j% ƒ k  r³e" j% d Z# n  e e& e# ƒ ƒ Z' n  d S(   s<  This module contains support for a DOM tree representation from an XML
document using a SAX parser.

This functionality exists because we need a DOM interface to generate the
binding classses, but the Python C{xml.dom.minidom} package does not support
location information.  The SAX interface does, so we have a SAX content
handler which converts the SAX events into a DOM tree.

This is not a general-purpose DOM capability; only a small subset of the DOM
interface is supported, and only for storing the XML information, not for
converting it back into document format.
iÿÿÿÿ(   t   print_functionN(   t   sixi    c   	   	   C  sš  d | } t  j j j |  j k r2t d | |  j ƒ  |  t j j	 |  j
 ƒ t |  j ƒ f ƒ t j j j |  ƒ j ƒ  } t d | d j g  | j ƒ  D]" \ } } d | | j ƒ  f ^ q” ƒ f ƒ xC t j |  j ƒ D]/ \ } } t d | t j j	 | ƒ | f ƒ q× Wx‰ |  j D] } t | | d ƒ qWnd t  j j j |  j k rMnI t  j j j |  j k r‚t d ƒ t |  j | ƒ n t d	 |  j f ƒ d
 S(   s%   Utility function to print a DOM tree.t    s$   %sElement[%d] %s %s with %d childrens   %s%ss    ; s   %s=%ss   %s %s=%si   s   Document nodes   UNRECOGNIZED %sN(   t   xmlt   domt   Nodet   ELEMENT_NODEt   nodeTypet   printt   _indexInParentt   pyxbt	   namespacet   ExpandedNamet   namet   lent
   childNodest   NamespaceContextt   GetNodeContextt   inScopeNamespacest   joint   itemst   uriR   t	   iteritemst
   attributest   _DumpDOMt	   TEXT_NODEt   DOCUMENT_NODEt
   firstChild(	   t   nt   deptht   pfxt   inst   _kt   _vt   kt   vt   cn(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   '   s    
;L'
t   _DOMSAXHandlerc           B  sA   e  Z d  Z d „  Z d Z d „  Z d „  Z d „  Z d „  Z	 RS(   s9   SAX handler class that transforms events into a DOM tree.c         C  s   |  j  S(   s4   The document that is the root of the generated tree.(   t   _DOMSAXHandler__document(   t   self(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   document?   s    c         C  s/   t  t |  ƒ j ƒ  t d |  j ƒ  ƒ |  _ d  S(   Nt   namespace_context(   t   superR%   t   startDocumentt   Documentt   namespaceContextR&   (   R'   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR+   D   s    c         C  sU   |  j  ƒ  j ƒ  } d t | ƒ k  rQ | d j s7 t ‚ |  j j | d j ƒ n  d  S(   Ni    (   t   elementStatet   contentR   t   maybe_elementt   AssertionErrorR&   t   appendChildt   item(   R'   R/   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   endDocumentH   s    c   
      C  s£   t  t |  ƒ j | | | ƒ \ } } } } t ƒ  | _ xf | j ƒ  D]X } t j j | ƒ } | j	 | ƒ }	 | j j
 t d | d | d |	 d | j ƒ  ƒ ƒ qC Wd  S(   Nt   expanded_nameR)   t   valuet   location(   R*   R%   t   startElementNSt   NamedNodeMapt   _DOMSAXHandler__attributest   getNamesR
   R   R   t   getValuet   _addItemt   AttrR7   (
   R'   R   t   qnamet   attrst
   this_statet   parent_statet   ns_ctxt   name_ent   attr_enR6   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR8   O   s    *c      	   C  sØ   t  t |  ƒ j | | ƒ } | j ƒ  } t d | d | j ƒ  d | j d | j ƒ  ƒ } xU | j ƒ  D]G } t	 | j
 t ƒ r | j | j
 ƒ qd | j t | j
 d | ƒƒ qd W| j ƒ  } | j | j ƒ  | d  ƒ d  S(   NR)   R5   R   R7   (   R*   R%   t   endElementNSR-   t   Elementt   expandedNameR:   R7   R/   t
   isinstanceR3   R   R2   t   Textt   parentStatet   addElementContentt   None(   R'   R   R?   RA   RC   t   elementt   infoRB   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRF   W   s    0 N(
   t   __name__t
   __module__t   __doc__R(   RM   R&   R+   R4   R8   RF   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR%   <   s   				c         K  sB   t  | d <t j j j |   } | j ƒ  } | j |  ƒ | j ƒ  S(   sæ  Parse a stream containing an XML document and return the DOM tree
    representing its contents.

    Keywords not described here are passed to L{pyxb.utils.saxutils.make_parser}.

    @param stream: An object presenting the standard file C{read} interface
    from which the document can be read.  The content should be data, not text.

    @keyword content_handler_constructor: Input is overridden to assign this a
    value of L{_DOMSAXHandler}.

    @rtype: C{xml.dom.Document}
    t   content_handler_constructor(   R%   R
   t   utilst   saxutilst   make_parsert   getContentHandlert   parseR(   (   t   streamt   kwt   saxert   handler(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRX   c   s
    
c         K  sC   |  } t  | t j ƒ r- | j t j ƒ } n  t t j | ƒ |  S(   sŸ   Parse a string holding an XML document and return the corresponding DOM
    tree.

    @param xml_text: the XML content to be parsed, in a text representation.(	   RI   R   t	   text_typet   encodeR
   t   _InputEncodingRX   t   iot   BytesIO(   t   xml_textRZ   t   xmld(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   parseStringx   s    R   c           B  sL  e  Z d  Z d „  Z e d „  ƒ Z d Z e d „  ƒ Z d Z	 e d „  ƒ Z
 d Z e d „  ƒ Z d Z e d „  ƒ Z d Z e d „  ƒ Z d Z e d	 „  ƒ Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z  d „  Z! RS(   s4   Base for the minimal DOM interface required by PyXB.c         K  sz  | j  d d  ƒ } | d  k	 r= t j j j j |  d | ƒn  | |  _ d  |  _ d  |  _	 g  |  _
 | d |  _ | j d ƒ |  _ | j d ƒ |  _ | j d ƒ } | d  k	 rf| |  _ | j ƒ  } | d  k	 r| j ƒ  d  k	 r| j ƒ  só t ‚ | j ƒ  |  _ n  | d  k	 r#| j ƒ  |  _ n  | j ƒ  |  _ |  j rWd |  j |  j f |  _ qf|  j |  _ n  |  j j |  ƒ d  S(   NR7   R)   R6   R   R5   s   %s:%s(   t   popRM   R
   RT   t   utilityt   Locatable_mixint   __init__t   _Node__nodeTypet   _Node__parentNodet   _Node__indexInParentt   _Node__childNodest   _Node__namespaceContextt   gett   _Node__valuet   _Node__attributest   _Node__expandedNameR   t   prefixt   isAbsentNamespaceR1   t   _Node__prefixR   t   _Node__namespaceURIt	   localNamet   _Node__localNamet   _Node__tagNamet   setNodeContext(   R'   t	   node_typeRZ   R7   t   ent   ns(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh   …   s0    						c         C  s
   |  j  ƒ  S(   N(   t	   _location(   t   _s(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   <lambda>    s    c         C  s   |  j  S(   N(   Rq   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   £   s    t    c         C  s   |  j  S(   N(   Rt   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   ¥   s    c         C  s   |  j  S(   N(   Rx   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   §   s    c         C  s   |  j  S(   N(   Ru   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   ©   s    c         C  s   |  j  S(   N(   Rw   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   «   s    c         C  s   |  j  S(   N(   Ro   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   ­   s    c         C  s   |  j  S(   N(   Rk   (   R'   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR	   ¯   s    c         C  s$   | t  |  j ƒ k  r  |  j | Sd  S(   N(   R   Rl   RM   (   R'   t   index(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   __childIfPresent±   s    c         C  s-   | j  |  t |  j ƒ ƒ |  j j | ƒ d  S(   N(   t   _setParentNodeR   Rl   t   append(   R'   t	   new_child(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR2   ¶   s    c         C  s   | |  _  | |  _ d  S(   N(   Rj   Rk   (   R'   t   parent_nodet   index_in_parent(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRƒ   º   s    	c         C  s"   |  j  d  k s t ‚ | |  _  d  S(   N(   Rp   RM   R1   (   R'   R   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   _setAttributes¾   s    c         C  s   |  j  S(   N(   Ri   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   Ã   s    c         C  s   |  j  S(   N(   Rj   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   Ä   s    c         C  s   |  j  d ƒ S(   Ni    (   t   _Node__childIfPresent(   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   Å   s    c         C  s   |  j  S(   N(   Rl   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   Æ   s    c         C  s   |  j  S(   N(   Rp   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   Ç   s    c         C  s   |  j  j |  j d ƒ S(   Ni   (   t
   parentNodeR‰   Rk   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   É   s    c         C  s   |  j  | | ƒ d  k	 S(   N(   t   getAttributeNodeNSRM   (   R'   t   ns_urit
   local_name(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   hasAttributeNSË   s    c         C  s   |  j  j t j j | | ƒ ƒ S(   N(   Rp   t   _getAttrR
   R   R   (   R'   RŒ   R   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR‹   Î   s    c         C  s)   |  j  | | ƒ } | d  k r" d S| j S(   NR€   (   R‹   RM   R6   (   R'   RŒ   R   t   rv(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   getAttributeNSÑ   s    N("   RP   RQ   RR   Rh   t   propertyR7   RM   Rq   t   _expandedNameRt   Rr   Rx   t   tagNameRu   t   namespaceURIRw   Rv   Ro   R6   R	   R‰   R2   Rƒ   Rˆ   Rp   R   RŠ   R   R   R   t   nextSiblingRŽ   R‹   R‘   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   ƒ   s<   								R,   c           B  s    e  Z d  Z d „  Z e j Z RS(   s"   Add the documentElement interface.c         K  s)   t  t |  ƒ j d t j j j |  d  S(   NRz   (   R*   R,   Rh   R   R   R   R   (   R'   RZ   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh   Ù   s    (   RP   RQ   RR   Rh   R   R   t   documentElement(    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR,   ×   s   	R>   c           B  s2   e  Z d  Z d „  Z e j Z e j Z e j Z	 RS(   s)   Add the nodeName and nodeValue interface.c         K  s)   t  t |  ƒ j d t j j j |  d  S(   NRz   (   R*   R>   Rh   R   R   R   t   ATTRIBUTE_NODE(   R'   RZ   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh   à   s    (
   RP   RQ   RR   Rh   R   R”   R   t   nodeNameR6   t	   nodeValue(    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR>   Þ   s
   			R9   c           B  sM   e  Z d  Z d Z d Z d „  Z e d „  ƒ Z d „  Z	 d „  Z
 d „  Z RS(   sL   Implement that portion of NamedNodeMap required to satisfy PyXB's
    needs.c         C  s)   t  t |  ƒ j ƒ  g  |  _ i  |  _ d  S(   N(   R*   R9   Rh   t   _NamedNodeMap__memberst   _NamedNodeMap__memberMap(   R'   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh   ì   s    	c         C  s   t  |  j ƒ S(   N(   R   R›   (   R~   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   ñ   s    c         C  s   |  j  | S(   N(   R›   (   R'   R   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR3   ò   s    c         C  sZ   t  j j j | ƒ d  k	 s! t ‚ |  j j | ƒ | j } | d  k	 rV | |  j	 | <n  d  S(   N(
   R
   R   R   R   RM   R1   R›   R„   R“   Rœ   (   R'   t   attrR{   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR=   õ   s
    !	c         C  s&   |  j  j | ƒ } | d  k	 r" | Sd  S(   N(   Rœ   Rn   RM   (   R'   R   R   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR   ü   s    N(   RP   RQ   RR   RM   R›   Rœ   Rh   R’   t   lengthR3   R=   R   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR9   æ   s   			RG   c           B  s#   e  Z d  „  Z e j Z e j Z RS(   c         K  s>   t  t |  ƒ j d t j j j |  |  j d  k	 s: t	 ‚ d  S(   NRz   (
   R*   RG   Rh   R   R   R   R   R   RM   R1   (   R'   RZ   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh     s    %(   RP   RQ   Rh   R   Rv   R”   R™   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRG     s   		t   _CharacterDatac           B  s   e  Z d  Z e j Z RS(   s-   Abstract base for anything holding text data.(   RP   RQ   RR   R   R6   t   data(    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRŸ   	  s   RJ   c           B  s   e  Z d  „  Z RS(   c         K  s/   t  t |  ƒ j d | d t j j j |  d  S(   NR6   Rz   (   R*   RJ   Rh   R   R   R   R   (   R'   t   textRZ   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh     s    (   RP   RQ   Rh   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRJ     s   t   Commentc           B  s   e  Z d  „  Z RS(   c         K  s/   t  t |  ƒ j d | d t j j j |  d  S(   NR6   Rz   (   R*   R¢   Rh   R   R   R   t   COMMENT_NODE(   R'   R¡   RZ   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyRh     s    (   RP   RQ   Rh   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyR¢     s   t   __main__s)   examples/tmsxtvd/tmsdatadirect_sample.xmli   ((   RR   t
   __future__R    t   loggingR`   t   xml.domR   t   pyxb.utils.saxutilsR
   t
   pyxb.utilsR   t   pyxb.namespacet	   getLoggerRP   t   _logR   RT   RU   t   BaseSAXHandlerR%   RX   Rd   R   R   Rf   Rg   R,   R>   t   objectR9   RG   RŸ   RJ   R¢   t   syst   xml_fileR   t   argvt   opent   doc(    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/pyxb/utils/saxdom.pyt   <module>   s4   '		(T