;ò
>5¡@c           @   sb   d  k  Z  d k l Z d  k Z d f  d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d  S(   N(   s   PackageSackErrors   PackageSackc           B   sÅ   t  Z d  Z d „  Z d „  Z e e e e e d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z d „  Z e d „ Z d „  Z RS(   s*   represents sets (sacks) of Package Objectsc         C   sL   h  |  _ h  |  _ h  |  _ h  |  _ h  |  _ h  |  _ h  |  _ h  |  _ d  S(   N(	   s   selfs   nevras	   obsoletess   requiress   providess	   conflictss	   filenamess
   pkgsByRepos   pkgsByID(   s   self(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   __init__   s    							c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   lens   selfs   simplePkgList(   s   self(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   __len__#   s    c         C   sH   |  i i | | | | | f ƒ o |  i | | | | | f Sn g  Sd S(   s6   return list of pkgobjects matching the nevra requestedN(   s   selfs   nevras   has_keys   names   epochs   vers   rels   arch(   s   selfs   names   epochs   vers   rels   arch(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchNevra&   s     "c         C   s*   |  i i | ƒ o |  i | Sn g  Sd S(   s&   return list of packages based on pkgidN(   s   selfs   pkgsByIDs   has_keys   pkgid(   s   selfs   pkgid(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchID.   s     c         C   s*   |  i i | ƒ o |  i | Sn g  Sd S(   s<   return list of package requiring the name (any evr and flag)N(   s   selfs   requiress   has_keys   name(   s   selfs   name(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchRequires5   s     c         C   sd   g  } | d d j o | i |  i | ƒ ƒ n |  i i | ƒ o | i |  i | ƒ n | Sd S(   s<   return list of package providing the name (any evr and flag)i    s   /N(   s
   returnLists   names   extends   selfs   searchFiless   providess   has_key(   s   selfs   names
   returnList(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchProvides<   s     c         C   s*   |  i i | ƒ o |  i | Sn g  Sd S(   sC   return list of package conflicting with the name (any evr and flag)N(   s   selfs	   conflictss   has_keys   name(   s   selfs   name(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchConflictsG   s     c         C   s*   |  i i | ƒ o |  i | Sn g  Sd S(   s=   return list of package obsoleting the name (any evr and flag)N(   s   selfs	   obsoletess   has_keys   name(   s   selfs   name(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchObsoletesN   s     c         C   s*   |  i i | ƒ o |  i | Sn g  Sd S(   sq   return list of packages by filename
           FIXME - need to add regex match against keys in file list
        N(   s   selfs	   filenamess   has_keys   file(   s   selfs   file(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   searchFilesU   s     c         C   s4   | i | ƒ o g  | | <n | | i | ƒ d  S(   N(   s   dicts   has_keys   keys   appends   data(   s   selfs   dicts   keys   data(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   _addToDictAsList^   s    c         C   sp   | i | ƒ o g  | | <n y | | i | ƒ Wn t j
 o n Xt | | ƒ d j o | | =n d  S(   Ni    (   s   dicts   has_keys   keys   removes   datas
   ValueErrors   len(   s   selfs   dicts   keys   data(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   _delFromListOfDicte   s    c         C   sú  | i ƒ  \ } } } }
 } |  i |  i	 | | | |
 | f | ƒ |  i |  i	 | t
 t
 t
 t
 f | ƒ x? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ qu Wx? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ q· Wx? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ qù Wx? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ q;WxD | i ƒ  D]6 } x- | i | ƒ D] }	 |  i |  i |	 | ƒ qWqzW|  i |  i | i d ƒ | ƒ |  i |  i | i d ƒ | ƒ d Sd S(   s"   add a pkgobject to the packageSacks	   obsoletess   requiress   providess	   conflictss   ids   repoidN(   s   objs   returnNevraTuples   names   epochs   vers   rels   archs   selfs   _addToDictAsLists   nevras   Nones
   returnPrcos   ns   fls   es   vs   rs	   obsoletess   requiress   providess	   conflictss   returnFileTypess   ftypes   returnFileEntriess   files	   filenamess   pkgsByIDs   returnSimples
   pkgsByRepo(   s   selfs   objs   ftypes   vers   names   fls   ns   epochs   rs   files   rels   vs   archs   e(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys
   addPackageq   s0     %%      c         C   sú  | i ƒ  \ } } } }
 } |  i |  i	 | | | |
 | f | ƒ |  i |  i	 | t
 t
 t
 t
 f | ƒ x? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ qu Wx? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ q· Wx? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ qù Wx? | i d ƒ D]. \ } } \ } } } |  i |  i | | ƒ q;WxD | i ƒ  D]6 } x- | i | ƒ D] }	 |  i |  i |	 | ƒ qWqzW|  i |  i | i d ƒ | ƒ |  i |  i | i d ƒ | ƒ d Sd S(   s   delete a pkgobjects	   obsoletess   requiress   providess	   conflictss   ids   repoidN(   s   objs   returnNevraTuples   names   epochs   vers   rels   archs   selfs   _delFromListOfDicts   nevras   Nones
   returnPrcos   ns   fls   es   vs   rs	   obsoletess   requiress   providess	   conflictss   returnFileTypess   ftypes   returnFileEntriess   files	   filenamess   pkgsByIDs   returnSimples
   pkgsByRepo(   s   selfs   objs   ftypes   vers   names   fls   ns   epochs   rs   files   rels   vs   archs   e(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys
   delPackage‰   s0     %%      c         C   sZ   g  } | t j o2 x< |  i i ƒ  D] } | i |  i | ƒ q# Wn |  i | } | Sd S(   s2   return list of all packages, takes optional repoidN(	   s
   returnLists   repoids   Nones   selfs
   pkgsByRepos   keyss   repos   extends
   returnlist(   s   selfs   repoids
   returnlists   repos
   returnList(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   returnPackages    s      c         C   sÛ   h  } xÄ |  i ƒ  D]¶ }	 |	 i ƒ  \ } } }
 } } | i
 | | f ƒ o |	 | | | f <q | | | f } | i ƒ  \ } } } t i | |
 | f | | | f ƒ } | d j o |	 | | | f <q q W| i ƒ  Sd S(   sô   return list of newest packages based on name, arch matching
           this means(in name.arch form): foo.i386 and foo.noarch are not 
           compared to each other for highest version only foo.i386 and 
           foo.i386 will be comparedi    N(   s   highdicts   selfs   returnPackagess   pkgs   returnNevraTuples   ns   es   vs   rs   as   has_keys   pkg2s	   returnEVRs   e2s   v2s   r2s   mdUtilss
   compareEVRs   rcs   values(   s   selfs   as   es   r2s   rcs   ns   v2s   rs   pkg2s   pkgs   vs   highdicts   e2(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   returnNewestByNameArch«   s      $c         C   sÃ   h  } x¬ |  i ƒ  D]ž }	 |	 i ƒ  \ } } }
 } } | i
 | ƒ o |	 | | <q | | } | i ƒ  \ } } } t i | |
 | f | | | f ƒ } | d j o |	 | | <q q W| i ƒ  Sd S(   sµ   return list of newest packages based on name matching
           this means(in name.arch form): foo.i386 and foo.noarch will
           be compared to each other for highest versioni    N(   s   highdicts   selfs   returnPackagess   pkgs   returnNevraTuples   ns   es   vs   rs   as   has_keys   pkg2s	   returnEVRs   e2s   v2s   r2s   mdUtilss
   compareEVRs   rcs   values(   s   selfs   as   es   r2s   rcs   ns   v2s   rs   pkg2s   pkgs   vs   highdicts   e2(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   returnNewestByName¾   s      
$c   	      C   s_   g  } xN |  i | ƒ D]= } | i ƒ  \ } } } } } | i | | | | | f ƒ q W| Sd S(   sL   returns a list of pkg tuples (n, a, e, v, r) optionally from a single repoidN(   s
   simplelists   selfs   returnPackagess   repoids   pkgs   returnNevraTuples   ns   es   vs   rs   as   append(	   s   selfs   repoids   as   es   ns   rs   pkgs   vs
   simplelist(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   simplePkgListÓ   s       c         C   s&   x |  i ƒ  D] } | i ƒ  GHq Wd  S(   N(   s   selfs   returnPackagess   pkgs   returnNevraPrintable(   s   selfs   pkg(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   printPackagesÛ   s     (   s   __name__s
   __module__s   __doc__s   __init__s   __len__s   Nones   searchNevras   searchIDs   searchRequiress   searchProvidess   searchConflictss   searchObsoletess   searchFiless   _addToDictAsLists   _delFromListOfDicts
   addPackages
   delPackages   returnPackagess   returnNewestByNameArchs   returnNewestByNames   simplePkgLists   printPackages(    (    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   PackageSack   s&    															s   XMLPackageSackc           B   sS   t  Z d  Z d „  Z e d „ Z d d „ Z e d „ Z e d „ Z e d „ Z	 RS(   s…   Derived class from PackageSack to build list from XML metadata file. 
       Needs the Package Object Class passed to it for the Sackc         C   s#   t  i |  ƒ h  |  _ | |  _ d  S(   N(   s   PackageSacks   __init__s   selfs
   repoStatuss   pkgObjectClass(   s   selfs   pkgObjectClass(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   __init__é   s    	c         C   sð   y t  i | ƒ } Wn# t  i j
 o t d | ‚ nµ X| i ƒ  | i ƒ  } | d j o |  i
 | | | ƒ nz | d j o+ |  i | ƒ o |  i | | | ƒ qì nB | d j o+ |  i | ƒ o |  i | | | ƒ qì n
 d | GHd S(   sÒ   takes a repository id and an xml file. It populates whatever it can, 
           if you try to populate with a filelist or other metadata file 
           before the primary metadata you'll not like the resultss    Invalid or non-existent file: %ss   metadatas	   filelistss	   otherdatas$   Error: other unknown root element %sN(   s   libxml2s   newTextReaderFilenames   files   readers	   treeErrors   PackageSackErrors   Reads   Names   xmlfiletypes   selfs   loadPrimaryMDs   repoids   callbacks   _checkRepoStatuss
   loadFileMDs   loadOtherMD(   s   selfs   repoids   files   callbacks   xmlfiletypes   reader(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   addFileñ   s      
s   primaryc         C   s;   |  i i | ƒ o  | |  i | j o d Sq3 n d Sd S(   s    return 1 if itemcheck is in repoi   i    N(   s   selfs
   repoStatuss   has_keys   repoids	   itemcheck(   s   selfs   repoids	   itemcheck(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   _checkRepoStatus  s
     c         C   s  | i ƒ  } xµ | o­ | i ƒ  d j o | i ƒ  } q n | i ƒ  d j o | i ƒ  d j oN | i ƒ  o= | i d ƒ d j o# |  i | | ƒ } |  i | ƒ q¬ q° n | i ƒ  } q q W|  i i | ƒ o g  |  i | <n d |  i | j o |  i | i d ƒ n d S(   s4   load all the data from the primary metadata xml filei   i   s   packages   types   rpms   primaryN(   s   readers   Reads   rets   NodeTypes   Names   HasAttributess   GetAttributes   selfs   pkgObjectClasss   repoids   pos
   addPackages
   repoStatuss   has_keys   append(   s   selfs   readers   repoids   callbacks   rets   po(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   loadPrimaryMD  s&     
  &c         C   sî  | i ƒ  } x®| o¦| i ƒ  d j o | i ƒ  } q n | i ƒ  d j o | i ƒ  d j oG| i ƒ  o6| i d ƒ } |  i	 | ƒ } d }
 | i ƒ  }	 xî | D]æ } | i d ƒ | j oÊ |
 d 7}
 | i ƒ  x³ n o§ | i ƒ  d j o | i ƒ  |	 j o Pnj | i ƒ  d j o | i ƒ  } qà nD | i ƒ  d j o0 | i ƒ  d j o | i | ƒ \ } } qtn | i ƒ  } qà qà Wq¦ q¦ W|
 d j  o q¥q©n | i ƒ  } q q Wd	 |  i | j o |  i | i d	 ƒ n d
 S(   s,   load all the filelist metadata from the filei   i   s   packages   pkgidi    s   repoidi   s   files   filelistN(   s   readers   Reads   rets   NodeTypes   Names   HasAttributess   GetAttributes   pkgids   selfs   searchIDs   pkgss   pkgmatchs   Depths   mydepths   pkgs   returnSimples   repoids	   LocalNames   loadFileEntrys   ftypes   files
   repoStatuss   append(   s   selfs   readers   repoids   callbacks   pkgids   files   rets   ftypes   pkgss   mydepths   pkgmatchs   pkg(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys
   loadFileMD5  sH      & 

 &c   
      C   sæ  | i ƒ  } x¦| ož| i ƒ  d j o | i ƒ  } q n | i ƒ  d j o | i ƒ  d j o?| i ƒ  o.| i d ƒ } |  i	 | ƒ } d } | i ƒ  } xæ | D]Þ }	 |	 i d ƒ | j oÂ | d 7} | i ƒ  x« n oŸ | i ƒ  d j o | i ƒ  | j o Pnb | i ƒ  d j o | i ƒ  } qà n< | i ƒ  d j o( | i ƒ  d j o |	 i | ƒ qln | i ƒ  } qà qà Wq¦ q¦ W| d j  o qq¡n | i ƒ  } q q Wd	 |  i | j o |  i | i d	 ƒ n d
 S(   s4   load the changelog, etc data from the other.xml filei   i   s   packages   pkgidi    s   repoidi   s	   changelogs   otherN(   s   readers   Reads   rets   NodeTypes   Names   HasAttributess   GetAttributes   pkgids   selfs   searchIDs   pkgss   pkgmatchs   Depths   mydepths   pkgs   returnSimples   repoids	   LocalNames   loadChangeLogEntrys
   repoStatuss   append(
   s   selfs   readers   repoids   callbacks   pkgids   rets   pkgss   mydepths   pkgmatchs   pkg(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   loadOtherMDe  sH      & 

 &(
   s   __name__s
   __module__s   __doc__s   __init__s   Nones   addFiles   _checkRepoStatuss   loadPrimaryMDs
   loadFileMDs   loadOtherMD(    (    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   XMLPackageSackæ   s    	"0s   ListPackageSackc           B   s#   t  Z d  Z e d „ Z d „  Z RS(   sª   Derived class from PackageSack to build new Sack from list of
       pkgObjects - like one returned from self.returnNewestByNameArch()
       or self.returnNewestByName()c         C   s/   t  i |  ƒ | t j	 o |  i | ƒ n d  S(   N(   s   PackageSacks   __init__s   selfs   Objlists   Nones   addList(   s   selfs   Objlist(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   __init__˜  s    c         C   s"   x | D] } |  i | ƒ q Wd  S(   N(   s   ObjLists   pkgobjs   selfs
   addPackage(   s   selfs   ObjLists   pkgobj(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   addList  s     (   s   __name__s
   __module__s   __doc__s   Nones   __init__s   addList(    (    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   ListPackageSack“  s    (   s   libxml2s   mdErrorss   PackageSackErrors   mdUtilss   PackageSacks   XMLPackageSacks   ListPackageSack(   s   PackageSacks   libxml2s   ListPackageSacks   mdUtilss   PackageSackErrors   XMLPackageSack(    (    s9   /usr/share/rhn/up2date_client/repoBackends/packageSack.pys   ?   s
   		Ñ­