ó
{™xTc           @   s  d  d l  m Z d e f d „  ƒ  YZ d „  Z 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 f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisiont   Nodec           B   s   e  Z d  Z RS(   s5   
  A node that allows setting arbitrary attributes
  (   t   __name__t
   __module__t   __doc__(    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR      s   c         C   s   |  S(   N(    (   t   value(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyt   dummy   s    t   Valuec           B   s#   e  Z d  Z e d „ Z d „  Z RS(   s   
  Extract text from elem
  c         C   s   | |  _  | |  _ d  S(   N(   t	   attributet
   conversion(   t   selfR   R	   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyt   __init__   s    	c         C   s#   t  | |  j |  j | j ƒ ƒ d  S(   N(   t   setattrR   R	   t   text(   R
   t   elemt   node(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyt   __call__   s    (   R   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR      s   t   Textc           B   s#   e  Z d  Z e d „ Z d „  Z RS(   s   
  Extract text
  c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   t   tagR	   (   R
   R   R   R	   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   "   s    		c         C   s]   | j  |  j ƒ } | d  k r: t d | j |  j f ‚ n  t | |  j |  j | j ƒ ƒ d  S(   Ns   Element '%s' has no child '%s'(   t   findR   t   Nonet   RuntimeErrorR   R   R	   R   (   R
   R   R   t   child(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   )   s    (   R   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR      s   t   TextWithDefaultc           B   s&   e  Z d  Z d e d „ Z d „  Z RS(   s4   
  Extract text or fill in default if not present
  c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R   R   t   defaultR	   (   R
   R   R   R   R	   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   8   s    			c         C   sS   | j  |  j ƒ } | d  k r* |  j } n |  j | j ƒ } t | |  j | ƒ d  S(   N(   R   R   R   R   R	   R   R   R   (   R
   R   R   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   @   s
    N(   R   R   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   3   s   t	   Attributec           B   s#   e  Z d  Z e d „ Z d „  Z RS(   s   
  Extract an attribute
  c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   t   nameR	   (   R
   R   R   R	   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   R   s    		c         C   sZ   | j  |  j ƒ } | d  k r: t d | j |  j f ‚ n  t | |  j |  j | ƒ ƒ d  S(   Ns"   Element '%s' has no attribute '%s'(   t   getR   R   R   R   R   R   R	   (   R
   R   R   t   res(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   Y   s    (   R   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   M   s   t   AttributeWithDefaultc           B   s#   e  Z d  Z e d „ Z d „  Z RS(   s5   
  Extract an attribute or fill in a default value
  c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R   R   R   R	   (   R
   R   R   R   R	   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   k   s    			c         C   s8   | j  |  j |  j ƒ } t | |  j |  j | ƒ ƒ d  S(   N(   R   R   R   R   R   R	   (   R
   R   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   s   s    (   R   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   f   s   t   Groupc           B   s    e  Z d  Z d „  Z d „  Z RS(   s>   
  Adds extra node to group items with a logical connection
  c         C   s   | |  _  | |  _ d  S(   N(   R   t   extractions(   R
   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   ~   s    	c         C   sG   t  ƒ  } t | |  j | ƒ x$ |  j D] } | d | d | ƒ q& Wd  S(   NR   R   (   R   R   R   R   (   R
   R   R   R   t
   processing(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   „   s    	(   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   y   s   	t   Singlec           B   s&   e  Z d  Z i  g  d „ Z d „  Z RS(   s:   
  Extract data from an ElementTree Element into a Node
  c         C   s   | |  _  | |  _ d  S(   N(   t   child_data_taggedR   (   R
   R"   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   “   s    	c         C   s'  t  |  j ƒ } t ƒ  } xÙ | D]Ñ \ } } | j | k r� | d k sL t ‚ x$ |  j D] } | d | d | ƒ qV W| j ƒ  Pq | d k r | j |  j k r | j | j ƒ |  j | j \ } }	 |	 d | d | j ƒ }
 t | | |
 ƒ q q W| r#t	 d | d j
 d	 „  | Dƒ ƒ f ‚ n  | S(
   Nt   endR   R   t   startt
   iterstreamt   endtags%   Missing children for element '%s': %ss   , c         s   s   |  ] } d  | Vq d S(   s   '%s'N(    (   t   .0t   t(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pys	   <genexpr>±   s    (   t   setR"   R   R   t   AssertionErrorR   t   cleart   removeR   R   t   join(   R
   R%   R&   t   unseenR   t   eventR   R    R   t	   processorR   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   ™   s&    	
 (   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR!   Ž   s   t   Multiplec           B   s    e  Z d  Z d „  Z d „  Z RS(   s@   
  Extract data from an ElementTree Element into a child Node
  c         C   s   | |  _  | |  _ d  S(   N(   R   R0   (   R
   R   R0   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   ¼   s    	c         C   sŸ   g  } x’ | D]Š \ } } | d k rH | j  | k s: t ‚ | j ƒ  Pq | d k r | j  |  j  k sl t ‚ |  j d | d |  j  ƒ } | j | ƒ q q W| S(   NR#   R$   R%   R&   (   R   R*   R+   R0   t   append(   R
   R%   R&   t   arrayR/   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   Â   s    
(   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR1   ·   s   	t   DataAttributec           B   s#   e  Z d  Z e d „ Z d „  Z RS(   sA   
  A node that is converted directly to data, i.e. no children
  c         C   s   | |  _  | |  _ d  S(   N(   R   R	   (   R
   R   R	   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   Ù   s    	c         C   s�   x† | D]~ \ } } | d k r | j  | k r | j |  j ƒ } | d  k rh t d | j  |  j f ‚ n  |  j | ƒ } | j ƒ  | Sq Wd  S(   NR#   s   %s has no %s attribute(   R   R   R   R   R   R	   R+   (   R
   R%   R&   R/   R   t   rawt   result(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   ß   s    
(   R   R   R   R   R   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR4   Ô   s   t   Parserc           B   s   e  Z e d  „ Z d „  Z RS(   c         C   s^   | |  _  | |  _ | |  _ | r? d d  l } | j j |  _ n d d  l } | j j |  _ d  S(   Niÿÿÿÿ(	   R   t   buildert   restypet   xml.etree.cElementTreet   etreet   cElementTreet   modulet   xml.etree.ElementTreet   ElementTree(   R
   R   R8   R9   R<   t   xml(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   ð   s    			c         C   s†   |  j  j | d d ƒ} xg | D]O \ } } | j |  j k r | d k r |  j d |  j d | d |  j ƒ ƒ Sq Wt d |  j ‚ d  S(	   Nt   eventsR$   R#   t   rootR%   R&   s   Start tag %s not found(   s   starts   end(   R=   t	   iterparseR   R9   R8   R   (   R
   t   sourceR%   R/   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR   ÿ   s    	 (   R   R   t   FalseR   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyR7   î   s   N(   t
   __future__R    t   objectR   R   R   R   R   R   R   R   R!   R1   R4   R7   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/bioinformatics/xmlbuild.pyt   <module>   s   	)