³ò
à ŠHc           @   sº  d  d k  Z  d  d k Z d  d k  l Z d  d k Z d  d k Z d  d k Z d  d k Z d „  Z d  d k Z d d d „  ƒ  YZ d d d „  ƒ  YZ	 d d d	 „  ƒ  YZ
 d
 d d „  ƒ  YZ d „  Z d d d „  ƒ  YZ e d j oÔ e d d ƒ Z e i GHxº e i D]« Z d e i GHd e i GHd e i GHd e i GHe i h  j o d e i i ƒ  GHn x, e i D]! Z d e i e i e i f GHqiWx e i D] Z d e i GHq˜WqWn d S(   iÿÿÿÿN(   t   getenvc         C   s   t  i d |  ƒ S(   Ns
   python-apt(   t   gettextt   dgettext(   t   s(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   _#   s    t   Templatec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sy   d  |  _ t |  _ g  |  _ d  |  _ d  |  _ d  |  _ d  |  _ g  |  _	 g  |  _
 d  |  _ h  |  _ d  |  _ t |  _ d  S(   N(   t   Nonet   namet   Falset   childt   parentst
   match_namet   descriptiont   base_urit   typet
   componentst   childrent	   match_urit
   mirror_sett   distributiont   Truet	   available(   t   self(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   __init__(   s    												c         C   s   | t  d „  |  i ƒ j S(   s8    Check if the distribution provides the given component c         S   s   |  i  S(    (   R   (   t   c(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   <lambda>9   s    (   t   mapR   (   R   t   comp(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   has_component7   s    c         C   sK   t  | ƒ \ } } } |  i i | ƒ o |  i | i | | ƒ Sn t Sd S(   s8    Check if a given url of a repository is a valid mirror N(   t	   split_urlR   t   has_keyt   has_repositoryR   (   R   t   urlt   protot   hostnamet   dir(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt	   is_mirror;   s    (   t   __name__t
   __module__R   R   R$   (    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   '   s   		t	   Componentc           B   s;   e  Z d d d  „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   R   t   description_long(   R   R   t   desct	   long_desc(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   D   s    		c         C   s>   |  i  d  j o |  i  Sn  |  i d  j o |  i Sn d  Sd  S(   N(   R(   R   R   (   R   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   get_descriptionH   s
    c         C   s   | |  _  d  S(   N(   R   (   R   R)   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   set_descriptionO   s    c         C   s   | |  _  d  S(   N(   R(   (   R   R)   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   set_description_longQ   s    c         C   s   |  i  S(   N(   R(   (   R   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   get_description_longS   s    N(   R%   R&   R   R   R+   R,   R-   R.   (    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR'   C   s
   			t   Mirrorc           B   sP   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s(    Storage for mirror related information c         C   s/   | |  _  g  |  _ |  i | | ƒ | |  _ d  S(   N(   R"   t   repositoriest   add_repositoryt   location(   R   R!   R"   R#   R2   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   X   s    		c         C   s   |  i  i t | | ƒ ƒ d  S(   N(   R0   t   appendt
   Repository(   R   R!   R#   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR1   ]   s    c            s   t  ‡  f d †  |  i ƒ S(   Nc            s   |  i  ˆ  j S(    (   R!   (   t   r(   R!   (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   `   s    (   t   filterR0   (   R   R!   (    (   R!   s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   get_repositories_for_proto_   s    c         C   sU   | d  j o t Sn x9 |  i D]. } | i | j o | | i j o t Sq q Wt S(   N(   R   R   R0   R!   R#   R   (   R   R!   R#   R5   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   a   s    
  c            s   t  ‡  f d †  ˆ  i ƒ S(   Nc            s   |  i  ˆ  i ƒ S(    (   t   get_urlR"   (   R5   (   R   (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   i   s    (   R   R0   (   R   (    (   R   s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   get_repo_urlsh   s    c         C   s   |  i  S(   N(   R2   (   R   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   get_locationj   s    c         C   s   | |  _  d  S(   N(   R2   (   R   R2   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   set_locationl   s    N(   R%   R&   t   __doc__R   R   R1   R7   R   R9   R:   R;   (    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR/   V   s   					R4   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R!   R#   (   R   R!   R#   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   p   s    	c         C   s   |  i  |  i f S(   N(   R!   R#   (   R   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyt   get_infos   s    c         C   s   d |  i  | |  i f S(   Ns
   %s://%s/%s(   R!   R#   (   R   R"   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR8   u   s    (   R%   R&   R   R=   R8   (    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR4   o   s   		c         C   s.   t  d „  t i d |  d d ƒd d d g ƒ S(   sE    split a given URL into the protocoll, the hostname and the dir part c         S   s   |  S(    (    (   t   at   b(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   z   s    s   :*\/+t   maxspliti   N(   R   t   ret   splitR   (   R    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   x   s    t   DistInfoc           B   s    e  Z d d  d „ Z d „  Z RS(   s   /usr/share/python-apt/templatesc      
   C   sí  d |  _  g  |  _ t i ƒ  t i i d ƒ |  _ d  } t i	 d ƒ } t i	 d ƒ } | p2 t
 i d ƒ } | i ƒ  i ƒ  } | i ƒ  ~ n | |  _ h  } d | | f } t | ƒ }	 |	 p d  Sn d  }
 d  } xö|	 D]î} | i d d ƒ } t | ƒ d	 j  o qÛ n | d
 i ƒ  } | d i ƒ  } | d j o t | ƒ |  _ qÛ | d j o | |  _  qÛ | d j oB |  i |
 | ƒ d  } t ƒ  }
 | |
 _ | |
 _ d | |
 _ qÛ | d j o | |
 _ qÛ | d j oU t |
 _ xà|  i D]: } | i | j o$ |
 i i | ƒ | i i |
 ƒ qðqðWqÛ | d j o | |
 _ qÛ | d j o | |
 _  qÛ | d j o |
 i! o | |
 _! qÛ | d |  i j o | |
 _! qÛ | d j o |
 i" o | |
 _" qÛ | d |  i j o | |
 _" qÛ | d j p | d |  i j o| i# | ƒ pá h  } y( t$ | i% t& t' i t | ƒ ƒ ƒ } Wn d GHg  } n Xx | D]… } | i( d ƒ o | i) d | ƒ } qmn t* | ƒ \ } } } | i# | ƒ o | | i+ | | ƒ qmt, | | | | ƒ | | <qmW| | | <n | | |
 _- qÛ | d j o t | ƒ |
 _. qÛ | d j o? | o( |
 i/ | i ƒ o |
 i0 i | ƒ n t1 | ƒ } qÛ | d j o | i2 t | ƒ ƒ qÛ | d j o | i3 t | ƒ ƒ qÛ qÛ W|  i |
 | ƒ d  }
 d  } d  S(    Nt    s   APT::Architectures   ^#LOC:(.+)$sF   ^(#LOC:.+)|(((http)|(ftp)|(rsync)|(file)|(https))://[A-Za-z/\.:\-_]+)$s   lsb_release -i -ss
   %s/%s.infot   :i   i   i    t   ChangelogURIt   MetaReleaseURIt   Suites   ^%s$t	   MatchNamet   ParentSuitet	   Availablet   RepositoryTypet   BaseURIs
   BaseURI-%st   MatchURIs   MatchURI-%st   MirrorsFiles   MirrorsFile-%ss#   WARNING: Failed to read mirror files   #LOC:s   \1t   DescriptionR'   t   CompDescriptiont   CompDescriptionLong(4   t   metarelease_urit	   templatest   apt_pkgt   initt   Configt   Findt   archR   RA   t   compilet   ost   popent   readt   stript   closet   distt   openRB   t   lenR   t   changelogs_urit   finish_templateR   R   R   R   R   R	   R
   R3   R   R   R   R   R   R   R6   t   matchR   t   stringt
   startswitht   subR   R1   R/   R   R   R   R   R'   R,   R-   (   R   R`   t   base_dirR2   t	   match_loct   match_mirror_linet   pipet   map_mirror_setst
   dist_fnamet	   dist_filet   templatet	   componentt   linet   tokenst   fieldt   valuet   nannyR   t   mirror_dataR!   R"   R#   (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyR   ~   sº    		

	 				
 	
 c         C   sò   | p d Sn | i  d j o= | i o3 x0 | i D]! } | i  o | i  | _  Pq3 q3 Wn | i h  j o= | i o3 x0 | i D]! } | i  o | i | _ Pq€ q€ Wn | o. | i | i ƒ o | i i | ƒ d } n |  i	 i | ƒ d S(   s    finish the current tempalte N(
   R   R   R	   R
   R   R   R   R   R3   RT   (   R   Rp   Rq   t   t(    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyRd   å   s$    
 

 

N(   R%   R&   R   R   Rd   (    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pyRC   }   s   et   __main__t   Ubuntus   /usr/share/python-apt/templatess
   
Suite: %ss   Desc: %ss   BaseURI: %ss   MatchURI: %ss   Mirrors: %ss    %s -%s -%ss     %s(    (    (    (    (    (   R[   R   R    t   ConfigParserRf   RU   R   RA   R   R'   R/   R4   R   RC   R%   t   dRc   RT   Rp   R   R   R   R   R   t   keysR   R   R(   R   R	   (    (    (    s7   /usr/lib/python2.5/site-packages/aptsources/distinfo.pys   <module>   sB   			}
 
 	
 