
[c           @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z m Z m Z d  d l m Z d  d l m Z d  d l	 Z	 d  d l
 Z
 d Z d Z d e f d     YZ d	 e
 j f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ d d  d     YZ d d d  Z d d d d  Z d d! d     YZ d d" d     YZ d d  Z d d  Z e Z d d# d     YZ d S($   iN(   t   IntTypet
   StringTypet   ListType(   t   SmartIO(   t   UserDictCases   2.5.65-8.el7i   t   NotProcessedc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR      s   t	   Transportc           B   s   e  Z d  e Z d d d d d d d  Z d d  Z d   Z d   Z d   Z	 d d d  Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d d  Z d   Z d   Z d   Z d   Z RS(   s   rhn.rpclib.py/%si    c         C   s   i d d 6d d 6|  _  |  j d | d |  t   |  _ d |  _ d  |  _ d |  _ d  |  _ | |  _	 | |  _
 d |  _ d  |  _ d  |  _ d  |  _ d  |  _ | |  _ | |  _ d  S(   Ni    t   transfert   encodingt   POSTi @  (   t   _transport_flagst   set_transport_flagsR   t   _headerst   verboset   Nonet
   connectiont   methodt   _langt   refreshCallbackt   progressCallbackt
   bufferSizet
   headers_int   response_statust   response_reasont   _redirectedt   _use_datetimet   timeout(   t   selfR	   R
   R   R   t   use_datetimeR   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   __init__%   s     												i @  c         C   s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   set_progress_callback9   s    	c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   set_refresh_callback>   s    c         C   s"   | d  k r d } n  | |  _ d  S(   Ni @  (   R   R   (   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   set_buffer_sizeD   s    	c         C   s)   | d k r t  d |  n  | |  _ d  S(   Nt   GETR   s   Unknown request method %s(   R#   s   POST(   t   IOErrorR   (   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt
   set_methodL   s    c         K   sV   |  j  j |  | d  k	 r, | |  j  d <n  | d  k	 rH | |  j  d <n  |  j   d  S(   NR	   R
   (   R   t   updateR   t   validate_transport_flags(   R   R	   R
   t   kwargs(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   R   s    c         C   s   |  j  j   S(   N(   R   t   copy(   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   get_transport_flags]   s    c         C   sf   |  j  j d  } t | d d } | |  j  d <|  j  j d  } t | d d } | |  j  d <d  S(   NR	   t   stricti   R
   (   R   t   gett   lookupTransfert   lookupEncoding(   R   R	   R
   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR'   `   s    c         C   sT   t  |  t  g   t  d  g k r= t t |  |  j | <n t |  |  j | <d  S(   N(    (   t   typet   mapt   strR   (   R   t   namet   arg(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt
   set_headerk   s    $c         C   se   |  j  j |  r= |  j  | } t | t  sN | g } qN n g  } |  j  | <| j t |   d  S(   N(   R   t   has_keyt
   isinstanceR   t   appendR1   (   R   R2   R3   t   vlist(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt
   add_headerr   s    c         C   s   |  j  j   d  S(   N(   R   t   clear(   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   clear_headers{   s    c         C   sH   |  j  r d | f GHn  |  j r7 t j | d |  j St j |  Sd  S(   Ns   Connecting via http to %sR   (   R   R   t   connectionst   HTTPConnection(   R   t   host(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   get_connection~   s
    		c         C   s  | |  _  |  j |  \ } } } | s0 g  } n  |  j |  } | j |  j  |  j  ro | j |  j  d  n  t d | d |  j  } t | j	 d |  j
  | j d |  j  x1 |  j j   | D] \ }	 }
 | j |	 |
  q W| j d d  | j |  x! d d g D] } | j |  qW| j | |  \ } } |  j  rzd	 GHx, | j   D] \ }	 }
 d
 |	 |
 f GHqXWn  | j d k r| d |  _ | j |  _ d  S| |  _ | j |  _ | j |  _ |  j | |  S(   Ni   R   R   s
   User-Agents   Content-Types   text/xmls   Content-Lengtht   Hosts   Incoming headers:s   	%s : %si-  i.  t   Location(    (   i-  i.  (   R   t   get_host_infoR?   t   set_user_agentt
   user_agentt   set_debuglevelt   OutputR   t   applyR   R   R4   R   t   itemst   processt   clear_headert	   send_httpt   statusR   R   R   R   t   reasonR   t   _process_response(   R   R>   t   handlert   request_bodyR   t   extra_headerst   x509R   t   reqt   headert   valuet   ht   headerst   fd(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   request   s<    			 		c         C   s   t  |  j d |  j d |  j } | j |  } t | t  r| t | j | j	 | j
 d |  j d |  j } | j | _ | S| j   |  j |  S(   NR   R   (   t   InputR   R   R   t   decodeR6   t   InputStreamt   FileRX   t   lengthR2   t   closet   parse_response(   R   RX   R   t   respt   f(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRN      s    !
c         C   s   |  j  S(   N(   R   (   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt
   redirected   s    c         C   s   |  j    \ } } xZ | j d  } | s. Pn  |  j rD |  j   n  |  j r_ d Gt |  GHn  | j |  q | j   | j   | j   S(   Ni   s   body:(   t	   getparsert   readR   R   t   reprt   feedR_   (   R   Rb   t   pt   ut   response(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR`      s    		

c         C   s   | |  _  d  S(   N(   R   (   R   t   lang(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   setlang   s    N(   R   R   t   __version__RD   R   R   R    R!   R"   R%   R   R*   R'   R4   R9   R;   R?   RY   RN   Rc   R`   Rl   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   "   s&   
											8			t   SafeTransportc           B   s5   e  Z d  d  d d d d d  Z d   Z d   Z RS(   i    c      
   C   sV   t  j |  | | d | d | d | g  |  _ x! | p: g  D] } |  j |  q; Wd  S(   NR   R   R   (   R   R   t   trusted_certst   add_trusted_cert(   R   R	   R
   R   R   Ro   R   t   certfile(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR      s    	c         C   s9   t  j | t  j  s% t d |  n  |  j j |  d  S(   Ns%   Certificate file %s is not accessible(   t   ost   accesst   R_OKt
   ValueErrorRo   R7   (   R   Rq   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRp      s    c         C   sr   |  j  |  \ } } } |  j r0 d | f GHn  |  j rX t j | d |  j d |  j St j | d |  j Sd  S(   Ns   Connecting via https to %sRo   R   (   RB   R   R   R<   t   HTTPSConnectionRo   (   R   R>   RQ   RR   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR?     s    		N(   R   R   R   R   Rp   R?   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRn      s   		t   ProxyTransportc           B   s/   e  Z d d d  d  d d d d  Z d   Z RS(   i    c	   	   
   C   sD   t  j |  | | d | d | d | | |  _ | |  _ | |  _ d  S(   NR   R   R   (   R   R   t   _proxyt   _proxy_usernamet   _proxy_password(	   R   t   proxyt   proxyUsernamet   proxyPasswordR	   R
   R   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR     s    		c      	   C   s   |  j  r* d | |  j |  j |  j f GHn  |  j ra t j |  j | d |  j d |  j d |  j St j |  j | d |  j d |  j Sd  S(   Ns8   Connecting via http to %s proxy %s, username %s, pass %st   usernamet   passwordR   (   R   Rx   Ry   Rz   R   R<   t   HTTPProxyConnection(   R   R>   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR?     s    		
N(   R   R   R   R   R?   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRw     s   t   SafeProxyTransportc        	   B   s;   e  Z d d d  d  d d d d d  Z d   Z d   Z RS(   i    c
         C   sk   t  j |  | d | d | d | d | d | d | d |	 g  |  _ x! | pO g  D] }
 |  j |
  qP Wd  S(   NR|   R}   R	   R
   R   R   R   (   Rw   R   Ro   Rp   (   R   R{   R|   R}   R	   R
   R   R   Ro   R   Rq   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   *  s    	c         C   s9   t  j | t  j  s% t d |  n  |  j j |  d  S(   Ns%   Certificate file %s is not accessible(   Rr   Rs   Rt   Ru   Ro   R7   (   R   Rq   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRp   7  s    c         C   s   |  j  r* d | |  j |  j |  j f GHn  |  j rj t j |  j | d |  j d |  j d |  j d |  j St j |  j | d |  j d |  j d |  j Sd  S(   Ns9   Connecting via https to %s proxy %s, username %s, pass %sR~   R   Ro   R   (   R   Rx   Ry   Rz   R   R<   t   HTTPSProxyConnectionRo   (   R   R>   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR?   <  s    		N(   R   R   R   R   Rp   R?   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   )  s
   		RZ   c           B   sD   e  Z d d d  d d  Z e j d  Z e j d  Z d   Z RS(   i   i @  c         C   sY  d  |  _ d  |  _ d  |  _ d |  _ d |  _ d |  _ | |  _ | |  _ | |  _	 | sPt
 j j d  r t
 j d j   |  _ n  t
 j j d  r t
 j d j   |  _ n  t
 j j d  r t
 j d j   |  _ n  t
 j j d  rt t
 j d  |  _ n  t
 j j d  r(t
 j d |  _ n  t
 j j d	  rLt
 j d	 |  _ qLn x | j   D] } | | } | j   } | d
 k ry t |  |  _ WqHt k
 rd |  _ qHXq]| d k r| j   |  _ q]| d k r| j   |  _ q]| d k r| j   |  _ q]| d k r0| j   |  _ q]| d k r]| |  _ q]q]Wd  |  _ d  S(   Ni    t   Ct    t   HTTP_CONTENT_TRANSFER_ENCODINGt   HTTP_CONTENT_ENCODINGs   CONTENT-TYPEt   CONTENT_LENGTHt   HTTP_ACCEPT_LANGUAGEt   HTTP_X_PACKAGE_FILENAMEs   content-lengths   content-transfer-encodings   content-encodings   content-types   accept-languages   x-package-filename(   R   R	   R
   R/   R^   Rk   R2   R   R   t   max_mem_sizeRr   t   environR5   t   lowert   intt   keysRu   t   io(   R   RW   R   R   R   RT   RU   RV   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   b  sR    									
c      	   C   s   |  j  d k r d  S|  j rO t | |  j d |  j d |  j d |  j |  _ n t |  |  _ |  j sw |  j d k r{ d  S|  j d k r d d  l	 } |  j } | j
 d d  t d |  j  |  _ | j | |  j  n t |  j   d  S(	   Ns   application/octet-streamR   R   R   t   binaryt   base64ii    (   R/   R^   t   _smart_readR   R   R   R   t   _smart_total_readR	   R   t   seekR   R[   t   NotImplementedError(   R   RX   R   t   old_io(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRe     s"    				c         C   s  |  j  d k r. t | |  j |  j d | j S|  j sG |  j |  n  t | d  rc | j   n  |  j s|  j d k r nd|  j d k rd d  l	 } | j
   } |  j j d d  | j |  j j    | j   } ~ t |  |  _ t d |  j  |  _ |  j j |  n |  j d k rd d  l } |  j j d d  | j d d d t d |  j  } | j   } t |  |  _ t d |  j  |  _ |  j j |  n< |  j d k rt |  j |  j   n t |  j |  j   |  j j d d  |  j S(   Ns   application/octet-streamR_   t   __plains   x-zlibt   deflateii    R   s   x-gzipt   gzipt   modet   rbt   compresslevelt   fileobjs   x-gpg(   s   x-zlibR   (   s   x-gzips   gzip(   R/   R\   R^   R2   R_   R   Re   t   hasattrR
   t   zlibt   decompressobjR   t
   decompresst   flusht   lenR   R   t   writeR   t   GzipFilet   COMPRESS_LEVELR   R	   (   R   RX   R   t   objt   dataR   t   gz(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR[     s>    	"c         C   s   |  j  S(   N(   Rk   (   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   getlang  s    N(	   R   R   R   R   t   syst   stdinRe   R[   R   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRZ   a  s
   	70i   i @  c         C   s?   t  d |  } x) |  j |  } | s+ Pn  | j |  q | S(   s   
    Tries to read data from the supplied stream, and puts the results into a
    StmartIO object. The data will be in memory or in a temporary file,
    depending on how much it's been read
    Returns a SmartIO object
    R   (   R   Re   R   (   RX   R   R   R   t   chunk(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR     s    c         C   s0  t  j    } | } t d |  } | } x | d k rt  j    }	 t | |  }
 |  j |
  } t |  }
 |
 sv Pn  | |
 } | j |  | d  k r q* n  |	 | d k s | d k r* |	 } t | |  } | |	 | d } | d k r d } n
 | | } | | | | |  q* q* W| j d d  | S(   NR   i    i   gư>(	   t   timeR   t   minRe   R   R   R   t   floatR   (   RX   t   amtR   R   R   t	   startTimet   lastTimet   buft   origsizet   curTimet   lR   t	   bytesReadt   speedt   secs(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR     s2    
	
R\   c           B   s    e  Z d  d d  Z d   Z RS(   s	   <unknown>c         C   s.   | |  _  t |  |  _ | |  _ | |  _ d  S(   N(   RX   R   R^   R2   R_   (   R   RX   R^   R2   R_   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   7  s    		c         C   s   d |  j  |  j f S(   Ns0   Input data is a stream of %d bytes for file %s.
(   R^   R2   (   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   __repr__=  s    N(   R   R   R   R   R   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR\   6  s   t
   BaseOutputc           B   s   e  Z d  Z d Z d Z d Z d  Z d Z d Z d d g d d g d d g d	 g g Z
 d d
 d g Z d  d  d d d  Z d   Z d   Z d   Z d  d  d  Z d d  Z d   Z d   Z RS(   i    i   i   i   R   s   x-gzipR   s   x-zlibR   s   x-gpgR   R   R   c         C   s   | r* t  | t j  s* t d   q* n  | |  _ | |  _ d  |  _ t   |  _	 d |  _
 d |  _ i  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ |  j d | d |  d |  _ d  S(   Ns&   Expected an HTTPConnection type objecti    R	   R
   (   R6   R<   R=   t	   ExceptionR   t   _connectionR   R   R   RW   R
   R	   t   transport_flagsR~   R   t   _hostt   _handlert
   _http_typet	   _protocolR   t   _BaseOutput__processed(   R   R	   R
   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   ]  s$    												c         C   s]   t  |  t  g   t  d  g k rF d j t t |   |  j | <n t |  |  j | <d  S(   Nt   ,(    (   R/   t   joinR0   R1   RW   (   R   R2   R3   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR4   {  s    $"c         C   s#   |  j  j |  r |  j  | =n  d  S(   N(   RW   R5   (   R   R2   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRJ     s    c         C   s  | |  _  |  j |  j k r d d  l } |  j |  j d } |  j d |  t d d  } | j d d d t d	 |  } | j	 |  | j
   | j   |  _  | j
   n |  j |  j k rd d  l } |  j |  j d } |  j d |  | j t  } | j |  | j   |  _  nN |  j |  j k rit |  j |  j   |  j |  j d } |  j d |  n  |  j |  j k r|  j |  j } |  j d
 |  |  j d d  nf |  j |  j k rd d  l }	 |  j |  j } |  j d
 |  |  j d d  |	 j |  j   |  _  n  |  j d t |  j    t }
 t t j    d k r^t j   d }
 n  |  j d d |
  d |  _ d  S(   Nii    s   Content-Encodingt	   force_memi   R   t   wbR   R   s   Content-Transfer-Encodings   Content-Types   application/binarys   text/base64s   Content-Lengths   X-Transport-Infos=   Extended Capabilities Transport (C) Red Hat, Inc (version %s)(   R   R
   t   ENCODE_GZIPR   t	   encodingsR4   R   R   R   R   R_   t   getvaluet   ENCODE_ZLIBR   t   compressobjt   compressR   t
   ENCODE_GPGR   R	   t   TRANSFER_BINARYt	   transferst   TRANSFER_BASE64R   t   encodestringR   Rm   t   splitR   (   R   R   R   t   encoding_nameRb   R   R   R   t   transfer_nameR   t   rpc_version(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRI     sP    		
	c         K   s&   | |  _  | |  _ |  j j |  d  S(   N(   R	   R
   R   R&   (   R   R	   R
   R(   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR     s    		s   /RPC2c         C   s   |  j  s t  n  | |  _ |  j d  k r9 t d   n  |  j j   |  j j |  j | d |  j	 d |  j
 |  j j   } |  j |  s t j d |  j | f | j | j | j   n  | j | f S(   Ns   No connection object foundt   bodyRW   s   %s %s(   R   R   R   R   R   R   t   connectRY   R   R   RW   t   getresponset   response_acceptablet	   xmlrpclibt   ProtocolErrorRL   RM   t   msg(   R   R>   RO   Rj   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRK     s    			
	c         C   sj   | j  d k r d S| j  d
 k r& d S| j  d k r9 d S|  j j d  sO d S| j d d	 k rf d Sd S(   s*   Returns true if the response is acceptablei   i   i-  i.  i   i    t   allow_partial_contents   Content-Types   application/octet-stream(   i-  i.  (   RL   R   R,   R   (   R   Rj   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR     s    c         C   s&   |  j  r" |  j  j   d  |  _  n  d  S(   N(   R   R_   R   (   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR_     s    	N(   R   R   t   ENCODE_NONER   R   R   t   TRANSFER_NONER   R   R   R   R   R   R4   RJ   RI   R   RK   R   R_   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   C  s,   							5	i    c         C   s   |  d k r d St |  t  rH d |  k o? t t j  k  n rH |  St |  t  r x= t t t j   D]# } t j | |  j   k rm | Sqm Wn  | r t	 d |    n  d S(   sT   Given a string or numeric representation of a transfer, return the
    transfer codei    s   Unsupported transfer %sN(
   R   R6   R    R   RF   R   R   t   rangeR   Ru   (   R	   R+   t   i(    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR-     s    4c         C   s   |  d k r d St |  t  rH d |  k o? t t j  k  n rH |  St |  t  r x= t t t j   D]# } |  j   t j | k rm | Sqm Wn  | r t	 d |    n  d S(   sU   Given a string or numeric representation of an encoding, return the
    encoding codei    s   Unsupported encoding %sN(
   R   R6   R    R   RF   R   R   R   R   Ru   (   R
   R+   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR.     s    4R]   c           B   sM   e  Z d  d d d d  Z d   Z d d  Z d   Z d   Z d   Z RS(	   i    i @  c         C   s`   | |  _  | |  _ | j |  _ | |  _ d |  _ | rS | | j d  d |  _ n  | |  _ d  S(   NR   t   /i   (   R^   t   file_objR_   R   R2   t   rfindR   (   R   R   R^   R2   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR     s    				c         C   s   |  j  S(   N(   R^   (   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   __len__'  s    c         C   s2   | d  k r" |  j   } | j   S|  j j |  S(   N(   R   t	   _get_fileRe   R   (   R   R   RX   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyRe   *  s    
c         C   s?   |  j    } x, | j |  j  } | s+ Pn  | j |  q | S(   sH   Copies the contents of this File object into another file
        object(   R   Re   R   R   (   R   t   fileRX   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   read_to_file2  s    c         C   so   |  j  rC t |  j |  j  d |  j d |  j } | j d d  n t |  j d |  j } | j d d  | S(   s   Read everything into a temporary file and call the progress
        callbacks if the file length is defined, or just reads till EOFR   R   i    (   R^   R   R   R   R   R   R   (   R   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR   =  s    		c         C   s#   |  j  r |  j    d  |  _  n  d  S(   N(   R_   R   (   R   (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   __del__K  s    	
N(	   R   R   R   R   R   Re   R   R   R   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyR]     s   
			(    (    (    (    (   Rr   R   R   t   typesR    R   R   R   R   R<   R   Rm   R   R   R   R   Rn   Rw   R   RZ   R   R   R   R\   R   R-   R.   RF   R]   (    (    (    s2   /usr/lib/python2.7/site-packages/rhn/transports.pyt   <module>   s0   8;