
ȔMc           @   sj  d  d l  m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 m Z d  d l Td  d l m Z d  d l Td  d l m Z d  d	 l 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 e f d     YZ d   Z e j d e  d   Z d   Z e j d e  d	 S(   i(   t   Loadert   PackageInfo(   t   globdistance(   t   TagFile(   t   FileChannel(   t   parserelationt   parserelations(   t   *(   t   Progress(   t   StringIONc         C   s#   t  |  t  r |  St |  d d  S(   Ns   UTF-8t   replace(   t
   isinstancet   unicode(   t   s(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   decode%   s    t   DebPackageInfoc           B   s   e  Z d  e f d     YZ 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 RS(   t   LazyDictc           B   s   e  Z d    Z RS(   c         C   s   | j  j | j  | _ | j S(   N(   t   _loadert   getDictt   _packaget   _dict(   t   selft   objt   type(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   __get__.   s    (   t   __name__t
   __module__R   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR   -   s   c         C   s   t  j |  |  | |  _ d  S(   N(   R   t   __init__R   (   R   t   packaget   loader(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR   4   s    c         C   s#   |  j  j d  } | r | g Sg  S(   Nt   homepage(   R   t   get(   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getReferenceURLs8   s    c         C   s;   |  j  j   } | r7 t j j | |  j  j |    g Sg  S(   N(   R   t   getURLt   ost   patht   joint   getFileName(   R   t   url(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getURLs>   s    "c         C   s   |  j  j |   S(   N(   R   t   getSize(   R   R&   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR(   D   s    c         C   s   |  j  j d  S(   Nt   md5sum(   R   R   (   R   R&   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getMD5G   s    c         C   s   |  j  j d  S(   Nt   sha1(   R   R   (   R   R&   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getSHAJ   s    c         C   s   |  j  j d  S(   Nt   sha256(   R   R   (   R   R&   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt	   getSHA256M   s    c         C   sE   |  j  j d  } | rA y t |  d SWqA t k
 r= qA Xn  d  S(   Ns   installed-sizei   (   R   R   t   longt
   ValueErrort   None(   R   t   size(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getInstalledSizeP   s    c         C   sQ   |  j  j d  } | rM | j d d  } t |  d k rM t | d  Sn  d S(   Nt   descriptions   
i   i   u    (   R   R   t   splitt   lenR   (   R   R4   t   toks(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getDescriptionY   s    c         C   s6   |  j  j d  } | r2 t | j d d  d  Sd S(   NR4   s   
i   i    u    (   R   R   R   R5   (   R   R4   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt
   getSummarya   s    c         C   so   d d  l  } |  j j d  p' |  j j } | j d |  } | s[ d | |  j j f } n d | j   } | S(   Nit   sources   ([a-z0-9+-.]+)\s?\((.+)\)s   %s_%s(   t   reR   R   R   t   namet   matcht   versiont   groups(   R   R;   t
   sourcenamet   m(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt	   getSourceh   s    c         C   s   t  |  j j |  j   S(   N(   R   R   t
   getSectionR   (   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getGroupr   s    c         C   s   d S(   Nu    (    (   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt
   getLicenseu   s    c         C   s   |  j  j |   |  _ |  j S(   N(   R   t
   getChangest   _change(   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getChangeLogx   s    c         C   s"   |  j  j |   |  _ |  j j   S(   N(   R   t   getPathst   _pathst   keys(   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getPathList|   s    c         C   s   |  j  | d k S(   Nt   d(   RJ   (   R   R#   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt	   pathIsDir   s    c         C   s   |  j  | d k S(   Nt   f(   RJ   (   R   R#   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt
   pathIsFile   s    (   R   R   t   objectR   R   R   R    R'   R(   R*   R,   R.   R3   R8   R9   RB   RD   RE   RH   RL   RN   RP   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR   +   s&   													
					t   DebTagLoaderc           B   s   e  Z e j d  Z d 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(   i   c         C   s#   t  j |   | |  _ i  |  _ d  S(   N(   R    R   t   _baseurlt	   _sections(   R   t   baseurl(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR      s    	c         C   s   |  j  S(   N(   RS   (   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR!      s    c         C   s   |  j  | S(   N(   RT   (   R   t   pkg(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRC      s    c         C   s   t  | |   S(   N(   R   (   R   RV   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getInfo   s    c         C   s   t  j |   d  S(   N(   R    t   reset(   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRX      s    c   "   	   C   s  t  } t } t } t } t } t } t } t } t }	 t	 }
 t
 j |  j  } |  j   } t } xw|  j |  D]f\ } } | j d  } | r | | k r | d k r qp n  | ry% | j d d  j   \ } } } Wn t k
 r qp n X| d k rqp qn  | j d  } | j d  } | | | f g } i t | 6} | j d  } | rxL | j d	  D]8 } | j   } | j | t |  d  f  t | | <qhWn  g  } | j d
  } | r8xs t |  D]b } t |  t k	 r| \ } } } | j | t |  | | f  q| j | t |  f  qWn  | j d  } | rxm t |  D]\ } t |  t k	 r| \ } } } | j | | | | f  qZ| j | t |  f  qZWn  | | d | f g } g  }  | j d  } | r/x? t |  D]. } | \ } } } |  j |	 | | | f  qWn  | j d  } | rx? t |  D]. } | \ } } } |  j |
 | | | f  qQWn  |  j | | | f | | | |   }! | |! j |  <t | j d d   |  j |! <qp Wd  S(   Nt   architecturet   allt   statust    t	   installedR   R>   t   providest   ,t   dependss   pre-dependst   <t	   conflictst   breakst   section(   t
   DebPackaget   DebProvidest   DebNameProvidest   DebPreRequirest   DebRequirest   DebOrRequirest   DebOrPreRequirest   DebUpgradest   DebConflictst	   DebBreakst   ifacet   getProgresst   _cachet   getInstalledt   DEBARCHt   getSectionsR   R5   R0   t   Truet   stript   appendt   internR1   R   R   t   listt   tuplet   buildPackaget   loadersRT   ("   R   t   Pkgt   Prvt   NPrvt   PreReqt   Reqt   OrReqt   OrPreReqt   Upgt   Cnft   Brkt   progt   instt   sysarchRd   t   offsett   archt   wantt   flagR[   R<   R>   t   prvargst   prvdictt   valuet   prvnamet   reqargst   relationt   nt   rt   vt   upgargst   cnfargsRV   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   load   s    %	"    c         C   s  i  } x" |  j  D] } | | | j |  <q Wx|  j t    D]\ } } | j |  } | se q> n  d } | j r |  j | } x- | j D] } | j |  r d } Pq q Wn  | d k r | j | |  q> n  | j	 s | j
 r8| j d d  j d d  }	 t |	  d k r$|	 \ }
 } q8|	 d d }
 } n  | j	 rqx- | j	 D] } | j |
  rKd } PqKqKWn  | d k r| j | |  q> n  | j
 rx- | j
 D] } | j |  rd } PqqWn  | r> | j | |  q> q> Wd  S(   Ni    i   R4   R\   s   
i   (   t	   _packagesR|   Rt   R   R   t   groupRT   t   searcht	   addResultt   summaryR4   R5   R6   (   R   t   searchert   offsetsRV   Rd   R   t   ratioR   t   patR7   R   R4   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR      sJ    			c         C   s   t  d  d  S(   NsB   Subclasses of DebTagLoader must implement the getSections() method(   t	   TypeError(   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRt     s    c         C   s   t  d  d  S(   Ns>   Subclasses of DebTagLoader must implement the getDict() method(   R   (   R   RV   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s    c         C   s   t  d  d  S(   NsB   Subclasses of DebTagLoader must implement the getFileName() method(   R   (   R   t   info(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR%     s    c         C   s   t  d  d  S(   NsB   Subclasses of DebTagLoader must implement the getFileName() method(   R   (   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR(      s    c         C   s   g  S(   N(    (   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRF   $  s    c         C   s   i  S(   N(    (   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRI   '  s    N(   R   R   R    t   __stateversion__R1   R   R!   RC   RW   RX   R   R   Rt   R   R%   R(   RF   RI   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRR      s   					M	,					t   DebTagFileLoaderc           B   se   e  Z d	 Z d	 Z d	 d  d  d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d   Z RS(
   R\   c         C   sA   t  j |  |  | |  _ | |  _ | |  _ t |  j  |  _ d  S(   N(   RR   R   t	   _filenamet   _filelistsnamet   _changelognameR   t   _tagfile(   R   t   filenameRU   t   filelistsnamet   changelogname(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR   2  s
    			c         C   s   t  j j |  j  d S(   Ni   (   R"   R#   t   getsizeR   (   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   getLoadSteps9  s    c         c   s   |  j  } | j d  d } } } xa | j   r | | f V| j   } t | | | d  \ } } | j |  | j   | } q' Wd  S(   Ni    i   (   R   t	   setOffsett   advanceSectiont	   getOffsett   divmodt   addt   show(   R   R   t   tft
   lastoffsetR   t   modt   div(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRt   <  s    	
c         C   s1   |  j  j | j |   |  j  j   |  j  j   S(   N(   R   R   R|   R   t   copy(   R   RV   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR   H  s    c         C   s   | j  j d  S(   NR   (   R   R   (   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR%   M  s    c         C   s&   | j  j d  } | r" t |  Sd  S(   NR2   (   R   R   R/   R1   (   R   R   R2   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR(   P  s    
c   	      C   s+  |  j  s g  Sg  } xd d g D]} t j j |  j  | j j |  } t j j |  r  | j d  r d d  l } | j	 |  } n t	 |  } | j
   } x~ t r| s Pn  | j | j    | j
   } d } x5 | j d  s | d k r| | 7} | j
   } q W| j |  q WPq  q  W| S(   Ns   changelog.Debian.gzs   changelog.gzs   .gziR\   t    s   
(   R   R"   R#   R$   R   R<   t   isfilet   endswitht   gzipt   opent   readlineRu   Rw   Rv   t
   startswith(	   R   R   t   changest   basenameR   R   t   filet   linet   change(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRF   V  s.    	!	
c   	      C   sO  |  j  s= t j j t j j |  j  d | j j d  } n" t j j |  j  | j j d  } i  } t j j |  rK| d  d } i  } t j j |  r xJ t	 |  D]9 } | j
   } t |  d k r t | d | d <q q Wn  xE t	 |  D]7 } | j   } | r | | k r!d p$d	 | | <q q Wd
 | k rK| d
 =qKn  | S(   NR   s   .listit   md5sumsi   t   /i   RM   RO   s   /.(   R   R"   R#   R$   t   dirnameR   R   R<   R   R   R5   R6   Ru   Rv   (	   R   R   t   listnamet   pathst   md5namet   dirsR   R7   R#   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRI   p  s&    	4"#N(   R   R   R1   R   R   R   R   Rt   R   R%   R(   RF   RI   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR   +  s   						t   DebDirLoaderc           B   sA   e  Z d d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   sr   t  j |  d  t j j |  |  _ | r: | g |  _ n4 g  t j |  D] } | j d  rJ | ^ qJ |  _ d  S(   Ns   file:///s   .deb(	   RR   R   R"   R#   t   abspatht   _dirt
   _filenamest   listdirR   (   R   t   dirR   t   x(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s    c         C   s   t  |  j  S(   N(   R6   R   (   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s    c         c   s   x t  |  j  D]n \ } } t j j |  j |  } t |  } t t |   } | j	   | | f V| j
 d  | j   q Wd  S(   Ni   (   t	   enumerateR   R"   R#   R$   R   t
   getControlR   R	   R   R   R   (   R   R   t   iR   t   filepatht   controlR   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyRt     s    
c         C   sX   |  j  | j |  } t j j |  j |  } t |  } t t |   } | j	   | S(   N(
   R   R|   R"   R#   R$   R   R   R   R	   R   (   R   RV   R   R   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s    
c         C   sE   | j    } |  j | j |  } t j j |  j |  } | j d  S(   NR   (   t
   getPackageR   R|   R"   R#   R$   R   t   lstrip(   R   R   RV   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR%     s    c         C   sB   | j    } |  j | j |  } t j j t j j |  j |   S(   N(   R   R   R|   R"   R#   R   R$   R   (   R   R   RV   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR(     s    N(	   R   R   R1   R   R   Rt   R   R%   R(   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s   			
		t   DebFileChannelc           B   s   e  Z d    Z RS(   c         C   s   t  j j |  j  } | |  j k r( t S|  j   t  j j |  j  \ } } t | |  } | j	 |   |  j
 j |  | |  _ t S(   N(   R"   R#   t   getmtimeR   t   _digestRu   t   removeLoadersR5   R   t
   setChannelt   _loadersRw   (   R   t   fetchert   progresst   digestR   R   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   fetch  s    
	(   R   R   R   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s   c         C   s   |  j  d  r t |   Sd  S(   Ns   .deb(   R   R   R1   (   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   createFileChannel  s    
s   create-file-channelc         C   s_  d d l  m } d d l m } t |   } | j d  d k rM t d  n  xt rZ| j d  } | j d  } | j d	  } | j d	  } | j d  } | j d
  }	 | j d  }
 | d k rA| j t |	   } | |  } | j	 d d | } y | j
 d  } Wn  t k
 r6| j
 d  } n X| j   S| j t |	  d  qP Wd  S(   Ni(   R	   (   t   TarFilei   s   !<arch>
s   Invalid filei   i   i   i
   i   s   control.tar.gz  R\   t   fileobjs	   ./controlR   i   (   t	   cStringIOR	   t   tarfileR   R   t   readR0   Ru   t   intt   gzopent   extractfilet   KeyErrort   seekR1   (   R   R	   R   R   R<   t   datet   uidt   gidt   modeR2   t   magict   datat   sioR   R   (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyR     s0    	
c         C   sD   |  j  t j  |  j  t j  |  j  t j  |  j  t j  d  S(   N(   t   bindRR   R   R   R   Rt   R   (   t   psyco(    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   enablePsyco  s    s   enable-psyco(    t   smart.cacheR    R   t   smart.util.strtoolsR   t   smart.util.tagfileR   t   smart.channelR   t   smart.backends.deb.debverR   R   t   smart.backends.deb.baset   smart.progressR   t   smartR   R	   t   localet   statR"   R   R   RR   R   R   R   R   t   hookst   registerR   R   (    (    (    s=   /usr/lib/python2.7/dist-packages/smart/backends/deb/loader.pyt   <module>   s,   

	[[+			