
ȔMc           @   s   d  d l  m Z m Z d  d l Td  d l Td  d l Z d  d l Z d  d l Z d  d l m	 Z	 d Z
 d e f d     YZ d e f d	     YZ d
 e f d     YZ d   Z e j d e  d S(   i(   t   PackageInfot   Loader(   t   *N(   t   expati  t   RPMRedCarpetPackageInfoc           B   sP   e  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/redcarpet.pyR   #   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/redcarpet.pyt   getURLs(   s    c         C   s   |  j  j d  S(   Nt   size(   R   R   (   R   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getSize.   s    c         C   s   |  j  j d  S(   Nt   md5(   R   R   (   R   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getMD51   s    c         C   s   |  j  j d  S(   Nt   sha(   R   R   (   R   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getSHA4   s    c         C   s   |  j  j d d  S(   Nt   descriptiont    (   R   R   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getDescription7   s    c         C   s   |  j  j d d  S(   Nt   summaryR   (   R   R   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt
   getSummary:   s    c         C   s   |  j  j d d  S(   Nt   groupR   (   R   R   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getGroup=   s    (
   t   __name__t
   __module__R   R   R   R   R   R   R   R   (    (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR   !   s   							t   RPMRedCarpetLoaderc           B   s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s,   t  j |   | |  _ | |  _ i  |  _ d  S(   N(   R   R   t	   _filenameR   t   _fileprovides(   R   t   filenamet   baseurl(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR   C   s    		c         C   s   t  j |   |  j j   d  S(   N(   R   t   resetR$   t   clear(   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR'   I   s    c         C   s^   |  j  } xN |  j D]C } x: |  j | D]+ } | | k r' | | t | d  f  q' q' Wq Wd  S(   N(   t   buildFileProvidesR$   t   RPMProvidest   None(   R   t   fndictt   bfpt   pkgt   fn(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   loadFileProvidesM   s
    	c         C   s   t  | |  | j |   S(   N(   R   t   loaders(   R   R.   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getInfoT   s    c         C   s   d S(   Ni    (    (   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   getLoadStepsW   s    c         C   s   t  |   j   d  S(   N(   t	   XMLParsert   parse(   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   loadZ   s    (   R    R!   R   R'   R0   R2   R3   R6   (    (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR"   A   s   					R4   c           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 d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   sO  | |  _  d |  _ d |  _ d  |  _ g  |  _ d |  _ d  |  _ d  |  _ d  |  _	 d  |  _
 d  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ d  |  _ i  |  _ i  |  _ x d D] } d | } t |  | d   } | j   } | r | |  j | <n  d | } t |  | d   } | r1| |  j | <n  t |  | j   |  q Wd  S(   Ni    R   t   Packaget   Namet   Summaryt   Descriptiont   Archt   Sectiont   Historyt   Updatet   Epocht   Versiont   Releaset   FileNamet   FileSizet   Requirest   Providest	   Conflictst	   Obsoletest   Deps   handle%sStarts   handle%sEnd(   R7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   R:   RD   RE   RF   RG   RH   (   R   t   _lastoffsett   _modR+   t	   _progresst   _queuet   _datat   _namet   _epocht   _versiont   _releaset   _archt   _reqdictt   _prvdictt   _upgdictt   _cnfdictt	   _filedictR   t   _skipt   _starthandlert   _endhandlert   getattrt   lowert   setattrt   upper(   R   R
   t   attrt   handlernamet   handlert   lattr(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR   `   sD    																				  


c         C   s   d |  _  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ |  j j   |  j	 j   |  j
 j   |  j j   |  j j   i  |  _ d  S(   NR   (   RM   R+   RN   RO   RP   RQ   RR   RS   R(   RT   RU   RV   RW   R   (   R   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   resetPackage   s    						c         C   sX   |  j  r d  S|  j j |  } | r5 | | |  n  d |  _ |  j j | | f  d  S(   NR   (   RX   RY   R   RM   RL   t   append(   R   t   namet   attrsRa   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   startElement   s    		c         C   s   |  j  rV | |  j  k rR d  |  _  d  } x( | | k rN |  j j   \ } } q* Wn  d  S|  j j   \ } } | | k s} t  |  j j |  } | r | | | |  j  n  d |  _ d  S(   NR   (   RX   R+   RL   t   popt   AssertionErrorRZ   R   RM   (   R   Re   RN   Rf   Ra   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt
   endElement   s    		c         C   s   |  j  | 7_  d  S(   N(   RM   (   R   t   data(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   charData   s    c         C   s   | |  _  d  S(   N(   RN   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleNameEnd   s    c         C   s   | |  _  d  S(   N(   RO   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleEpochEnd   s    c         C   s   | |  _  d  S(   N(   RP   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleVersionEnd   s    c         C   s   | |  _  d  S(   N(   RQ   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleReleaseEnd   s    c         C   s1   t  j |  d k r$ |  j |  _ n	 | |  _ d  S(   Ni    (   t   rpmt	   archscoret   PACKAGERX   RR   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleArchEnd   s    c         C   s   | |  j  d <d  S(   NR   (   R   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleSectionEnd   s    c         C   s   | |  j  d <d  S(   NR   (   R   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleSummaryEnd   s    c         C   s.   |  j  d d |  j k r* | |  j d <n  d  S(   Nii    R   (   RL   Rs   R   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleDescriptionEnd   s    c         C   s   | |  j  d <d  S(   NR   (   R   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleFileNameEnd   s    c         C   s   t  |  |  j d <d  S(   NR   (   t   intR   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleFileSizeEnd   s    c         C   s   |  j  |  _ d  S(   N(   t   HISTORYRX   (   R   Re   Rf   Rk   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleUpdateEnd   s    c         C   s  | j  d  } | s& | d  d k r* d  Sd | k r | j  d  } | j  d  } | j  d  } | } | r | d k r d	 | | f } n  | r d
 | | f } n  | j  d  } n d  } d  } |  j d d }	 |	 |  j k rt |  j t | | | f <n |	 |  j k rI| d d k r0t |  j | <qt |  j	 t
 | | f <ni |	 |  j k rt | | | f }
 t |  j |
 <t |  j |
 <n+ |	 |  j k rt |  j t | | | f <n  d  S(   NRe   i   s   rpmlib(s   config(t   versiont   epocht   releaset   0s   %s:%ss   %s-%st   opii    t   /(   s   rpmlib(s   config((   R   R+   RL   t   REQUIRESt   TrueRS   t   RPMRequirest   PROVIDESRW   RT   R*   t	   OBSOLETESt   RPMObsoletesRU   RV   t	   CONFLICTSt   RPMConflicts(   R   Re   Rf   Rk   t   et   vt   rR}   t   relationt   lastnamet   tup(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handleDepEnd   s8    c      	   C   s  |  j  } |  j } | r@ | d k r@ d | |  j |  j f } n d |  j |  j f } d | |  j f } t |  j t | d | f <g  |  j D][ } | d d  k s d | d k r t
 | d | d	 f |  j k p t j |   s | ^ q } |  j j   }	 |  j j   }
 |  j j   } x_ t t |	   D]K } |	 | } | d | k r-| d | k r-t | d | f |	 | <Pq-q-W|  j j t | | f |	 | | |
  } |  j | j |  j <|  j j j | g   j |  j j    |  j   |  j   d  S(
   NR   s   %s:%s-%ss   %s-%ss   %s@%st   <i   t   =i   i   (   RN   RO   RP   RQ   RR   R   RU   R   RS   R+   R*   RT   t   system_providest   matcht   keysRV   t   ranget   lent   RPMNameProvidesR   t   buildPackaget
   RPMPackageR   R1   R$   t
   setdefaultt   extendRW   Rc   t   updateProgress(   R   Re   Rf   Rk   R~   R}   t   versionarcht   xt   reqargst   prvargst   cnfargst   upgargst   iR   R.   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   handlePackageEnd   s4    		  
 
c         C   s_   |  j  j   } t | |  j |  j t  \ } |  _ | |  _ |  j j |  |  j j   d  S(   N(	   t   _filet   tellt   divmodRI   RJ   t   BYTESPERPKGRK   t   addt   show(   R   t   offsett   div(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR     s
    &	c         C   s   t  j d d  } |  j | _ |  j | _ |  j | _ t | _	 d |  _
 d |  _ t j |  j j  |  _ t |  j j  |  _ y | j t |  j j   Wn? t  j k
 r } t j t d  |  j j t |  f  n X|  j   |  j j   d  S(   Nt   namespace_separatort    i    s   Error parsing %s: %s(   R   t   ParserCreateRg   t   StartElementHandlerRj   t   EndElementHandlerRl   t   CharacterDataHandlert   Falset   returns_unicodeRI   RJ   t   ifacet   getProgressR   t   _cacheRK   t   openR#   R   t	   ParseFilet
   ExpatErrort   errort   _t   unicodeR   t   close(   R   t   parserR   (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR5   &  s     			
(   R    R!   R   Rc   Rg   Rj   Rl   Rm   Rn   Ro   Rp   Rt   Ru   Rv   Rw   Rx   Rz   R|   R   R   R   R5   (    (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyR4   ^   s(   	,																	 	%	c         C   s!   |  j  t j  |  j  t  d  S(   N(   t   bindR"   R0   R4   (   t   psyco(    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   enablePsyco:  s    s   enable-psyco(   t   smart.cacheR    R   t   smart.backends.rpm.baset   smartR   t   localet   ost   xml.parsersR   R   R   R"   t   objectR4   R   t   hookst   register(    (    (    s@   /usr/lib/python2.7/dist-packages/smart/backends/rpm/redcarpet.pyt   <module>   s   

 	