ó
ùÜÞKc           @   s�  d  Z  d d l m Z d d l Td d l Td d l m Z d d l m Z m Z d d l	 m
 Z
 d d l m Z d d l m Z e e ƒ Z d	 d" d
 „  ƒ  YZ d d# d „  ƒ  YZ d d$ 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(%   s/   
Provides appender classes for I{marshalling}.
iÿÿÿÿ(   t	   getLogger(   t   *(   t	   footprint(   t   Objectt   Property(   t   Element(   t   Text(   t   deepcopyt   Matcherc           B   s    e  Z d  Z d „  Z d „  Z RS(   sU   
    Appender matcher.
    @ivar cls: A class object.
    @type cls: I{classobj}
    c         C   s   | |  _  d S(   sL   
        @param cls: A class object.
        @type cls: I{classobj}
        N(   t   cls(   t   selfR	   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyt   __init__'   s    c         C   s-   |  j  d  k r | d  k St | |  j  ƒ Sd  S(   N(   R	   t   Nonet
   isinstance(   R
   t   x(    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyt   __eq__.   s    
(   t   __name__t
   __module__t   __doc__R   R   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR       s   	t   ContentAppenderc           B   s    e  Z d  Z d „  Z d „  Z RS(   sá   
    Appender used to add content to marshalled objects.
    @ivar default: The default appender.
    @type default: L{Appender}
    @ivar appenders: A I{table} of appenders mapped by class.
    @type appenders: I{table}
    c         C   sÙ   t  | ƒ |  _ t d ƒ t | ƒ f t t ƒ t | ƒ f t t ƒ t | ƒ f t t ƒ t	 | ƒ f t t
 ƒ t | ƒ f t t ƒ t | ƒ f t t ƒ t | ƒ f t t ƒ t | ƒ f t t ƒ t | ƒ f f	 |  _ d S(   sa   
        @param marshaller: A marshaller.
        @type marshaller: L{suds.mx.core.Core}
        N(   t   PrimativeAppendert   defaultR   R   t   NoneAppendert   nullR   t   PropertyAppenderR   t   ObjectAppenderR   t   ElementAppenderR   t   TextAppendert   listt   ListAppendert   tuplet   dictt   DictAppendert	   appenders(   R
   t
   marshaller(    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   >   s&    									c         C   sR   |  j  } x2 |  j D]' } | d | j k r | d } Pq q W| j | | ƒ d S(   sÞ   
        Select an appender and append the content to parent.
        @param parent: A parent node.
        @type parent: L{Element}
        @param content: The content to append.
        @type content: L{Content}
        i    i   N(   R   R!   t   valuet   append(   R
   t   parentt   contentt   appendert   a(    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   Y   s    	
(   R   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   5   s   	t   Appenderc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   sŽ   
    An appender used by the marshaller to append content.
    @ivar marshaller: A marshaller.
    @type marshaller: L{suds.mx.core.Core}
    c         C   s   | |  _  d S(   sa   
        @param marshaller: A marshaller.
        @type marshaller: L{suds.mx.core.Core}
        N(   R"   (   R
   R"   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   p   s    c         C   s   |  j  j | ƒ S(   sC  
        Create and return an XML node that is qualified
        using the I{type}.  Also, make sure all referenced namespace
        prefixes are declared.
        @param content: The content for which proccessing has ended.
        @type content: L{Object}
        @return: A new node.
        @rtype: L{Element}
        (   R"   t   node(   R
   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR*   w   s    
c         C   s   |  j  j | | ƒ d S(   sà   
        Set the value of the I{node} to nill.
        @param node: A I{nil} node.
        @type node: L{Element}
        @param content: The content for which proccessing has ended.
        @type content: L{Object}
        N(   R"   t   setnil(   R
   R*   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR+   ƒ   s    c         C   s   |  j  j | | ƒ S(   s	  
        Set the value of the I{node} to a default value.
        @param node: A I{nil} node.
        @type node: L{Element}
        @param content: The content for which proccessing has ended.
        @type content: L{Object}
        @return: The default.
        (   R"   t
   setdefault(   R
   R*   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR,   �   s    	c         C   s   |  j  j | ƒ S(   s–   
        Get whether the specified content is optional.
        @param content: The content which to check.
        @type content: L{Content}
        (   R"   t   optional(   R
   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR-   ˜   s    c         C   s   |  j  j | ƒ d S(   sÀ   
        Notify I{marshaller} that appending this content has suspended.
        @param content: The content for which proccessing has been suspended.
        @type content: L{Object}
        N(   R"   t   suspend(   R
   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR.       s    c         C   s   |  j  j | ƒ d S(   s¼   
        Notify I{marshaller} that appending this content has resumed.
        @param content: The content for which proccessing has been resumed.
        @type content: L{Object}
        N(   R"   t   resume(   R
   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR/   ¨   s    c         C   s   |  j  j | | ƒ d S(   s“   
        Append the specified L{content} to the I{parent}.
        @param content: The content to append.
        @type content: L{Object}
        N(   R"   R$   (   R
   R%   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   °   s    (   R   R   R   R   R*   R+   R,   R-   R.   R/   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR)   i   s   			
				R   c           B   s   e  Z d  Z d „  Z RS(   s4   
    An appender for python I{primative} types.
    c         C   s€   | j  j d ƒ rJ | j  d } t | j ƒ } | r| | j | | ƒ q| n2 |  j | ƒ } | j t | j ƒ ƒ | j | ƒ d  S(   Nt   _i   (   t   tagt
   startswitht   tostrR#   t   setR*   t   setTextR$   (   R
   R%   R&   t   attrR#   t   child(    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   ¾   s    (   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   ¹   s   R   c           B   s   e  Z d  Z d „  Z RS(   s)   
    An appender for I{None} values.
    c         C   sQ   |  j  | ƒ } |  j | | ƒ } | d  k r@ |  j | | ƒ n  | j | ƒ d  S(   N(   R*   R,   R   R+   R$   (   R
   R%   R&   R7   R   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   Ï   s
    (   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   Ê   s   R   c           B   s   e  Z d  Z d „  Z RS(   s!   
    A L{Property} appender.
    c         C   sƒ   | j  } |  j | ƒ } | j | j ƒ  ƒ | j | ƒ xD | j ƒ  D]6 } t d | d d | d ƒ } t j |  | | ƒ qE Wd  S(   NR1   i    R#   i   (   R#   R*   R5   t   getR$   t   itemst   ContentR)   (   R
   R%   R&   t   pR7   t   itemt   cont(    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   Ü   s    	(   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   ×   s   R   c           B   s   e  Z d  Z d „  Z RS(   s    
    An L{Object} appender.
    c         C   s�   | j  } |  j | ƒ r. t | ƒ d k r. d  S|  j | ƒ } | j | ƒ x> | D]6 } t d | d d | d ƒ } t j |  | | ƒ qQ Wd  S(   Ni    R1   R#   i   (   R#   R-   R   R*   R$   R:   R)   (   R
   R%   R&   t   objectR7   R<   R=   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   ë   s    	!(   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   æ   s   R    c           B   s   e  Z d  Z d „  Z RS(   s%   
    An python I{dict} appender.
    c         C   s•   | j  } |  j | ƒ r. t | ƒ d k r. d  S|  j | ƒ } | j | ƒ xD | j ƒ  D]6 } t d | d d | d ƒ } t j |  | | ƒ qW Wd  S(   Ni    R1   R#   i   (   R#   R-   t   lenR*   R$   R9   R:   R)   (   R
   R%   R&   t   dR7   R<   R=   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   û   s    	!(   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR    ö   s   t   ElementWrapperc           B   s#   e  Z d  Z d „  Z d d „ Z RS(   s   
    Element wrapper.
    c         C   s&   t  j |  | j | j ƒ | |  _ d  S(   N(   R   R   t   nameR%   t   _ElementWrapper__content(   R
   R&   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR     s    i    c         C   s   |  j  j | ƒ S(   N(   RC   t   str(   R
   t   indent(    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyRD     s    (   R   R   R   R   RD   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyRA     s   	R   c           B   s   e  Z d  Z d „  Z RS(   s+   
    An appender for I{Element} types.
    c         C   sA   | j  j d ƒ r! t d ƒ ‚ n  t | j ƒ } | j | ƒ d  S(   NR0   s$   raw XML not valid as attribute value(   R1   R2   t	   ExceptionRA   R#   R$   (   R
   R%   R&   R7   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$     s    (   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR     s   R   c           B   s   e  Z d  Z d „  Z RS(   s    
    A list/tuple appender.
    c         C   sr   | j  } t | ƒ rn |  j | ƒ x9 | D]1 } t d | j d | ƒ } t j |  | | ƒ q) W|  j | ƒ n  d  S(   NR1   R#   (   R#   R?   R.   R:   R1   R)   R$   R/   (   R
   R%   R&   t
   collectionR<   R=   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   $  s    	(   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR     s   R   c           B   s   e  Z d  Z d „  Z RS(   s)   
    An appender for I{Text} values.
    c         C   sz   | j  j d ƒ rJ | j  d } t | j ƒ } | rv | j | | ƒ qv n, |  j | ƒ } | j | j ƒ | j | ƒ d  S(   NR0   i   (   R1   R2   R3   R#   R4   R*   R5   R$   (   R
   R%   R&   R6   R#   R7   (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR$   3  s    (   R   R   R   R$   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyR   .  s   N(    (    (    (   R   t   loggingR    t   sudst   suds.mxt   suds.sudsobjectR   R   R   t   suds.sax.elementR   t   suds.sax.textR   t   copyR   R   t   logR   R   R)   R   R   R   R   R    RA   R   R   R   (    (    (    sJ   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/mx/appender.pyt   <module>   s*   

4P