ó
N_c           @   s¶   d  d l  m Z d  d l  m Z m Z d  d l m Z d  d l Z d  d l Z d  d l	 m
 Z
 m Z d „  Z d d d „  ƒ  YZ d	 d d
 „  ƒ  YZ d „  Z e d k r² e ƒ  n  d S(   iÿÿÿÿ(   t   cElementTree_iterparse(   t   _available_compressiont   stat_f(   t   RepoMDErrorN(   t   AutoFileChecksumst   to_xmlc         C   s*   |  j  d ƒ d k r |  S|  j d ƒ d S(   Nt   }iÿÿÿÿi   (   t   findt   split(   t   qn(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt
   ns_cleanup   s     t   RepoDatac           B   s5   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z RS(   s(   represents anything beneath a <data> tagc         C   s‰   d  |  _ | r' | j j d ƒ |  _ n  d |  _ d |  _ d |  _ d  |  _ d  |  _ d  |  _	 d  |  _
 g  |  _ | r… |  j | ƒ n  d  S(   Nt   type(   NN(   NN(   NN(   t   NoneR   t   attribt   gett   locationt   checksumt   openchecksumt	   timestampt	   dbversiont   sizet   opensizet   deltast   parse(   t   selft   elem(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt   __init__   s    									c   	      C   s{  xt| D]l} t  | j ƒ } | d k r^ | j j d ƒ } | j j d ƒ } | | f |  _ q | d k r— | j } | j j d ƒ } | | f |  _ q | d k rÐ | j } | j j d ƒ } | | f |  _ q | d k rë | j |  _ q | d k r| j |  _	 q | d	 k r!| j |  _
 q | d
 k r<| j |  _ q | d k r t | ƒ } |  j | _ |  j j | ƒ q q Wd  S(   NR   t   hreft   baseR   R   s   open-checksumR   t   database_versionR   s	   open-sizet   delta(   R
   t   tagR   R   R   t   textR   R   R   R   R   R   R   R   R   t   append(	   R   R   t   childt
   child_namet   relativeR   t
   csum_valuet	   csum_typeR   (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR   /   s4    		c         C   sö  d } d t  |  j d t ƒ} | | 7} x‚ d d g D]t \ } } t |  | ƒ r6 t |  | ƒ } | d rª d | t  | d d t ƒt  | d	 ƒ | f } | | 7} qª q6 q6 Wt |  d
 ƒ r=t |  d
 ƒ } | d	 r=d t  | d	 d t ƒ} | d r-d t  | d d t ƒt  | d	 d t ƒf } n  | | 7} q=n  x[ d d d d g D]G \ } } t |  | ƒ } | rPd | t  | ƒ | f } | | 7} qPqPWxD |  j D]9 } d j | j ƒ  j d ƒ d	 d !ƒ }	 | d |	 7} q¥Wd }
 | |
 7} | S(   Nt    s   <data type="%s">
R   R   R   s   open-checksumi    s     <%s type="%s">%s</%s>
i   R   s     <location href="%s"/>
s&     <location xml:base="%s" href="%s"/>
R   R   R   R   R   s	   open-sizes     <%s>%s</%s>
s   
  s   
iþÿÿÿs     <delta>
  %s
  </delta>
s   </data>
(   s   checksums   checksum(   s   openchecksums   open-checksum(   s	   timestamps	   timestamp(   s	   dbversions   database_version(   s   sizes   size(   s   opensizes	   open-size(	   R   R   t   Truet   hasattrt   getattrR   t   joint   dump_xmlR   (   R   t   msgt   topt   datat   xmlnamet   valt   d_xmlt   locR   t   bodyt   bottom(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR-   O   sB    



0
%
c         C   s=   t  | ƒ } x* |  j D] } t  | j ƒ | k r | Sq Wd  S(   N(   t   intR   R   (   R   t   old_timestampt   deltamd(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt   getDeltax   s    N(   t   __name__t
   __module__t   __doc__R   R   R   R-   R:   (    (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR      s
   	 	)t   RepoMDc           B   sG   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s   represents the repomd xml filec         C   st   d |  _  | |  _ i  |  _ i  |  _ d |  _ d |  _ i t ƒ  d 6i  d 6t ƒ  d 6|  _ | rp |  j	 | ƒ n  d S(   s0   takes a repoid and a filename for the repomd.xmli    t   contentt   distrot   repoN(
   R   t   repoidt   repoDatat	   checksumst   lengthR   t   revisiont   sett   tagsR   (   R   RB   t   srcfile(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR      s    						$c         C   sÈ  t  | ƒ t j k rO y t | d ƒ } Wq[ t k
 rK t d | f ‚ q[ Xn | } d  } t | d d g d t d t ƒ} t	 | ƒ } yxò| D]ê\ } } t
 | j ƒ } | d k r¼t d | ƒ } |  j j | j  ƒ } | rq| j rq| j | j k  rq| j d	 j d
 d	 ƒ d	 t k rq| rqt | j d d	 ƒ d d | j d	 j d d	 ƒ d	 ƒ d  k rq| } n  | |  j | j  <y. t | j ƒ }	 |	 |  j k r®|	 |  _ n  Wq|q|Xq’ | d k r×| j |  _ q’ | d k r’ x– | D]‹ }
 t
 |
 j ƒ } | d k r%|  j d j |
 j ƒ n  | d k rê|
 j j d d ƒ } |  j d j | t ƒ  ƒ } | j |
 j ƒ qêqêWq’ q’ W| j j ƒ  |  _ t | j ƒ |  _  Wn t! k
 rÃ} t d ‚ n Xd  S(   Nt   rts   Unable to open %st   sha256t   sha512t   ignore_missingt   ignore_noneR0   R   i   t   .t   /i    RF   RH   R?   R@   t   cpeidR(   s   Damaged repomd.xml file("   R   t   typest   StringTypest   opent   IOErrorR   R   R   R)   t	   iterparseR
   R    R   RC   R   R   R   t   rsplitR   R   R7   R   R!   RF   RH   t   addR   t
   setdefaultRG   RD   t
   hexdigestst   lenRE   t   SyntaxError(   R   RI   t   infilet   parsert   eventR   t	   elem_namet   thisdatat   oldt   ntsR#   R$   RQ   R@   t   e(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR      sV    !# '	c         C   s   |  j  j ƒ  S(   s,   return list of metadata file types available(   RC   t   keys(   R   (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt	   fileTypesÈ   s    c         C   s+   | |  j  k r |  j  | St d | ‚ d  S(   Ns#   requested datatype %s not available(   RC   R   (   R   R   (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt   getDataÌ   s    c         C   s  d |  j  GHd |  j GHx- t |  j ƒ D] } d | |  j | f GHq( W|  j d k	 rf d |  j GHn  |  j d r• d d j t |  j d ƒ ƒ GHn  |  j d rõ xP t |  j d ƒ D]8 } d	 | GH|  j d | } d
 d j t | ƒ ƒ GHq¶ Wn  d GHxŒ t |  j ƒ  ƒ D]x } |  j	 | } d | j
 GHd | j GHd | j  GHd | j GHd | j GHd | j GHd | j GHd | j GHd GHqWd S(   s   dump fun outputs   file timestamp: %ss   file length   : %ss   file checksum : %s/%ss   revision: %sR?   s   tags content: %ss   , R@   s   tags distro: %ss
     tags: %ss   
---- Data ----s     datatype: %ss       location     : %s %ss       timestamp    : %ss       size         : %ss       open size    : %ss       checksum     : %s - %ss       open checksum: %s - %ss       dbversion    : %sR(   N(   R   RE   t   sortedRD   RF   R   RH   R,   Rf   RC   R   R   R   R   R   R   R   (   R   t   csumR@   RH   t   ftRa   (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt   dumpÒ   s2    "	c         C   së  d } d } | | 7} |  j  r? d t |  j  ƒ } | | 7} n  |  j d sf |  j d sf |  j d r³d } x/ |  j d D]  } d t | ƒ } | | 7} qz Wx/ |  j d D]  } d	 t | ƒ } | | 7} q¬ W|  j d } t | t ƒ r@g  } xB t | ƒ D]4 }	 x+ t | |	 ƒ D] } | j |	 | f ƒ qWqÿ W| } n  xY | D]Q \ }	 } |	 r~d
 t |	 d t ƒt | ƒ f } n d t | ƒ } | | 7} qGW| d 7} | | 7} n  x' |  j j	 ƒ  D] }
 | |
 j
 ƒ  7} qÃW| d 7} | S(   NR(   s‹   <?xml version="1.0" encoding="UTF-8"?>
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
s    <revision>%s</revision>
R?   R@   RA   s    <tags>
s      <content>%s</content>
s      <repo>%s</repo>
s"      <distro cpeid="%s">%s</distro>
R   s      <distro>%s</distro>
s	    </tags>
s
   </repomd>
(   RF   R   RH   t
   isinstancet   dictRh   R"   R)   RC   t   valuesR-   (   R   R.   R/   t   revRH   t   itemR    R@   t   lstRQ   t   md(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR-   î   sB    
	'	"

N(
   R;   R<   R=   R   R   R   Rf   Rg   Rk   R-   (    (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyR>   ~   s   	9			c          C   sq   y4 d t  j d GHt d t  j d ƒ }  |  j ƒ  Wn6 t k
 rl t  j d t  j d IJt  j d ƒ n Xd  S(   Ns   file          : %si   RB   s   newcomps.py: No such file:'%s'(   t   syst   argvR>   Rk   RU   t   stderrt   exit(   t   p(    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt   main  s    t   __main__(    (    (   t   yum.miscR    RV   R   R   t   ErrorsR   Rs   RR   t   miscR   R   R
   R   R>   Rx   R;   (    (    (    s4   /usr/lib/python2.7/site-packages/yum/repoMDObject.pyt   <module>   s   	aš	