ó
˜µÈSc           @   sÎ   d  Z  d Z d d l m Z d d l Z d d l m Z m Z d d l m Z d d l	 m	 Z	 d d l
 Ty e d	 Z Wn e k
 r d
 Z n Xd f  d „  ƒ  YZ f  i  e e e e d	 d e d
 d „
 Z d S(   sÌ  
################################################################################
# Copyright (c) 2003, Pfizer
# Copyright (c) 2001, Cayce Ullman.
# Copyright (c) 2001, Brian Matthews.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# Neither the name of actzero, inc. nor the names of its contributors may
# be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
################################################################################
s:   $Id: SOAPBuilder.py 1498 2010-03-12 02:13:19Z pooryorick $iÿÿÿÿ(   t   __version__N(   t	   toXMLnamet   fromXMLname(   t   Config(   t   NS(   t   *i   i    t   SOAPBuilderc           B   sÕ  e  Z d  Z d Z d d e j Z d e j Z i e j e j	 6e j
 e j 6e j e j 6e j e j 6e j e j 6e j e j 6e j e j 6e j e j 6Z d i  d d d d d d d e d d „ Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z  d d i  d „ Z! d i  d d d d „ Z" d i  d „ Z# d i  d „ Z$ d i  d „ Z% d i  d „ Z& e& Z' e& Z( d i  d „ Z) e) Z* d i  d „ Z+ e+ Z, d i  d „ Z- d i  d „ Z. d i  d „ Z/ e/ Z0 d i  d „ Z1 RS(   s   <?xml version="1.0"?>
s$   <?xml version="1.0" encoding="%s"?>
s   %(ENV_T)s:Envelope
s$     %(ENV_T)s:encodingStyle="%(ENC)s"
s   </%(ENV_T)s:Envelope>
i   s   UTF-8i    c         C   sç   | d  k r d j | ƒ n  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 |	 |  _
 |
 |  _ g  |  _ d |  _ d |  _ d |  _ i  |  _ i  |  _ d |  _ g  |  _ d |  _ t | t ƒ |  _ | |  _ d  S(   Nt    i    i   (   t   Nonet   encodet   argst   kwt   envelopet   encodingt   methodt	   namespacet   headert   methodattrst   use_refst   configt   outt   tcountert   ncountert   icountert   envnst   idst   deptht	   multirefst   multist
   isinstancet   bodyTypet   bodyt   noroot(   t   selfR
   R   R   R   R   R   R   R   R   R   R    (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   __init__H   s.    																			c         C   sp  |  j  j r d GHn  i  } |  j  j } |  j rK |  j |  j d d | ƒn  |  j r“ |  j d 7_ |  j | t j	 ƒ d } |  j
 j d | ƒ n  |  j rb| j ƒ  } |  j d 7_ d } |  j rý x4 |  j j ƒ  D]  \ } } | d | | f 7} qÖ Wn  |  j r$|  j | |  j ƒ \ } }	 n d \ } }	 |  j
 j d	 | |  j |	 | |  j | ƒ f ƒ n  yt |  j ƒ t k r‰|  j f }
 n	 |  j }
 x' |
 D] } |  j | d | d
 | ƒq™Wt |  j  d ƒ r4|  j  j j |  j ƒ r4x‡ |  j  j j |  j ƒ D]. } |  j |  j j | ƒ | d | d
 | ƒqÿWn< x9 |  j j ƒ  D]( \ } } |  j | | d | d
 | ƒqDWWn t k
 r |  j d k rút d |  j d |  j d |  j d |  j d |  j d |  j d |  j d |  j d d d |  j  ƒ 
} | j ƒ  S‚  n X|  j r?|  j
 j d | |  j f ƒ | } |  j d 8_ n  |  j r­d |  _  x3 |  j! D]( \ } } |  j | | d | d
 | ƒq[W|  j
 j d | ƒ |  j d 8_ n  |  j rt" d „  |  j# j ƒ  ƒ } d |  j$ g | d g |  j
 |  j% g |  _
 n  |  j d  k rJ|  j
 j' d |  j( |  j ƒ d j) |  j
 ƒ j* |  j ƒ S|  j
 j' d |  j+ ƒ d j) |  j
 ƒ S(   Ns	   In build.t   Headert   typedi   i    s	   <%sBody>
R   s    %s="%s"s   <%s%s%s%s%s>
t   ns_mapt   argsOrderingR
   R   R   R   R   R   R   R   R   R   s   </%s%s>
s
   </%sBody>
c         S   s   d |  d |  d f S(   Ns     xmlns:%s="%s"
i   i    (    (   t   ns(    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   <lambda>¹   s    t   <s   >
(   R   R   (,   R   t   debugR$   R   t   dumpR   R   t   gennsR   t   ENVR   t   appendR   t   copyR   t   itemsR   t   genroott   typeR
   t	   TupleTypet   hasattrR&   t   has_keyt   getR   t   RecursionErrorR   R   R   R   t   buildR   R   t   mapR   t   _env_topt   _env_botR   t   insertt   _xml_enc_topt   joinR	   t   _xml_top(   R!   R%   R$   t   body_nst   save_ns_mapt   at   kt   vt   methodnst   nR
   t   it   bt   objt   tagt   e(    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyR8   f   s|     					&	*/$
			 		c         C   s.   |  j  j r d GHn  |  j d 7_ d |  j S(   Ns
   In gentag.i   s   v%d(   R   R*   R   (   R!   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   gentagÇ   s     c         C   sJ  | d  k r d	 St | ƒ t k rW t | ƒ d k rC | \ } } q] d  | d } } n d  } | j | ƒ r~ | | d d f S|  j j | ƒ r¾ |  j | } |  j | <| | <| d d f S| sã d |  j } |  j d 7_ n  | | | <|  j j	 r| d d | | f f S|  j j
 r8| |  j | <| d d f Sd d | f Sd  S(
   NR   i   i    t   :s   ns%di   s    xmlns:%s="%s"s    xmlns="%s"(   R   R   (   R   R2   R3   t   lenR5   t   _env_nsR   R   R   t   buildWithNamespacePrefixt   buildWithGlobalNamespacePrefix(   R!   R%   t   nsURIR'   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyR,   Ì   s,     
c         C   sP   |  j  r d S|  j d k r  d S|  j | t j ƒ \ } } d | |  j | f S(   NR   i   s    %sroot="%d"%s(   R    R   R,   R   t   ENCR   (   R!   R%   R'   RF   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyR1   ë   s    	c         C   s  |  j  d k  r d S|  j j t | ƒ ƒ s• |  j } |  j t | ƒ <| d |  _ |  j d k re d S|  j  d k r| d | S|  j j | | f ƒ nN |  j d k r° t d ‚ n  |  j t | ƒ } |  j	 rã |  j  d k rã d | S|  j
 j d | | |  j | ƒ f ƒ d  S(   Ni   R   i   i    s	    id="i%d"s!   Cannot serialize recursive objects   <%s href="#i%d"%s/>
(   R   R   R5   t   idR   R   R   R.   R7   R   R   R1   R   (   R!   RI   RJ   R%   RF   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   checkrefû   s$    c         C   s‡   |  j  j r d Gd G| GHn  | j ƒ  } |  j d 7_ t | ƒ t t t f k r^ t d ‚ n  |  j	 | | | | ƒ |  j d 8_ d  S(   Ns   In dump.s   obj=i   s   tag must be a string or None(
   R   R*   R/   R   R2   t   NoneTypet
   StringTypet   UnicodeTypet   KeyErrort   dump_dispatch(   R!   RI   RJ   R$   R%   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyR+     s     R   s;   <%(tag)s%(type)s%(id)s%(attrs)s%(root)s>%(data)s</%(tag)s>
c
         C   sJ  |  j  j r d GHn  | d  k r/ |  j  j } n  | p> |  j ƒ  } t | ƒ } d }
 } } | r´ | r´ |  j | | ƒ \ } } |  j | |  j  j ƒ d } d | | | | f } n  y | j | |  ƒ }
 Wn n Xy | j	 ƒ  } Wn1 | d k rt
 j t | ƒ ƒ } q| } n X|	 i | d 6| d 6| d 6| d	 6| d
 6|
 d 6S(   Ns
   In dumper.R   i    s    %stype="%s%s"%st   stringRJ   R2   t   datat   rootRT   t   attrs(   R   R*   R   t   typesNamespaceURIRL   R   R,   t   schemaNamespaceURIt   _marshalAttrst   _marshalDatat   cgit   escapet   str(   R!   RR   t   obj_typeRI   RJ   R$   R%   t   rootattrRT   t   xmlRB   RF   t   tR'   t   insR\   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   dumper%  s.        
"c      
   C   sÎ   |  j  j r d GHn  | p# |  j ƒ  } t | ƒ } |  j  j rK t | ƒ n  t | k r` d } n6 t | k ru d } n! t | k rŠ d } n t	 | ƒ } |  j
 j |  j d  d | | | | |  j | ƒ ƒ ƒ d  S(   Ns   In dump_float.t   INFs   -INFt   NaNt   double(   R   R*   RL   R   t   strict_ranget
   doubleTypet   PosInft   NegInfRm   t   reprR   R.   Rk   R   R1   (   R!   RI   RJ   R$   R%   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt
   dump_floatF  s     			c      
   C   sj   |  j  j r d GHn  t | t ƒ r, d } n d } |  j j |  j d  | | | | | |  j | ƒ ƒ ƒ d  S(   Ns   In dump_int.t   integert   int(	   R   R*   R   t   LongTypeR   R.   Rk   R   R1   (   R!   RI   RJ   R$   R%   Rf   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   dump_int\  s     	c      
   C   sL   |  j  j r d GHn  |  j j |  j d  d | | | | |  j | ƒ ƒ ƒ d  S(   Ns   In dump_bool.t   boolean(   R   R*   R   R.   Rk   R   R1   (   R!   RI   RJ   R$   R%   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt	   dump_boolh  s     c      
   C   s»   |  j  j r d GHn  | p# |  j ƒ  } t | ƒ } |  j | | | ƒ } | d  k rW d  Sy | j ƒ  } Wn | } n X|  j j |  j	 d  d t
 j | ƒ | | | |  j | ƒ | ƒ ƒ d  S(   Ns   In dump_string.R[   (   R   R*   RL   R   RU   R   Rb   R   R.   Rk   Rc   Rd   R1   (   R!   RI   RJ   R$   R%   RT   R\   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   dump_stringm  s       
$c         C   sx   |  j  j r d GHn  | p# |  j ƒ  } t | ƒ } |  j | |  j  j ƒ d } |  j j d | | |  j | ƒ f ƒ d  S(   Ns   In dump_None.i    s   <%s %snull="1"%s/>
(	   R   R*   RL   R   R,   R`   R   R.   R1   (   R!   RI   RJ   R$   R%   R'   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt	   dump_None  s     c         C   sÜ  |  j  j r d Gd G| GHn  | p+ |  j ƒ  } t | ƒ } t | ƒ t k s[ t | t ƒ rg | j } n | } | r› |  j	 | | | ƒ } | d  k r› d  Sn  y | d } d } Wn¬ t | d d  ƒ rKt | d d  ƒ rKt | d d  ƒ r6t d | j d | j ƒ } | j | _ t | d	 d  ƒ sHt j | _ qHqTt d | j ƒ } n	 t ƒ  } d
 } n Xd
 }	 | sÈx[ | d
 D]L }
 t | ƒ t |
 ƒ k s·t | ƒ t k ru| j |
 j k rud }	 PququWn  d } |	 rqt | t ƒ st | ƒ t k st | t ƒ rŠt | d d  ƒ rŠ| j rŠy | j p1t j } Wn t j } n X|  j | | ƒ \ } } y | j } Wn d } n X| | } q‘t | t ƒ rô| j |  j  j |  j  j ƒ } | rë|  j | | ƒ \ } } | t | j ƒ } qnd } q‘t | ƒ j } t | ƒ t k rd } n  t | ƒ t k r9d } n  | d k rNd } n  |  j | |  j  j ƒ d | } n  |  j | |  j  j ƒ d d } y | j | |  ƒ } Wn d } n X|  j | t j ƒ \ } } |  j | |  j  j  ƒ \ } } | r@|  j! j" d | | | t# | ƒ | | | | | |  j$ | ƒ | | f ƒ n  | rfy | j% } Wqld } qlXn | } t | t& t' t( f ƒ rt) } n |	 } x$ | D] }
 |  j* |
 | | | ƒ q›W| rØ|  j! j" d | ƒ n  d  S(   Ns   In dump_list.s   obj=i    t   _typedt   _typet   _complexTypeR$   t   complexTypet   _nsi   R   t
   SOAPStructs   ur-typeR[   t   floatRn   s7   <%s %sarrayType="%s[%d]" %stype="%sArray"%s%s%s%s%s%s>
t   items   </%s>
(+   R   R*   RL   R   R2   t   InstanceTypeR   t   anyTypeR\   RU   R   t   getattrt   typedArrayTypeR~   R   t	   _typenameR   t   URNR   t
   structTypet	   __class__t   DictTypeR,   t   _validNamespaceURIR_   t   strictNamespacesRe   t   __name__RW   RX   Ra   RS   R`   R   R.   RN   R1   t
   _elemsnamet   listt   tuplet	   arrayTypet   TrueR+   (   R!   RI   RJ   R$   R%   R\   RT   t   samplet   emptyt	   same_typeRG   t   ndeclt   tnsR'   t   typenameRi   RB   t   enst   edeclRj   t   ideclt	   elemsnamet   should_drill(    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt	   dump_listŠ  s¸     !

$ 	
	
	 	 	 	  
	!  	 c         C   sÂ  |  j  j r d Gd G| GHn  | p+ |  j ƒ  } t | ƒ } t | ƒ t k rX | j } n | } | rŒ |  j | | | ƒ } | d  k rŒ d  Sn  y | j	 | |  ƒ } Wn d } n Xd } |  j
 | d ƒ \ }	 }
 |  j
 | |  j  j ƒ \ } } | rL|  j j d | | |	 | |
 | |  j | ƒ | | f	 ƒ y | j } WqRd } qRXn | } t | t t t f ƒ rst } n t } x$ | D] } |  j | | | | ƒ qW| r¾|  j j d | ƒ n  d  S(   Ns   In dump_map.s   obj=R   s   http://xml.apache.org/xml-soaps    <%s %stype="%sMap"%s%s%s%s%s%s>
R„   s   </%s>
(   R   R*   RL   R   R2   R…   R\   RU   R   Ra   R,   R`   R   R.   R1   R‘   R   R’   R“   R”   R•   R˜   R+   (   R!   RI   RJ   R$   R%   R\   RT   RB   R™   Rœ   R   Rj   Rž   RŸ   R    RG   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   dump_map  sF       
	  	 c   	      C   sÝ   t  | t ƒ rÙ |  j | t j ƒ \ } } |  j | t j ƒ \ } } |  j j d | | | | f ƒ |  j | j	 d | | ƒ |  j | j
 d | | ƒ t | d ƒ rÂ |  j | j d | | ƒ n  |  j j d | ƒ n  d  S(   Ns   <%sFault %sroot="1"%s%s>t	   faultcodet   faultstringt   details   </%sFault>
(   R   t	   faultTypeR,   R   RS   R-   R   R.   R+   R£   R¤   R4   R¥   (	   R!   RI   RJ   R$   R%   t   cnst   cdeclt   vnst   vdecl(    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   dump_exception-  s     c   	      C   s  |  j  j r d GHn  | p# |  j ƒ  } t | ƒ } |  j | | | ƒ } | d  k rW d  Sy | j | |  ƒ } Wn d } n X|  j j d | | | |  j	 | ƒ f ƒ xC | j
 ƒ  D]5 \ } } | d d k r³ |  j | | d | ƒ q³ q³ W|  j j d | ƒ d  S(   Ns   In dump_dictionary.R   s   <%s%s%s%s>
i    t   _i   s   </%s>
(   R   R*   RL   R   RU   R   Ra   R   R.   R1   R0   R+   (	   R!   RI   RJ   R$   R%   RT   RB   RC   RD   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   dump_dictionary8  s"       
c            s'  | s9 t  ˆ  t ƒ r* ˆ  j r* ˆ  j } q9 |  j ƒ  } n  xC |  j j D]5 \ } } t  ˆ  | ƒ rF | |  ˆ  | | | ƒ d  SqF Wt |  j f t |  j	 f t
 |  j f t |  j f t |  j f t |  j f t |  j f t |  j f t |  j f t |  j f t |  j f t |  j f f } x: | D]2 \ } } t  ˆ  | ƒ r| ˆ  | | | ƒ d  SqW|  j | ƒ } y ˆ  j | |  ƒ }	 Wn d }	 n Xt  ˆ  t ƒ r¹|  j j d | |	 | | f ƒ n% |  j  ˆ  | | ƒ }
 |
 d  k rÞd  St  ˆ  t" ƒ r…d } ˆ  j# |  j j$ |  j j% ƒ } | r<|  j& | | ƒ \ } } | | } n  |  j j d | | |
 |	 | f ƒ ˆ  j' j( ƒ  } t) ˆ  d ƒ rÚxZ t* t+ ˆ  j, ƒ ƒ D]@ } |  j- ˆ  j. | ƒ ˆ  j, | d | ƒ | j/ ˆ  j, | ƒ q“Wn  x@ | D]8 } | d d k rá|  j- t0 ˆ  | ƒ | d | ƒ qáqáWt  ˆ  t1 ƒ rnd |  _2 x6 |  j3 D]( \ } } |  j- | | d | d	 | ƒq?Wn  |  j j d
 | ƒ nžt  ˆ  t ƒ rNd } | rˆ  j# |  j j$ |  j j% ƒ } | r|  j& | | ƒ \ } } |  j& | |  j j4 ƒ \ } } d | | ˆ  j5 | | f } qn  |  j j d | | |
 |	 | ˆ  j6 ƒ  | f ƒ nÕ |  j j d | |
 | f ƒ t0 ˆ  d d  ƒ } | d  k rºt) ˆ  d ƒ rºt ‡  f d †  ˆ  j7 Dƒ ƒ } n  | d  k	 rxF | j8 ƒ  D]5 \ } } | d d k rÓ|  j- | | d | ƒ qÓqÓWn  |  j j d
 | ƒ d  S(   NR   s   <%s%s%s></%s>
s   <%s%s%s%s%s>
t   _keyordi   i    R¬   R$   R%   s   </%s>
s    %stype="%s%s"%s%ss   <%s%s%s%s%s>%s</%s>
s	   <%s%s%s>
t   __dict__t	   __slots__c         3   s$   |  ] } | t  ˆ  | ƒ f Vq d  S(   N(   R‡   (   t   .0RC   (   RI   (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pys	   <genexpr>±  s    (9   R   R†   t   _nameRL   R   t   dumpmapt	   ExceptionR«   t   mapTypeR¢   R”   R¡   t
   basestringR{   RV   R|   t   boolRz   Rv   Rx   t   longR’   R“   t   dictR­   Rƒ   Rt   R1   Ra   t   voidTypeR   R.   RU   R   R‹   RŽ   R_   R   R,   R¯   t   keysR4   t   rangeRN   R®   R+   t   _aslistt   removeR‡   R   R   R   R`   R~   Rb   R°   R0   (   R!   RI   RJ   R$   R%   t   dtypet   funcR³   t   rRB   RT   R™   R'   t   keylistRG   RC   RD   Ri   t   onst   ondeclRj   t   indeclt   d1(    (   RI   s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyRZ   O  sš      
##&&	#	&" (    N(2   R   t
   __module__R?   R=   R   R¯   R:   R;   t   ENC_TRS   t   ENV_TR-   t   XSD_Tt   XSDt   XSD2_Tt   XSD2t   XSD3_Tt   XSD3t   XSI_Tt   XSIt   XSI2_Tt   XSI2t   XSI3_Tt   XSI3RO   R   R   R"   R8   RL   R,   R1   RU   R+   Rk   Rt   Rx   Rz   R{   t   dump_strt   dump_unicodeR|   t   dump_NoneTypeR¡   t
   dump_tupleR¢   R«   R­   t	   dump_dictRZ   (    (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyR   :   sH   
'*	a					v+s   UTF-8c
         C   sO   t  d |  d | d | d | d | d | d | d | d	 | d
 |	 ƒ 
}
 |
 j ƒ  S(   NR
   R   R   R   R   R   R   R   R   R    (   R   R8   (   R
   R   R   R   R   R   R   R   R   R    Ri   (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt	   buildSOAP¿  s    (   t   __doc__t   identt   versionR    Rc   t   wstools.XMLnameR   R   R   R   t   Typest   BooleanTypet   pythonHasBooleanTypet	   NameErrorR   R   RÛ   (    (    (    s6   /usr/lib/python2.7/dist-packages/SOAPpy/SOAPBuilder.pyt   <module>"   s$   


ÿ ÿ ‡