ó
á³LKc           @   së   d  Z  d d l m Z d d l Z d d l Td d l Td 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 e e ƒ Z d e f d „  ƒ  YZ d d d „  ƒ  YZ d S(   sš  
The sax module contains a collection of classes that provide a
(D)ocument (O)bject (M)odel representation of an XML document.
The goal is to provide an easy, intuative interface for managing XML
documents.  Although, the term, DOM, is used above, this model is
B{far} better.

XML namespaces in suds are represented using a (2) element tuple
containing the prefix and the URI.  Eg: I{('tns', 'http://myns')}

iÿÿÿÿ(   t	   getLoggerN(   t   *(   t   Document(   t   Element(   t   Text(   t	   Attribute(   t   make_parsert   InputSourcet   ContentHandler(   t   feature_external_ges(   t   StringIOt   Handlerc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s    sax hanlder c         C   s   t  ƒ  g |  _ d  S(   N(   R   t   nodes(   t   self(    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyt   __init__/   s    c   	      C   s·   |  j  ƒ  } t t | ƒ d | ƒ} xi | j ƒ  D][ } t | ƒ } t | j | ƒ ƒ } t | | ƒ } |  j | | ƒ r q1 n  | j | ƒ q1 Wg  | _ | j | ƒ |  j	 | ƒ d  S(   Nt   parent(
   t   topR   t   unicodet   getNamest   getValueR   t	   mapPrefixt   appendt
   charbuffert   push(	   R   t   namet   attrsR   t   nodet   at   nt   vt	   attribute(    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyt   startElement2   s    	c         C   s}   t  } | j d k rB t | j ƒ r9 t | j ƒ | _ n  t } n7 | j d k ry | j } t | j ƒ | j | <t } n  | S(   Nt   xmlns(	   t   FalseR   t   lent   valueR   t   expnst   Truet   prefixt
   nsprefixes(   R   R   R   t   skipR&   (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyR   @   s    			c         C   s™   t  | ƒ } |  j ƒ  } t | j ƒ rE t d j | j ƒ ƒ | _ n  | ` t | ƒ rd | j ƒ  n  | j ƒ  } | | k r‰ |  j	 ƒ  n t
 d ƒ ‚ d  S(   Nu    s   malformed document(   R   R   R"   R   R   t   joint   textt   trimt   qnamet   popt	   Exception(   R   R   t   currentt   currentqname(    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyt
   endElementL   s    c         C   s,   t  | ƒ } |  j ƒ  } | j j | ƒ d  S(   N(   R   R   R   R   (   R   t   contentR*   R   (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyt
   charactersZ   s    c         C   s   |  j  j | ƒ | S(   N(   R   R   (   R   R   (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyR   _   s    c         C   s   |  j  j ƒ  S(   N(   R   R-   (   R   (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyR-   c   s    c         C   s   |  j  t |  j  ƒ d S(   Ni   (   R   R"   (   R   (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyR   f   s    (   t   __name__t
   __module__t   __doc__R   R   R   R1   R3   R   R-   R   (    (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyR   ,   s   							t   Parserc           B   s,   e  Z d  Z e d „  ƒ Z d d d „ Z RS(   s    SAX Parser c         C   s9   t  ƒ  } | j t d ƒ t ƒ  } | j | ƒ | | f S(   Ni    (   R   t
   setFeatureR	   R   t   setContentHandler(   t   clst   pt   h(    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyt	   saxparserm   s
    		c         C   sÓ   t  j ƒ  } | j ƒ  |  j ƒ  \ } } | d k	 rl | j | ƒ | j ƒ  t  j j d | | ƒ | j	 d S| d k	 rÏ t
 d ƒ } | j t | ƒ ƒ | j | ƒ | j ƒ  t  j j d | | ƒ | j	 d Sd S(   sÊ   
        SAX parse XML text.
        @param file: Parse a python I{file-like} object.
        @type file: I{file-like} object.
        @param string: Parse string XML.
        @type string: str
        s   sax (%s) duration: %si    s   %s
sax duration: %sN(   t   metricst   Timert   startR=   t   Nonet   parset   stopt   logt   debugR   R   t   setByteStreamR
   (   R   t   filet   stringt   timert   saxt   handlert   source(    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyRB   u   s    


N(   R4   R5   R6   t   classmethodR=   RA   RB   (    (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyR7   j   s   (    (   R6   t   loggingR    t   suds.metricst   sudst   suds.saxt   suds.sax.documentR   t   suds.sax.elementR   t   suds.sax.textR   t   suds.sax.attributeR   t   xml.saxR   R   R   t   xml.sax.handlerR	   t	   cStringIOR
   R4   RD   R   R7   (    (    (    sI   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/sax/parser.pyt   <module>   s   

>