ó
N_c           @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l Z d  d l m Z d e j	 f d „  ƒ  YZ
 d Z d Z i e d 6e d	 6Z d
 e Z d e Z d e Z d d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d „  Z e d k rÿ e ƒ  n  d S(   iÿÿÿÿN(   t   format_number(   t   cElementTree_xmlparset   MetaLinkRepoErrorParseFailc           B   s   e  Z d  Z RS(   s<    An exception thrown for an unparsable MetaLinkRepoMD file. (   t   __name__t
   __module__t   __doc__(    (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR      s   s   http://www.metalinker.org/s%   http://fedorahosted.org/mirrormanagert   mlt   mms   {%(ml)s}files/{%(ml)s}files$   {%(mm)s}alternates/{%(mm)s}alternates   {%(ml)s}resourcest   MetaLinkFilec           B   s}   e  Z d  Z d „  Z d „  Z d „  Z e e ƒ Z d „  Z e e ƒ Z	 d „  Z
 e e
 ƒ Z d „  Z e e ƒ Z d „  Z RS(   s1    Parse the file metadata out of a metalink file. c         C   sQ  t  d d d d g ƒ } xá | D]Ù } t r. q | j d t k rV t | j ƒ |  _ q | j d t k r~ t | j ƒ |  _ q | j d t k r i  |  _	 x[ | D]P } | j d t k r¡ | j
 d	 ƒ | k r¡ | j |  j	 | j
 d	 ƒ j ƒ  <q¡ q¡ Wq q Wt |  d
 ƒ st d ‚ n  t |  d ƒ s2t d ‚ n  t |  d ƒ sMt d ‚ n  d  S(   Nt   md5t   sha1t   sha256t   sha512s   {%s}timestamps   {%s}sizes   {%s}verifications   {%s}hasht   typet	   timestamps   No timestamp for filet   sizes   No size for filet   chksumss   No verifications for file(   t   sett   Falset   tagt   __XML_NS_MM__t   intt   textR   t   __XML_NS_ML__R   R   t   gett   lowert   hasattrR   (   t   selft   elemR   t   celemt   helem(    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   __init__5   s(     	-c         C   sA   d t  j |  j ƒ t |  j ƒ |  j |  j |  j |  j |  j f S(   NsZ   Timestamp: %s
Size:      %5s (%d)
MD5:       %s
SHA1:      %s
SHA256:    %s
SHA512:    %s
(	   t   timet   ctimeR   R    R   R	   R
   R   R   (   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   __str__M   s    $c         C   s   |  j  j d d ƒ S(   NR	   t    (   R   R   (   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   _get_md5X   s    c         C   s   |  j  j d d ƒ S(   NR
   R#   (   R   R   (   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt	   _get_sha1[   s    c         C   s   |  j  j d d ƒ S(   NR   R#   (   R   R   (   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   _get_sha256^   s    c         C   s   |  j  j d d ƒ S(   NR   R#   (   R   R   (   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   _get_sha512a   s    c         C   sÏ   | d  k r d St |  j | j ƒ } | r0 | St |  j | j ƒ } | rO | St |  j | j ƒ } | rn | St |  j | j ƒ } | r | St |  j | j ƒ } | r¬ | St |  j | j ƒ } | rË | Sd S(   Ni   i    (   t   Nonet   cmpR   R   R	   R
   R   R   (   R   t   othert   ret(    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   __cmp__e   s*    (   R   R   R   R   R"   R$   t   propertyR	   R%   R
   R&   R   R'   R   R,   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR   2   s   						t   MetaLinkURLc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s0    Parse the URL metadata out of a metalink file. c         C   sÆ   | j  d t k s t ‚ | |  _ | j |  _ t | j d d ƒ ƒ |  _ | j d ƒ |  _	 | j d ƒ |  _
 | j d t d ƒ |  _ |  j j ƒ  d k |  _ |  j	 d  k rÂ | j d	 ƒ |  _	 n  d  S(
   Ns   {%s}urlt
   preferenceiÿÿÿÿR   t   locations   {%s}privatet   falset   truet   protocol(   R   R   t   AssertionErrort   max_connectionsR   t   urlR   R   R/   R3   R0   R   t   privateR   R(   (   R   R   R5   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR   €   s    	c         C   s,   d |  j  |  j |  j |  j |  j |  j f S(   Nsx   URL:             %s
Preference:      %d
Max-Connections: %d
Protocol:        %s
Location:        %s
Private:         %s
(   R6   R/   R5   R3   R0   R7   (   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR"      s    c         C   s›   | d  k r d St |  j | j ƒ } | r0 | St |  j d k | j d k ƒ } | r\ | St |  j d k | j d k ƒ } | rˆ | St |  j | j ƒ S(   Ni   t   httpst   http(   R(   R)   R/   R3   R6   (   R   R*   R+   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR,   š   s    !!c         C   s$   |  j  d  k r t S|  j s  t St S(   N(   R3   R(   R   R6   t   True(   R   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   usable¨   s
    	(   R   R   R   R   R"   R,   R;   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR.   }   s
   			t   MetaLinkRepoMDc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s'    Parse a metalink file for repomd.xml. c   	   
   C   s8  d  |  _ d  |  _ g  |  _ g  |  _ i  |  _ t j j | ƒ sO t	 d | ‚ n  y t
 | ƒ } Wn t k
 r t	 d | ‚ n Xx[| j t ƒ D]J} | j d ƒ } t j j | ƒ d k rÃ q n  |  j d  k	 rí |  j | k rí t	 d ‚ n  | |  _ t | ƒ } |  j d  k	 r,|  j | k r,t	 d ‚ n  | |  _ x- | j t ƒ D] } |  j j t | ƒ ƒ qEWxr | j t ƒ D]a } t | j d ƒ pd ƒ } x= | D]5 } | j d	 t k r|  j j t | | ƒ ƒ qqWquWq W|  j j ƒ  |  j j ƒ  |  j d  k rt	 d
 ‚ n  t |  j ƒ d k  r4t	 d ‚ n  d  S(   Ns   File %s does not exists   File %s is not XMLt   names
   repomd.xmls   Different paths for repomd files   Different data for repomd filet   maxconnectionsi   s   {%s}urls   No repomd filei   s	   No mirror(   R(   R=   t   repomdt   old_repomdst   mirrorst   _host2mct   ost   patht   existsR   t   xmlparset   SyntaxErrort   findallt   __ML_FILE_ELEMENT__R   t   basenameR   t   __ML_OLD_FILE_ELEMENTS__t   appendt   __ML_RESOURCES__R   R   R   R.   t   sortt   len(	   R   t   filenamet   rootR   R=   R?   R   R5   t   uelem(    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR   ²   sF    							(c         c   sÂ   d „  } x² |  j  D]§ } | j } | j d ƒ r4 na | j d ƒ sa | j d ƒ sa | j d ƒ r | | ƒ } | |  j k r‚ q n  | |  j | <n q | j d ƒ sª q n  | t d ƒ  Vq Wd S(   s>    Iterate plain urls for the mirrors, like the old mirrorlist. c         S   s   |  j  d ƒ d j  d ƒ d S(   Nt   /i   t   @iÿÿÿÿ(   t   split(   R6   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   <lambda>ä   s    s   file:s   http:s   ftp:s   https:s   /repodata/repomd.xmlN(   RA   R6   t
   startswithRB   t   endswithRO   (   R   t   url2hostt   mirrorR6   t   host(    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   urlsß   s    		c         C   sÏ   t  |  j ƒ } t } xU |  j D]J } | s@ | d d d 7} n  | rS | d 7} n  t } | t  | ƒ 7} q Wt } xU |  j D]J } | sž | d d d 7} n  | r± | d 7} n  t } | t  | ƒ 7} q} W| S(   Ns   %s
t   -iO   s   
(   t   strR?   R   R@   R:   RA   (   R   R+   t   donet   orepomdR6   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR"   ü   s$        (   R   R   R   R   R\   R"   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyR<   ¯   s   	-	c          C   s~   d „  }  t  t j ƒ d k  r( |  ƒ  n  xO t j d D]@ } t j j | ƒ s] d G| GHq6 n  d G| GHt | ƒ GHd GHq6 Wd S(   s    MetaLinkRepoMD test function. c           S   s)   t  j d t  j d IJt  j d ƒ d  S(   Ns   Usage: %s <metalink> ...i    i   (   t   syst   stderrt   argvt   exit(    (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   usage  s    i   i   s   No such file:s   File:R#   N(   RO   Ra   Rc   RC   RD   RE   R<   (   Re   RP   (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   main  s    	
		t   __main__(    (    (    (   Ra   RC   R    t   urlgrabber.progressR    t   Errorst   yum.miscR   RF   t	   RepoErrorR   R   R   t   __XML_FMT__RI   RK   RM   R   R.   R<   Rf   R   (    (    (    s0   /usr/lib/python2.7/site-packages/yum/metalink.pyt   <module>   s&   




K2^	