
OvWc           @  s  d  Z  d d l m Z d d l Z e j d k r> e Z Z n  d d l Z d d l	 m
 Z
 d d l Z d d l Z d d l Z d d l Z y  d d l Z d d l m Z Wn1 e k
 r d d l m Z d d l m Z n Xd d	 l m Z m Z m Z m Z e j e  Z e e d
 i  d  Z d   Z  d   Z! d d d d  Z# d   Z$ d d  Z% d   Z& d   Z' d e d  Z( y e j j) Z* Wn e+ k
 rd   Z* n Xd   Z, d   Z- d   Z. d   Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d  e6 f d!     YZ7 e j d k r<e7 e8 d"  Z9 n  e7 e d#  Z: e7 e8 d$  Z; e7 e< d%  Z= e7 e9 d&  Z> e j Z? e j@ ZA e jB ZC e7 e d'  ZD e7 e d(  ZE i d) e 6d* eF 6d$ e; 6d# e: 6d+ e8 6d" e9 6d& e> 6d, e< 6d% e= 6d- e
 6d. e j 6d/ e j@ 6d0 e jB 6d' eD 6d( eE 6ZG i e- e j 6e/ e j@ 6e1 e jB 6e5 e< 6e4 e
 6e3 eF 6ZH i e, e j 6e. e j@ 6e0 e jB 6e2 eF 6e e 6ZI eJ g  eG jK   D] \ ZL ZM eM eL f ^ q ZN eN jO i e d1 6 e eG k rd) eG e <n  d2 eJ f d3     YZP d S(4   u#   Pythonic simple SOAP Client helpersi(   t   unicode_literalsNu   3(   t   Decimal(   t   urlsplit(   t   requesti   (   t
   __author__t   __copyright__t   __license__t   __version__u    c      	   C  sv  t  |   \ } } } }	 }
 | d k r x d D] } y t j j t j j | |    } |  j d  r | d k r d | | f } n d | | f } t j d |  t | | | | | |  SWq. t	 k
 r } t j
 |  q. Xq. Wt d |    n  d	 t j |  j d
   j   } t | t  rEt j j | |  } n  | rt j j |  r| rt j d |  t | d  } | j   } | j   n | d k rt j d |   t j |   } | j   } n8 t j d |  | j f  | j |  d d |  \ } } | rrt j d |  t j j |  sIt j |  n  t | d  } | j |  | j   n  | S(   u@   Download a document from a URL, save it locally if cache enabledu   httpu   httpsu   fileu   /u   %s://%su   %s:%su   Scheme not found, trying %su   No scheme given for url: %su   %s.xmlu   utf8u   Reading file %su   ru   Fetching url %s using urllib2u   GET %s using %su   GETu   Writing file %su   w(   u   httpu   httpsu   file(   u   httpu   httpsu   file(   u   httpu   httpsN(   R   t   ost   patht   normpatht   joint
   startswitht   logt   debugt   fetcht	   Exceptiont   errort   RuntimeErrort   hashlibt   md5t   encodet	   hexdigestt
   isinstancet
   basestringt   existst   infot   opent   readt   closet   urllib2t   urlopent   _wrapper_versionR   t   Nonet   isdirt   makedirst   write(   t   urlt   httpt   cachet   force_downloadt   wsdl_basedirt   headerst
   url_schemet   netlocR	   t   queryt   fragmentt   schemet   tmp_urlt   et   filenamet   ft   xmlt   response(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   )   sF    !"c         C  s  t  |  t  r t   } x |  j   D] } | j |  } | d k	 r% t  | t  rk t |  | |  } n< t  | t  r g  | D] } t |  | d |  ^ q } n  | | | <q% q% Wt |  d  r | j	 j
 |  j	  | j j
 |  j  |  j | _ n  | S| Sd S(   u,   Sort parameters (same order as xsd:sequence)i    u
   namespacesN(   R   t   dictt   Structt   keyst   getR!   t	   sort_dictt   listt   hasattrt
   namespacest   updatet
   referencest	   qualified(   t   odt   dt   rett   kt   vt   v1(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR:   W   s     	-c         C  sM   | d k r d } n | } | d k r@ t  d |  | f   n  |  | | f S(   u"   Return a suitable key for elementsu   complexTypeu
   simpleTypeu   elementu   Unknown element type %s = %s(   u   complexTypeu
   simpleType(   u   elementu   complexTypeu
   simpleType(   R   (   t   element_namet   element_typet	   namespacet   eltype(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   make_keym   s    	u)   http://schemas.xmlsoap.org/soap/encoding/c
            s6  t  j d | | f  x| D]}
 |
 j   d k r< q ns |
 j   d  k rt t  j d | |
 f  |
 } t } n; |
 j   r |
 j   } t } n t  j d | |
 f  q |	 d k } | r t   }	 | |	 j d <| |	 _	 n  x| D]	} | d } | s| d	 } n  | s | d
 } n  | s3| d } n  | s| d r| j   rd | | d f } | j   } | j   } | j   } t
 |  | | | | | | |  qd } n  | j d  } t |  d k r| \ } } n d | d } } | r| j |  p| } | | | f k re| d k ret j | d    |
 j   d k r  f d     qn_| | k r| d k rg    x>| j   D]'} x| D]\ } } | j d  r| } d } d | k r| j d  \ } } | j |  } n  d | k r| | j d   } n  t j | d  } | d k r| d k r| rd } t | | |  } |  j | t    } t   } | | | <| | j d <| | _	 n    j |  qqWqWn d     sR| r| } n | } x- | D]$ \ } } | j d  r| } qqW| d s"d } n d } t | | |  } |  j | t      n  | d d k sz| | k r| d k rt   t  rt |  d k s| d! k rt   _ qt |	 _ qt |  d k s| d" k r  g   qt |	 _ n  | d d k	 r| s| d rQ| d p#| }   |	 | <| d |	 j | <| |	 j | <n  t  j d | | f    |	 _ | d k	 r | j   d k r | j   r t   t  r  j r  j } n d } t
 |  | | j   | | | | | d | q q W| r t | | |  } |  j | t    j |	  q q Wd S(#   u7   Parse and define simple element types as Struct objectsu   Processing element %s %su
   annotationu   documentationu   elementu   restrictionu   listu   %s has no children! %su   typeu   itemTypeu   baseu   refu   nameu   %s_%su   anyTypeu   :i   i    u   Arrayc           s&   g  |  j  d  D] }   |  ^ q S(   Nu    (   t   split(   t   sRE   (   t   fn(    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   <lambda>   s    u
   :arrayTypeu   []u   complexTypeu   xmlns:u	   maxOccursu	   unboundedu   jettyu)   complexContent/simpleType/element %s = %su	   extensiont   structN(   u
   annotationu   documentation(   u   elementu   restrictionu   list(   u   jetty(   u   jetty(   R   R   t   get_local_namet   Truet   childrent   FalseR!   R7   R=   R@   t   process_elementRL   t   lent   get_namespace_urit   REVERSE_TYPE_MAPR9   t   endswitht   indexRK   t
   setdefaultt   appendR   R   t   arrayR?   t	   refers_toR>   (    t   elementsRG   t   nodeRH   t   xsd_urit   dialectRI   R@   t   soapenc_uriRP   t   tagRS   t   aliast
   new_structR1   t   tt   ct   ett   nst	   type_namet   urit   aRD   RE   t   fn_namespacet   fn_urit   fn_arrayt   ref_typet   keyt
   fn_complext   e_namet   base_struct(    (   RN   sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRU   y   s    			
		
	
	(!
	*c         C  s  |  | k r d S| j  |   x|  j   D]\ } } t | t  r| |  k r y t | |  Wq t k
 r } t j t |  t	  q Xn  | j
 rxt | j
 t  rhx t | j
  D] \ } } t | j
 t  r |  | j | | j
 | |  t | j
 t  rX| j
 j rX| rX| j
 j | |  | j | <| j
 j | |  | j | <qXq q Wd | _
 qx| j
 |  | <n  | j r| g |  | <qn  t | t  r* x6 | D]+ } t | t t f  rt | |  qqWq* q* Wd S(   u   Fix unresolved referencesN(   R\   t   itemsR   R7   t   postprocess_elementR   t   warningst   warnt   unicodet   RuntimeWarningR^   R6   t	   enumeratet   insertR=   R?   R!   R]   R;   (   R_   t	   processedRD   RE   R1   t   it   kkt   n(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRw   !  s4    	$%	c   
      C  s   | r |  j  | | f  Si  } x9 |  j   D]+ \ \ } } } | | k r, | | | <q, q, Wt |  d k r d  } xg | D]_ } | j  |  }	 |	 s t j d | | f  qz | s |	 j   } qz | | j |	 |  qz W| S| r t | j	    d Sd  S(   Ni   u   Part %s not found for %si    (
   R9   Rv   RV   R!   R   R   t   copyR>   R;   t   values(
   t   messagest   message_namet	   part_namet   parameter_ordert   partst   message_name_keyt   part_name_keyt   messaget   new_msgt   part(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   get_messageH  s$    c         C  s/   |  o. t  d |  k r( |  j d  d p+ |   S(   Nu   :i   (   t   strRL   (   RM   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO   d  s    c         C  s/   |  o. t  d |  k r( |  j d  d p+ d   S(   Nu   :i    (   R   RL   R!   (   RM   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO   e  s    c         C  sI  d d l  m } i  } x |  D]{ \ } } | j d  rL | | t |  <n  | d k r~ | d k rq |	 d } n  | | d <n  | d k r | d k }
 q q Wx7 | j   D]) } | |	 k r d t |	  |	 | <q q Wxk|  j   p g  D]W} | j   d k r| d } | d } | d k r9t j	 d |  q n  | | k r\t j	 d |  q n  | | | <t j	 d | | f  t
 | | | | |  } t j j t j j | |   } t j j |  } | | d | } t | | | | | | | | | |	 |
  n  | j   } | d k r | d } |	 | } | d } t j	 d | | f  | j   d k rs| j   } n | j   d k r| d d | d t } | s| j   } qna | j   d k r| d r| } n< | j   } | r| j   } n | j   d k r| } n  | rAt | | | | | | | |
  qAq q Wd S(   u&   Find schema elements and complex typesi   (   t   SimpleXMLElementu   xmlnsu   targetNamespaceu   urn:DefaultNamespaceu   elementFormDefaultu	   qualifiedu   ns%su   importu   includeu	   namespaceu   schemaLocationu$   Schema location not provided for %s!u   Schema %s already imported!u   Importing schema %s from %sRI   u   elementu   complexTypeu
   simpleTypeu   nameu   Parsing Element %s: %su   restrictionRj   R   u   typeN(   u   importu   include(   u   elementu   complexTypeu
   simpleType(   t	   simplexmlR   R   RQ   R!   R   RV   RS   R   R   R   R   R	   R
   R   t   dirnamet   preprocess_schemaRT   RU   (   t   schemat   imported_schemasR_   Ra   Rb   R&   R'   R(   R)   t   global_namespacesR@   R   t   local_namespacesRD   RE   Rj   t   elementt   schema_namespacet   schema_locationR4   R	   t   imported_schemaRH   RI   t
   element_nsRG   RS   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   h  sn    


!


		c         C  s   t  j  t j |  |  d    S(   Ni   (   t   datetimet   timet   strptime(   RM   t   fmt(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s  d } y t  |  |  SWnat k
 rzy |  d d k r |  d d k r y d d  l } | j |   SWn t k
 rz n Xy d d  l } | j |   SWn t k
 r n Xy  d d  l } | j j	 |   SWn t k
 r n Xt
 j d	 t  |  d  }  n  y t  |  | d
  SWn t  |  |  SXWq{t k
 rvd |  k rit
 j d t  |  |  j d   }  n  t  |  |  SXn Xd  S(   Nu   %Y-%m-%dT%H:%M:%Siu   :iu    u   -u   +iuh   removing unsupported UTC offset. Install `iso8601`, `isodate` or `python-dateutil` package to support itu   .%fu   .u"   removing unsuppported microseconds(   u    u   -u   +(   t	   _strptimet
   ValueErrort   iso8601t
   parse_datet   ImportErrort   isodatet   parse_datetimet   dateutil.parsert   parsert   parseRx   Ry   R{   RZ   (   RM   R   R   R   t   dateutil(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt
   datetime_u  s@     c         C  s
   |  j    S(   N(   t	   isoformat(   t   dt(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   t  |  d d !d  j   S(   Ni    i
   u   %Y-%m-%d(   R   t   date(   RM   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   |  j  d  S(   Nu   %Y-%m-%d(   t   strftime(   RB   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   t  |  d  j   S(   Nu   %H:%M:%S(   R   R   (   RM   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   |  j  d  S(   Nu   %H%M%S(   R   (   RB   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s$   i t  d 6t  d 6t d 6t d 6|  S(   Nu   0u   falseu   1u   true(   RT   RR   (   RM   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   i d t  6d t 6|  S(   Nu   falseu   true(   RT   RR   (   RM   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   d j  |   S(   Nu   {0:f}(   t   format(   RB   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    c         C  s   d j  |   S(   Nu   {0:.10f}(   R   (   R3   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRO     s    t   Aliasc           B  s#   e  Z d    Z d   Z d   Z RS(   c         C  s   | | |  _  |  _ d  S(   N(   t   py_typet   xml_type(   t   selfR   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   __init__  s    c         C  s   |  j  |  S(   N(   R   (   R   t   value(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   __call__  s    c         C  s   d |  j  |  j f S(   Nu   <alias '%s' for '%s'>(   R   R   (   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   __repr__  s    (   t   __name__t
   __module__R   R   R   (    (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR     s   		u   longu   byteu   shortu   doubleu   integeru   durationu   anyURIu   stringu   booleanu   intu   floatu   decimalu   dateTimeu   dateu   timeu   base64BinaryR7   c           B  st   e  Z d  Z d   Z d   Z d d  Z d   Z d   Z d   Z d   Z	 d	   Z
 d
   Z d   Z d   Z RS(   uE   Minimal ordered dictionary to represent elements (i.e. xsd:sequences)c         C  s:   g  |  _  t |  _ i  |  _ i  |  _ d  |  _ d  |  _ d  S(   N(   t   _Struct__keysRT   R]   R=   R?   R!   R^   R@   (   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   5  s    					c         C  s9   | |  j  k r" |  j  j |  n  t j |  | |  d  S(   N(   R   R\   R6   t   __setitem__(   R   Rr   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   =  s    i    c         C  s<   | |  j  k r% |  j  j | |  n  t j |  | |  d  S(   N(   R   R}   R6   R   (   R   Rr   R   RZ   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR}   B  s    c         C  s6   | |  j  k r" |  j  j |  n  t j |  |  d  S(   N(   R   t   removeR6   t   __delitem__(   R   Rr   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   G  s    c         C  s   t  |  j  S(   N(   t   iterR   (   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   __iter__L  s    c         C  s   |  j  S(   N(   R   (   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR8   O  s    c         C  s$   g  |  j  D] } | |  | f ^ q
 S(   N(   R   (   R   Rr   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyRv   R  s    c         C  s   x$ | j    D] \ } } | |  | <q Wt | t  rO |  j rO | j |  _ n  t | t  r |  j j | j  |  j j | j  | j |  _ | j |  _ n  d  S(   N(	   Rv   R   R7   R]   R=   R>   R?   R@   R^   (   R   t   otherRD   RE   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR>   U  s    c         C  s   t    } | j |   | S(   u   Make a duplicate(   R7   R>   (   R   t   new(    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   b  s    	c         C  s   d t  j |   S(   Nu   %s(   R6   t   __str__(   R   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   h  s    c         C  s   yL d d j  g  |  j   D]( \ } } d t |  t |  f ^ q  } Wnq t k
 r } d d j  g  |  j   D]( \ } } d t |  t |  f ^ qt  } t j t |  t  n X|  j r t	 r d | } n  | S(   Nu   {%s}u   , u   %s: %su   [%s](
   R   Rv   t   reprR   Rz   Rx   Ry   R{   R]   RT   (   R   RD   RE   RM   R1   (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR   k  s    LH(   R   R   t   __doc__R   R   R}   R   R   R8   Rv   R>   R   R   R   (    (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyR7   2  s   									(Q   R   t
   __future__R    t   syst   versionR   R   Rz   R   t   decimalR   R   t   loggingR   Rx   R   t   urlparseR   R   t   urllibR   t   urllib.parset    R   R   R   R   t	   getLoggerR   R   RT   R   R:   RK   R!   RU   Rw   R   RQ   t   get_namespace_prefixR   R   R   t   AttributeErrorR   t
   datetime_mt   date_ut   date_mt   time_ut   time_mt   bool_ut   bool_mt	   decimal_mt   float_mt   objectR   t   intt   longt   bytet   shortt   floatt   doublet   integert   DateTimeR   t   DateR   t   Timet   durationt   any_urit   boolt   TYPE_MAPt   TYPE_MARSHAL_FNt   TYPE_UNMARSHAL_FNR6   Rv   RD   RE   RX   R>   R7   (    (    (    sS   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/helpers.pyt   <module>   s   ".			'		J	)									
			











1	