Ñò
óˆNc           @   sÓ  d  d k  Z  d  d k Z d  d k Z d  d k l Z d  d k l Z l Z d  d k Z d  d k Z d  d k	 Z	 d „  Z
 d e f d „  ƒ  YZ d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f 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 GHq‚Wx e i  D] Z! d e! i GHq±WqWn d S(   iÿÿÿÿN(   t   getenv(   t   Popent   PIPEc         C   s   t  i d |  ƒ S(   Ns
   python-apt(   t   gettextt   dgettext(   t   s(    (    s7   /usr/lib/python2.6/dist-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.6/dist-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.6/dist-packages/aptsources/distinfo.pyt   <lambda>:   s    (   t   mapR   (   R   t   comp(    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   has_component8   s    c         C   sE   t  | ƒ \ } } } | |  i j o |  i | i | | ƒ St Sd S(   s8    Check if a given url of a repository is a valid mirror N(   t	   split_urlR   t   has_repositoryR
   (   R   t   urlt   protot   hostnamet   dir(    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt	   is_mirror<   s    (   t   __name__t
   __module__R   R   R%   (    (    (    s7   /usr/lib/python2.6/dist-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.6/dist-packages/aptsources/distinfo.pyR   G   s    		c         C   s8   |  i  d  j	 o |  i  S|  i d  j	 o |  i Sd  Sd  S(   N(   R)   R   R   (   R   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   get_descriptionL   s
    c         C   s   | |  _  d  S(   N(   R   (   R   R*   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   set_descriptionT   s    c         C   s   | |  _  d  S(   N(   R)   (   R   R*   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   set_description_longW   s    c         C   s   |  i  S(   N(   R)   (   R   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   get_description_longZ   s    N(   R&   R'   R   R   R,   R-   R.   R/   (    (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR(   E   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$   R3   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR   a   s    		c         C   s   |  i  i t | | ƒ ƒ d  S(   N(   R1   t   appendt
   Repository(   R   R"   R$   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR2   g   s    c            s   t  ‡  f d †  |  i ƒ S(   Nc            s   |  i  ˆ  j S(    (   R"   (   t   r(   R"   (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR   k   s    (   t   filterR1   (   R   R"   (    (   R"   s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   get_repositories_for_protoj   s    c         C   sO   | d  j o t Sx6 |  i D]+ } | i | j o | | i j o t Sq Wt S(   N(   R   R
   R1   R"   R$   R   (   R   R"   R$   R6   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR    m   s    
  	c            s   t  ‡  f d †  ˆ  i ƒ S(   Nc            s   |  i  ˆ  i ƒ S(    (   t   get_urlR#   (   R6   (   R   (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR   v   s    (   R   R1   (   R   (    (   R   s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   get_repo_urlsu   s    c         C   s   |  i  S(   N(   R3   (   R   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   get_locationx   s    c         C   s   | |  _  d  S(   N(   R3   (   R   R3   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   set_location{   s    N(   R&   R'   t   __doc__R   R   R2   R8   R    R:   R;   R<   (    (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR0   ^   s   					R5   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.6/dist-packages/aptsources/distinfo.pyR      s    	c         C   s   |  i  |  i f S(   N(   R"   R$   (   R   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   get_info…   s    c         C   s   d |  i  | |  i f S(   Ns
   %s://%s/%s(   R"   R$   (   R   R#   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR9   ˆ   s    (   R&   R'   R   R>   R9   (    (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR5      s   		c         C   sD   t  i d |  d d ƒ} x% t | ƒ d j  o | i d ƒ q W| S(   sE    split a given URL into the protocoll, the hostname and the dir part s   :*\/+t   maxspliti   i   N(   t   ret   splitt   lenR4   R   (   R!   RA   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR   Œ   s
     t   DistInfoc           B   s    e  Z d d  d „ Z d „  Z RS(   s   /usr/share/python-apt/templatesc         C   su  d |  _  g  |  _ t i i d ƒ |  _ d  } t i d ƒ } t i d ƒ } | pq y/ t	 d d d g d t
 ƒi ƒ  d	 i ƒ  } WqÃ t j
 o/ } | i t i j o d
 G| GHn d } qÃ Xn | |  _ h  } d | | f } t | ƒ }	 |	 p d  Sd  }
 d  } xL|	 D]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 |
 _ x6|  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 oXt$ i% i& | ƒ o | p t$ i% i' t$ i% i( | | ƒ ƒ } | | j oÿ h  } y= t) | i* g  } t | ƒ D] } | | i ƒ  q°~ ƒ } Wn t+ j
 o d GHg  } n XxŠ | D]‚ } | i, d ƒ o | i- d  | ƒ } qøn t. | ƒ \ } } } | | j o | | i/ | | ƒ qøt0 | | | | ƒ | | <qøW| | | <n | | |
 _1 q| d! j o t | ƒ |
 _2 q| d" j o? | o( |
 i3 | i ƒ o |
 i4 i | ƒ n t5 | ƒ } q| d# j o | i6 t | ƒ ƒ q| d$ j o | i7 t | ƒ ƒ qqW|  i |
 | ƒ d  }
 d  } d  S(%   Nt    s   APT::Architectures   ^#LOC:(.+)$sJ   ^(#LOC:.+)|(((http)|(ftp)|(rsync)|(file)|(https))://[A-Za-z0-9/\.:\-_@]+)$t   lsb_releases   -is   -st   stdouti    s,   WARNING: lsb_release failed, using defaults:t   Debians
   %s/%s.infot   :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(8   t   metarelease_urit	   templatest   apt_pkgt   configt   findt   archR   R@   t   compileR   R   t   communicatet   stript   OSErrort   errnot   ENOENTt   distt   openRA   RB   R   t   changelogs_urit   finish_templateR   R	   R   R   R   R   R   R4   R   R   R   R   R   t   ost   patht   isabst   abspatht   joinR7   t   matcht	   Exceptiont
   startswitht   subR   R2   R0   R   R   R   R   R(   R-   R.   (   R   Rb   t   base_dirR3   t	   match_loct   match_mirror_linet   exct   map_mirror_setst
   dist_fnamet	   dist_filet   templatet	   componentt   linet   tokenst   fieldt   valuet   nannyR   t   _[1]t   xt   mirror_dataR"   R#   R$   (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyR   –   sÆ    				 				
 !	4 c         C   sï   | p d S| i  d j o= | i o3 x0 | i D]! } | i  o | i  | _  Pq0 q0 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   R4   RW   (   R   Rv   Rw   t   t(    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyRe     s$    
 

 

N(   R&   R'   R   R   Re   (    (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyRC   ”   s   lt   __main__t   Ubuntus   /usr/share/python-apt/templatess
   
Suite: %ss   Desc: %ss   BaseURI: %ss   MatchURI: %ss   Mirrors: %ss    %s -%s -%ss     %s("   R`   Rf   R   R    t
   subprocessR   R   t   ConfigParserR@   RX   R   t   objectR   R(   R0   R5   R   RC   R&   t   dRd   RW   Rv   R	   R   R   R   R   t   keysR   R   R)   R   R   (    (    (    s7   /usr/lib/python2.6/dist-packages/aptsources/distinfo.pyt   <module>   sB   	!	…
 
 	
 