ó
È”Mc           @   s  d  d l  m Z m Z d  d l Ty d  d l m Z WnE e k
 r{ y d  d l Z Wn! e k
 rw d  d l m Z n Xn Xd  d l Td  d l	 Z	 d  d l
 Z
 d  d l Z d Z d Z d Z d Z d	 „  Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z e j d e ƒ d S(   iÿÿÿÿ(   t   PackageInfot   Loader(   t   *(   t   cElementTreeNs%   http://linux.duke.edu/metadata/commons"   http://linux.duke.edu/metadata/rpms(   http://linux.duke.edu/metadata/filelistsi¸  c         C   s   d |  | f S(   Ns   {%s}%s(    (   t   nst   tag(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   nstag-   s    t   RPMMetaDataPackageInfoc           B   s†   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z RS(   c         C   s&   t  j |  | ƒ | |  _ | |  _ d  S(   N(   R    t   __init__t   _loadert   _info(   t   selft   packaget   loadert   info(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyR   2   s    	c         C   s5   |  j  j d ƒ } | r1 t j |  j j | ƒ g Sg  S(   Nt   location(   R
   t   gett	   posixpatht   joinR	   t   _baseurl(   R   t   url(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getURLs7   s    c         C   s   |  j  j d ƒ S(   Nt
   build_time(   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getBuildTime=   s    c         C   s   |  j  j d ƒ S(   Nt   installed_size(   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getInstalledSize@   s    c         C   s   |  j  j d ƒ S(   Nt   size(   R
   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getSizeC   s    c         C   s   |  j  j d ƒ S(   Nt   md5(   R
   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getMD5F   s    c         C   s   |  j  j d ƒ S(   Nt   sha(   R
   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getSHAI   s    c         C   s   |  j  j d ƒ S(   Nt   sha256(   R
   R   (   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt	   getSHA256L   s    c         C   s   |  j  j d d ƒ S(   Nt   descriptiont    (   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getDescriptionO   s    c         C   s   |  j  j d d ƒ S(   Nt   summaryR#   (   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt
   getSummaryR   s    c         C   s   |  j  j d d ƒ g S(   NR   R#   (   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getReferenceURLsU   s    c         C   sI   |  j  j d d ƒ } | j d d ƒ } | j d d ƒ } | j d d ƒ S(   Nt	   sourcerpmR#   s   .srcs   .nosrcs   .rpm(   R
   R   t   replace(   R   R(   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt	   getSourceX   s    c         C   s   |  j  j d d ƒ S(   Nt   groupR#   (   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getGroup^   s    c         C   s   |  j  j d d ƒ S(   Nt   licenseR#   (   R
   R   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt
   getLicensea   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R!   R$   R&   R'   R*   R,   R.   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyR   0   s   													t   RPMMetaDataLoaderc           B   sT   e  Z e j d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   i   c         C   sG   t  j |  ƒ | |  _ | |  _ | |  _ i  |  _ t |  _ i  |  _ d  S(   N(	   R   R   t	   _filenamet   _filelistsnameR   t   _fileprovidest   Falset   _parsedflistt   _pkgids(   R   t   filenamet   filelistsnamet   baseurl(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyR   i   s    					c         C   s4   t  j |  ƒ |  j j ƒ  t |  _ |  j j ƒ  d  S(   N(   R   t   resetR4   t   clearR5   R6   R7   (   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyR;   r   s    	c         C   s   t  | |  | j |  ƒ S(   N(   R   t   loaders(   R   t   pkg(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getInfox   s    c         C   s   t  j j |  j ƒ t S(   N(   t   ost   patht   getsizeR2   t   BYTESPERPKG(   R   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   getLoadSteps{   s    c   ?   	   C   s»	  t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d	 ƒ }	 t  t d
 ƒ }
 t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } t  t d ƒ } i d d 6d d 6d d 6d d 6d d  6} d! } d! } t j |  j ƒ } d  } d  } d  } i  } i  } i  }  i  }! i  }" i  }# d  }$ g  }% t |  j ƒ }& xÈt	 j
 |& dA ƒ D]´\ }' }( |( j }) |' d" k rZ|$ rJ|) | k rJ|( j d$ ƒ d% k rJ| }$ qJn  |% j |( ƒ qõ|' d# k rõ|% j ƒ  |( k s~t ‚ |$ rœ|) |$ k rœ	d  }$ qœ	n |) | k rÕt j |( j ƒ d! k rÉ| }$ qœ	|( j } nÇ|) | k rí|( j } n¯|) | k rg|( j d& ƒ }* |* rB|* d' k rBd( |* |( j d) ƒ |( j d* ƒ f } qœ	d+ |( j d) ƒ |( j d* ƒ f } n5|) | k r|( j rœ	|( j | d <qœ	n|) | k r·|( j rœ	|( j | d <qœ	nå|) | k rß|( j rœ	|( j | d <qœ	n½|) |	 k r t |( j d ƒ ƒ | d	 <t |( j d, ƒ ƒ | d- <n||) |
 k rst |( j d ƒ ƒ | d
 <|( j d. ƒ rœ	t |( j d. ƒ ƒ | d/ <qœ	n)|) | k r¹|( j | |( j d$ ƒ <|( j d0 ƒ d1 k rœ	|( j }+ qœ	nã|) | k rÛ|( j d2 ƒ | d <nÁ|) | k r|( j rœ	|( j | d <qœ	n™|) | k r+|( j rœ	|( j | d <qœ	nq|) | k rS|( j rœ	|( j | d <qœ	nI|) | k rot |# |( j <n-|) | k r¨|( j d ƒ }, |, sõ|, d3  dB k r§qõn  d) |( j ƒ  k r`|( j d& ƒ }* |( j d) ƒ }- |( j d* ƒ }. |- }/ |* r|* d' k rd6 |* |/ f }/ n  |. r*d+ |/ |. f }/ n  d7 |( j ƒ  k rW| j |( j d7 ƒ ƒ }0 qld  }0 n d  }/ d  }0 |% d8 j }1 |1 | k rÌ|( j d9 ƒ d: k r³t | t |, |0 |/ f <q¥t | t |, |0 |/ f <qœ	|1 | k rK|, d! d; k rõt |# |, <q¥|, | k r&|/ | k r&d< |/ | f }/ t }2 n t }2 t |  |2 |, j d= ƒ |/ f <qœ	|1 | k r€t |, |0 |/ f }3 t |! |3 <t |" |3 <qœ	|1 | k rœ	t |" t |, |0 |/ f <qœ	nô|( j | k rœ	d< | | f }4 t |! t | d |4 f <g  | D]\ }5 |5 d> d  k s
d |5 d> k r't |5 d? |5 d@ f |  k p7t j |5 d@  Œ  sä|5 ^ qä}6 |  j ƒ  }7 |" j ƒ  }8 |! j ƒ  }9 |  j t  | |4 f |7 |6 |9 |8 ƒ }: | |: j! |  <|# ríxI |# D]> }; |  j" j |; ƒ }< |< sÙ|: g |  j" |; <q¨|< j |: ƒ q¨Wn  |+ r	|: |  j# |+ <n  d  } d  } d  } d  }+ | j$ ƒ  |  j$ ƒ  |! j$ ƒ  |" j$ ƒ  |# j$ ƒ  i  } |& j% ƒ  }= t& |= | | t' ƒ \ }> } |= } | j( |> ƒ | j) ƒ  n  |( j$ ƒ  qõqõW|& j* ƒ  d  S(C   Nt   metadataR   t   namet   archt   versionR%   R"   R   t   timeR   R   t   formatt   checksumt   fileR(   R+   R-   t   entryt   requirest   providest	   conflictst	   obsoletest   =t   EQt   <t   LTs   <=t   LEt   >t   GTs   >=t   GEi    t   startt   endt   typet   rpmt   epocht   0s   %s:%s-%st   vert   rels   %s-%st   buildR   t	   installedR   t   pkgidt   YESt   hrefi   s   rpmlib(s   config(s   %s:%st   flagsiÿÿÿÿt   pret   1t   /s   %s@%ss   utf-8i   i   i   (   s   starts   end(   s   rpmlib(s   config((+   R   t	   NS_COMMONt   NS_RPMt   ifacet   getProgresst   _cachet   Nonet   openR2   R   t	   iterparseR   R   t   appendt   popt   AssertionErrorR]   t	   archscoret   textt   intt   Truet   keyst   RPMPreRequirest   RPMRequirest   RPMNameProvidest   RPMProvidest   encodet   RPMObsoletest   RPMConflictst   system_providest   matcht   buildPackaget
   RPMPackageR=   R4   R7   R<   t   tellt   divmodRC   t   addt   showt   close(?   R   t   METADATAt   PACKAGEt   NAMEt   ARCHt   VERSIONt   SUMMARYt   DESCRIPTIONt   URLt   TIMEt   SIZEt   LOCATIONt   FORMATt   CHECKSUMt   FILEt	   SOURCERPMt   GROUPt   LICENSEt   ENTRYt   REQUIRESt   PROVIDESt	   CONFLICTSt	   OBSOLETESt   COMPMAPt
   lastoffsett   modt   progressRF   RH   RG   R   t   reqdictt   prvdictt   upgdictt   cnfdictt   filedictt   skipt   queueRL   t   eventt   elemR   t   eRd   t   enamet   vt   rt   eversiont	   erelationt   lasttagt   Prvt   tupt   versionarcht   xt   reqargst   prvargst   cnfargst   upgargsR>   R8   t   lstt   offsett   div(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   load~   sX   )		%"								
 




c         C   sÚ   |  j  } |  j } xÁ | D]¹ } | |  j k r• | s t |  _ } |  j | ƒ | |  j k rq d } |  j | <q’ |  j | } q¢ d } |  j | <n |  j | } | r x' | D] } | | t | d  f ƒ q¯ Wq q Wd  S(   N(    (    (   t   buildFileProvidesR6   R4   Ry   t   parseFilesListR~   Rp   (   R   t   fndictt   bfpt   parsedt   fnt   pkgsR>   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   loadFileProvidesk  s    		c         C   s|  t  t d ƒ } t  t d ƒ } |  j } |  j } d  } d  } t |  j ƒ } x t j | d ƒ D]\ }	 }
 |	 d k r× | rj|
 j	 | k rj|
 j
 d ƒ d k rª | } qÔ | j
 |
 j
 d ƒ ƒ } | sÔ | } qÔ qjq^ |	 d k r^ | r|
 j	 | k r]d  } q]nY |
 j	 | k r]|
 j | k r]| j
 |
 j ƒ } | sM| g | |
 j <q]| j | ƒ n  |
 j ƒ  q^ q^ W| j ƒ  d  S(	   NRL   R   RZ   R[   RG   t   srcRd   (   s   starts   end(   R   t   NS_FILELISTSR7   R4   Rp   Rq   R3   R   Rr   R   R   Rw   Rs   R<   RŠ   (   R   RÃ   R˜   RŒ   t   pkgidst   fileprovidesR>   Rª   RL   R¬   R­   RÇ   (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyRÂ     s4    			(   R/   R0   R   t   __stateversion__R   R;   R?   RD   RÀ   RÈ   RÂ   (    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyR1   e   s   						í	c         C   s4   |  j  t j ƒ |  j  t j ƒ |  j  t j ƒ d  S(   N(   t   bindR1   RÀ   RÈ   RÂ   (   t   psyco(    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   enablePsyco¡  s    s   enable-psyco(   t   smart.cacheR    R   t   smart.backends.rpm.baset	   xml.etreeR   t   ImportErrort
   smart.utilt   smartR   t   localeR@   Rk   Rl   RÊ   RC   R   R   R1   RÐ   t   hookst   register(    (    (    s?   /usr/lib/python2.7/dist-packages/smart/backends/rpm/metadata.pyt   <module>   s,   

	5ÿ =	