ó
öòUc           @  s  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l Z d  d l	 Z	 d  d l	 m
 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 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ÿÿÿÿ(   t   print_functionN(   t   Popent   PIPE(   t   gettextt   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   | d „  |  j  Dƒ k S(   s8    Check if the distribution provides the given component c         s  s   |  ] } | j  Vq d  S(   N(   R   (   t   .0t   c(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pys	   <genexpr>9   s    (   R   (   R   t   comp(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   has_component7   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   F   s    			c         C  s   |  j  S(   N(   R'   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_parent_componentL   s    c         C  s   | |  _  d  S(   N(   R'   (   R   t   parent(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_parent_componentO   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_descriptionR   s
    c         C  s   | |  _  d  S(   N(   R   (   R   R(   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_descriptionZ   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_long`   s    N(
   R#   R$   R   R   R*   R,   R-   R.   R/   R0   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR%   D   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!   R4   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   g   s    		c         C  s   |  j  j t | | ƒ ƒ d  S(   N(   R2   t   appendt
   Repository(   R   R   R!   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR3   m   s    c         C  s)   g  |  j  D] } | j | k r
 | ^ q
 S(   N(   R2   R   (   R   R   t   r(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_repositories_for_protop   s    c         C  sJ   | d  k r t Sx3 |  j D]( } | j | k r | | j k r t Sq Wt S(   N(   R   R   R2   R   R!   R   (   R   R   R!   R7   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR   s   s    c         C  s&   g  |  j  D] } | j |  j ƒ ^ q
 S(   N(   R2   t   get_urlR    (   R   R7   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_repo_urls{   s    c         C  s   |  j  S(   N(   R4   (   R   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   get_location~   s    c         C  s   | |  _  d  S(   N(   R4   (   R   R4   (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   set_location   s    N(   R#   R$   t   __doc__R   R   R3   R8   R   R:   R;   R<   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR1   d   s   					R6   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.pyR9   Ž   s    (   R#   R$   R   R>   R9   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyR6   …   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   lenR5   R   (   R   RA   (    (    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  } xp|	 D]h} | 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 |
 _ xe|  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  } yJ t | ƒ 8 } t- t. | j/ g  | D] } | j ƒ  ^ qºƒ ƒ } Wd  QXWn! t0 k
 rt1 d ƒ g  } n Xx† | D]~ } | j2 d  ƒ r7| j3 d! | ƒ } q
n  t4 | ƒ \ } } } | | k ro| | j5 | | ƒ q
t6 | | | | ƒ | | <q
W| | | <n  | | |
 _7 q| d" k rÇt | ƒ |
 _8 q| d# k r| rÿ|
 j9 | j ƒ rÿ|
 j: j  | ƒ n  t; | ƒ } q| d$ k r0| j< t | ƒ ƒ q| d% k rR| 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   R@   t   compileR   R   t   communicatet   stript   OSErrort   errnot   ENOENTt   loggingt   warningt   distt   openRA   RB   t   _t   changelogs_urit   finish_templateR   R   R   R
   R   R   R	   R5   R   t   string_to_boolR   R   R   R   R   t   ost   patht   isabst   abspatht   joint   listt   filtert   matcht	   Exceptiont   printt
   startswitht   subR   R3   R1   R   R   R   R   R%   R.   R/   R,   (   R   Rf   t   base_dirR4   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   R5   R   RY   (   R   R   R€   t   t(    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyRj     s$    			N(   R#   R$   R   R   Rj   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyRC   š   s   rt   __main__t   Ubuntus   /usr/share/python-apt/templatess
   
Suite: %ss   Desc: %ss   BaseURI: %ss   MatchURI: %ss   Mirrors: %ss    %s -%s -%ss     %s(%   t
   __future__R    Rb   Rd   Rl   t
   subprocessR   R   R@   RZ   R   Rh   t   objectR   R%   R1   R6   R   RC   R#   t   dt   infoRi   RY   R   R   R   R   R   R   Rq   t   keysR   R   R&   R   R   (    (    (    s7   /usr/lib/python2.7/dist-packages/aptsources/distinfo.pyt   <module>   s:    !	Œ#