ó
°‹Nc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z m Z d  d l Z d  d l	 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 k re d d ƒ Z e j e j ƒ xï e j D]á Z e j d e j ƒ e j d e j ƒ e j d e j ƒ e j d e j ƒ e j i  k r¥e j d e j j ƒ  ƒ n  x4 e j D]) Z e j d e j e j e j  f ƒ q¯Wx% e j! D] Z" e j d e" j ƒ qæWq#Wn  d S(   iÿÿÿÿN(   t   getenv(   t   Popent   PIPEc         C   s   t  j d |  ƒ S(   Ns
   python-apt(   t   gettextt   dgettext(   t   s(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   _#   s    t   Templatec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s‚   d  |  _ t |  _ g  |  _ d  |  _ d  |  _ d  |  _ d  |  _ g  |  _	 g  |  _
 d  |  _ i  |  _ d  |  _ t |  _ t |  _ d  S(   N(   t   Nonet   namet   Falset   childt   parentst
   match_namet   descriptiont   base_urit   typet
   componentst   childrent	   match_urit
   mirror_sett   distributiont   Truet	   availablet   official(   t   self(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   __init__)   s    													c         C   s   | t  d „  |  j ƒ k S(   s8    Check if the distribution provides the given component c         S   s   |  j  S(   N(   R	   (   t   c(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   <lambda>;   s    (   t   mapR   (   R   t   comp(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   has_component9   s    c         C   sC   t  | ƒ \ } } } | |  j k r; |  j | j | | ƒ St 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.7/dist-packages/aptsources/distinfo.pyt	   is_mirror=   s    (   t   __name__t
   __module__R   R   R&   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   '   s   		t	   Componentc           B   sP   e  Z d d d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R	   R   t   description_longt   parent_component(   R   R	   t   desct	   long_descR+   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   H   s    			c         C   s   |  j  S(   N(   R+   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_parent_componentN   s    c         C   s   | |  _  d  S(   N(   R+   (   R   t   parent(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_parent_componentQ   s    c         C   s4   |  j  d  k	 r |  j  S|  j d  k	 r, |  j Sd  Sd  S(   N(   R*   R   R   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_descriptionT   s
    c         C   s   | |  _  d  S(   N(   R   (   R   R,   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_description\   s    c         C   s   | |  _  d  S(   N(   R*   (   R   R,   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_description_long_   s    c         C   s   |  j  S(   N(   R*   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_description_longb   s    N(
   R'   R(   R   R   R.   R0   R1   R2   R3   R4   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR)   F   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  |  _ |  j | | ƒ | |  _ d  S(   N(   R$   t   repositoriest   add_repositoryt   location(   R   R#   R$   R%   R8   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   i   s    		c         C   s   |  j  j t | | ƒ ƒ d  S(   N(   R6   t   appendt
   Repository(   R   R#   R%   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR7   o   s    c            s   t  ‡  f d †  |  j ƒ S(   Nc            s   |  j  ˆ  k S(   N(   R#   (   t   r(   R#   (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   s   s    (   t   filterR6   (   R   R#   (    (   R#   s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_repositories_for_protor   s    c         C   sJ   | d  k r t Sx3 |  j D]( } | j | k r | | j k r t Sq Wt S(   N(   R   R
   R6   R#   R%   R   (   R   R#   R%   R;   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR!   u   s    c            s   t  ‡  f d †  ˆ  j ƒ S(   Nc            s   |  j  ˆ  j ƒ S(   N(   t   get_urlR$   (   R;   (   R   (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   ~   s    (   R   R6   (   R   (    (   R   s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_repo_urls}   s    c         C   s   |  j  S(   N(   R8   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_location€   s    c         C   s   | |  _  d  S(   N(   R8   (   R   R8   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_locationƒ   s    N(   R'   R(   t   __doc__R   R   R7   R=   R!   R?   R@   RA   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR5   f   s   					R:   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.7/dist-packages/aptsources/distinfo.pyR   ‰   s    	c         C   s   |  j  |  j f S(   N(   R#   R%   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_info   s    c         C   s   d |  j  | |  j f S(   Ns
   %s://%s/%s(   R#   R%   (   R   R$   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR>      s    (   R'   R(   R   RC   R>   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR:   ‡   s   		c         C   sB   t  j d |  d d ƒ} x# t | ƒ d k  r= | j 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   lenR9   R   (   R"   RF   (    (    s7   /usr/lib/python2.7/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   s  d |  _  g  |  _ t j j d ƒ |  _ d  } t j d ƒ } t j d ƒ } | sÅ y/ t	 d d d g d t
 ƒj ƒ  d	 j ƒ  } WqÅ t k
 rÁ } | j t j k r¸ t j d
 | ƒ n  d } qÅ Xn  | |  _ i  } d | | f } t | ƒ —}	 d  }
 d  } xe|	 D]]} | j d d ƒ } t | ƒ d k  r6qn  | d	 j ƒ  } | d j ƒ  } | d k rtt | ƒ |  _ q| d k rŒ| |  _  q| d k rÙ|  j |
 | ƒ d  } t ƒ  }
 | |
 _ | |
 _ d | |
 _ q| d k rñ| |
 _ q| d k rOt |
 _ xZ|  j D]8 } | j | k r|
 j j  | ƒ | j! j  |
 ƒ qqWq| d k rpt j" | ƒ |
 _# q| d k r‘t j" | ƒ |
 _$ q| d k r©| |
 _% q| d k rË|
 j& rË| |
 _& q| d |  j k rê| |
 _& q| d k r|
 j' r| |
 _' q| d |  j k r+| |
 _' q| d k sJ| d |  j k ržt( j) j* | ƒ rb| p€t( j) j+ t( j) j, | | ƒ ƒ } | | k rŽi  } yD t | ƒ 2 } t- | j. g  | D] } | j ƒ  ^ q·ƒ } Wd  QXWn t/ k
 r÷d GHg  } n Xx† | D]~ } | j0 d  ƒ r,| j1 d! | ƒ } qÿn  t2 | ƒ \ } } } | | k rd| | j3 | | ƒ qÿt4 | | | | ƒ | | <qÿW| | | <n  | | |
 _5 q| d" k r¼t | ƒ |
 _6 q| d# k r| rô|
 j7 | j ƒ rô|
 j8 j  | ƒ n  t9 | ƒ } q| d$ k r%| j: t | ƒ ƒ q| d% k rG| j; t | ƒ ƒ q| d& k r| j< | ƒ qqW|  j |
 | ƒ d  }
 d  } Wd  QXd  S('   Nt    s   APT::Architectures   ^#LOC:(.+)$sS   ^(#LOC:.+)|(((http)|(ftp)|(rsync)|(file)|(mirror)|(https))://[A-Za-z0-9/\.:\-_@]+)$t   lsb_releases   -is   -st   stdouti    s#   lsb_release failed, using defaults:t   Debians
   %s/%s.infot   :i   i   t   ChangelogURIt   MetaReleaseURIt   Suites   ^%s$t	   MatchNamet   ParentSuitet	   Availablet   Officialt   RepositoryTypet   BaseURIs
   BaseURI-%st   MatchURIs   MatchURI-%st   MirrorsFiles   MirrorsFile-%ss#   WARNING: Failed to read mirror files   #LOC:s   \1t   DescriptionR)   t   CompDescriptiont   CompDescriptionLongt   ParentComponent(=   t   metarelease_urit	   templatest   apt_pkgt   configt   findt   archR   RE   t   compileR   R   t   communicatet   stript   OSErrort   errnot   ENOENTt   loggingt   warnt   distt   openRF   RG   R   t   changelogs_urit   finish_templateR   R	   R   R   R   R   R   R9   R   t   string_to_boolR   R   R   R   R   t   ost   patht   isabst   abspatht   joinR<   t   matcht	   Exceptiont
   startswitht   subR    R7   R5   R   R   R   R   R)   R2   R3   R0   (   R   Rk   t   base_dirR8   t	   match_loct   match_mirror_linet   exct   map_mirror_setst
   dist_fnamet	   dist_filet   templatet	   componentt   linet   tokenst   fieldt   valuet   nannyR   t   value_ft   xt   mirror_dataR#   R$   R%   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   ž   sÊ    								!	)
c         C   s   | s
 d S| j  d k rR | j rR x- | j D] } | j  r, | j  | _  Pq, q, Wn  | j i  k rš | j rš x- | j D] } | j  rt | j | _ Pqt qt Wn  | rÌ | j | j ƒ rÌ | j j | ƒ d } n  x | j D] } | j	 | _	 qÖ W|  j
 j | ƒ d S(   s    finish the current tempalte N(   R   R   R   R   R   R   R	   R   R9   R   R^   (   R   R€   R   t   t(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyRn     s$    			N(   R'   R(   R   R   Rn   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyRH   œ   s   qt   __main__t   Ubuntus   /usr/share/python-apt/templatess
   
Suite: %ss   Desc: %ss   BaseURI: %ss   MatchURI: %ss   Mirrors: %ss    %s -%s -%ss     %s(#   Rg   Ri   Rp   R   R    t
   subprocessR   R   RE   R_   R   t   objectR   R)   R5   R:   R    RH   R'   t   dt   infoRm   R^   R€   R	   R   R   R   R   t   keysR   R   R*   R   R   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   <module>   s<   	 !	