From 118917dc581ef5018d264baf5edce27087941ebf Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@cd1c1023-2f26-0410-ae45-c471fc1f0318> Date: Sat, 5 Jan 2008 10:28:04 +0000 Subject: [PATCH] some major work on Equo/Spritz interface, something is starting to work git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@996 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- spritz/src/etpgui/packages.py | 103 ++++++++++++++++++++++------------ spritz/src/filters.py | 57 +++++++++---------- spritz/src/gui.py | 36 ++++++------ spritz/src/spritz.py | 27 ++++++--- spritz/src/views.py | 26 ++++----- 5 files changed, 144 insertions(+), 105 deletions(-) diff --git a/spritz/src/etpgui/packages.py b/spritz/src/etpgui/packages.py index 8af909376..3a4ead9f3 100644 --- a/spritz/src/etpgui/packages.py +++ b/spritz/src/etpgui/packages.py @@ -26,67 +26,72 @@ class PackageWrapper: if matched_atom[1] == 0: self.dbconn = EquoConnection.clientDbconn + self.from_installed = True else: self.dbconn = EquoConnection.openRepositoryDatabase(matched_atom[1]) + self.from_installed = False self.matched_atom = matched_atom self.idpackage = self.matched_atom[0] - self.repository = self.matched_atom[1] - self.atom = self.dbconn.retrieveAtom(self.idpackage) - self.version = self.dbconn.retrieveVersion(self.idpackage) - self.versiontag = self.dbconn.retrieveVersionTag(self.idpackage) - self.revision = self.dbconn.retrieveRevision(self.idpackage) - self.pkgtuple = (self.version,self.versiontag,self.revision) - match = self.dbconn.atomMatch(self.atom) - if match[0] != -1: - self.available = True - else: - self.available = False def __str__(self): - return str(self.atom) + return str(self.dbconn.retrieveAtom(self.idpackage)) def __cmp__(self, pkg): - pkgcmp = EquoConnection.entropyTools.entropyCompareVersions(self.pkgtuple,pkg.pkgtuple) + pkgcmp = EquoConnection.entropyTools.entropyCompareVersions(self.getTup(),pkg.getTup()) return pkgcmp def getPkg(self): return self.matched_atom def getName(self): - return self.atom + return self.dbconn.retrieveAtom(self.idpackage) def getTup(self): - return self.pkgtuple + return (self.dbconn.retrieveVersion(self.idpackage),self.dbconn.retrieveVersionTag(self.idpackage),self.dbconn.retrieveRevision(self.idpackage)) def getRepoId(self): - return self.repository + if self.matched_atom[1] == 0: + return self.dbconn.retrievePackageFromInstalledTable(self.idpackage) + else: + return self.matched_atom[1] def getIdpackage(self): return self.idpackage + def getRevision(self): + return self.dbconn.retrieveRevision(self.idpackage) + def getVer(self): tag = "" - if self.versiontag: - tag = "#"+self.versiontag - tag += "~"+str(self.revision) - return self.version+tag + vtag = self.dbconn.retrieveVersionTag(self.idpackage) + if vtag: + tag = "#"+vtag + tag += "~"+str(self.dbconn.retrieveRevision(self.idpackage)) + return self.dbconn.retrieveVersion(self.idpackage)+tag - - def getSummaryFirst(self): - return str(self.dbconn.getBaseData(self.idpackage)) - - def getSummary(self): - return str(self.dbconn.getScopeData(self.idpackage)) + def getSlot(self): + return self.dbconn.retrieveSlot(self.idpackage) def getDescription(self): return self.dbconn.retrieveDescription(self.idpackage) - def getSize(self): + def getDownSize(self): return self.dbconn.retrieveSize(self.idpackage) - def getSizeFmt(self): + def getDiskSize(self): + return self.dbconn.retrieveOnDiskSize(self.idpackage) + + def getIntelligentSize(self): + if self.from_installed: + return self.getDiskSizeFmt() + else: + return self.getDownSizeFmt() + + def getDownSizeFmt(self): return EquoConnection.entropyTools.bytesIntoHuman(self.dbconn.retrieveSize(self.idpackage)) + def getDiskSizeFmt(self): + return EquoConnection.entropyTools.bytesIntoHuman(self.dbconn.retrieveOnDiskSize(self.idpackage)) def getArch(self): return etpConst['currentarch'] @@ -109,8 +114,29 @@ class PackageWrapper: rc = unicode( txt, 'iso-8859-1' ) return rc - def getAttr(self,attr): # XXX - return eval("self.dbconn.retrieve"+attr)(self.idpackage) + def getAttr(self,attr): + if attr == "description": + return self.dbconn.retrieveDescription(self.idpackage) + elif attr == "category": + return self.dbconn.retrieveCategory(self.idpackage) + elif attr == "license": + return self.dbconn.retrieveLicense(self.idpackage) + elif attr == "creationdate": + return self.dbconn.retrieveDateCreation(self.idpackage) + elif attr == "version": + return self.dbconn.retrieveVersion(self.idpackage) + elif attr == "revision": + return self.dbconn.retrieveRevision(self.idpackage) + elif attr == "versiontag": + t = self.dbconn.retrieveVersionTag(self.idpackage) + if not t: return "None" + return t + elif attr == "branch": + return self.dbconn.retrieveBranch(self.idpackage) + elif attr == "name": + return self.dbconn.retrieveName(self.idpackage) + elif attr == "slot": + return self.dbconn.retrieveSlot(self.idpackage) def _get_time( self ): return self.dbconn.retrieveDateCreation(self.idpackage) @@ -119,22 +145,27 @@ class PackageWrapper: return "No ChangeLog" def get_filelist( self ): - return self.dbconn.retrieveContent(self.idpackage) + c = list(self.dbconn.retrieveContent(self.idpackage)) + c.sort() + return c def get_fullname( self ): - return self.atom # XXX + return self.dbconn.retrieveAtom(self.idpackage) pkg = property(fget=getPkg) name = property(fget=getName) repoid = property(fget=getRepoId) ver = property(fget=getVer) + revision = property(fget=getRevision) version = property(fget=getVer) release = property(fget=getRel) - summary = property(fget=getSummary) + slot = property(fget=getSlot) description = property(fget=getDescription) - summaryFirst = property(fget=getSummaryFirst) - size = property(fget=getSize) - sizeFmt = property(fget=getSizeFmt) + size = property(fget=getDownSize) + intelligentsizeFmt = property(fget=getIntelligentSize) + sizeFmt = property(fget=getDownSizeFmt) + disksize = property(fget=getDiskSize) + disksizeFmt = property(fget=getDiskSizeFmt) arch = property(fget=getArch) epoch = property(fget=getEpoch) pkgtup = property(fget=getTup) \ No newline at end of file diff --git a/spritz/src/filters.py b/spritz/src/filters.py index 91aaed3f9..7d0478f1e 100755 --- a/spritz/src/filters.py +++ b/spritz/src/filters.py @@ -22,7 +22,7 @@ import sre_constants import re - + class YumexFiltering: def __init__(self): self.filters = [] @@ -30,7 +30,7 @@ class YumexFiltering: def registerFilter(self,klass): if not klass in self.filters: self.filters.append(klass) - + def processFilters(self,po): for flt in self.filters: if flt.process(po): @@ -42,14 +42,14 @@ class YumexFiltering: def listFilters(self): for flt in self.filters: print "%s : %s " % (flt.getName(),flt._state) - + def get(self,name): for flt in self.filters: if flt.getName() == name: return flt return None - - + + # Abstact Filter Classes class YumexFilter: @@ -62,22 +62,22 @@ class YumexFilter: def process(self,po): raise NotImplementedError() - + def activate(self,state=True): self._state = state - + class ListFilter(YumexFilter): def __init__(self): YumexFilter.__init__(self) self.fltList = [] - + def setFilterList(self,lst): self.fltList = lst def getName(self): return "ListFilter" - + def isInList(self,value): if self._state: if value in self.fltList: @@ -89,10 +89,10 @@ class ListFilter(YumexFilter): class BoolFilter(YumexFilter): def __init__(self): YumexFilter.__init__(self) - + def getName(self): return "BoolFilter" - + def process(self,value): if self._state and not value: return False @@ -103,13 +103,13 @@ class ValueFilter(YumexFilter): def __init__(self): YumexFilter.__init__(self) self._value = None - + def getName(self): return "ValueFilter" - + def setValue(self,value): self._value = value - + def process(self,value): if self._state and not value == self._value: return False @@ -123,14 +123,12 @@ class KeywordFilter(YumexFilter): YumexFilter.__init__(self) self.reList = [] self.fields = ['name', 'summary', 'description'] - + def setKeys(self,criteria): self.reList = [] for string in criteria: - # FIXME!!! - #restring = yum.misc.refineSearchPattern(string) - try: - crit_re = re.compile(restring, flags=re.I) + try: + crit_re = re.compile(string, flags=re.I) self.reList.append(crit_re) except sre_constants.error, e: raise Errors.MiscError, \ @@ -138,10 +136,10 @@ class KeywordFilter(YumexFilter): def getName(self): return "KeywordFilter" - + def process(self,pkg): if self._state: # is filter enabled ? - for crit_re in self.reList: + for crit_re in self.reList: found = False for field in self.fields: value = pkg.getAttr( field ) @@ -159,31 +157,30 @@ class KeywordFilter(YumexFilter): class RepoFilter(ListFilter): def getName(self): return "RepoFilter" - + def process(self,po): return self.isInList(po.repoid) class ArchFilter(ListFilter): def getName(self): return "ArchFilter" - + def process(self,po): return self.isInList(po.arch) - + class ActionFilter(ListFilter): def getName(self): return "ActionFilter" - + def process(self,po): return self.isInList(po.action) - + class QueuedFilter(BoolFilter): def getName(self): return "QueuedFilter" - + yumexFilter = YumexFiltering() -yumexFilter.registerFilter(RepoFilter()) -yumexFilter.registerFilter(ArchFilter()) +yumexFilter.registerFilter(RepoFilter()) +yumexFilter.registerFilter(ArchFilter()) yumexFilter.registerFilter(KeywordFilter()) - \ No newline at end of file diff --git a/spritz/src/gui.py b/spritz/src/gui.py index a7b021ad8..d0c03812b 100644 --- a/spritz/src/gui.py +++ b/spritz/src/gui.py @@ -48,7 +48,7 @@ class YumexPackageInfo: self.pkgFiles.goTop() self.pkgChangeLog.goTop() self.pkgOther.goTop() - + def showInfo(self,pkg): self.clear() self.writePkg( self.pkgDesc, pkg, "%s", "description" ) @@ -69,26 +69,28 @@ class YumexPackageInfo: obsoletes = self.yumbase.up.getObsoletesTuples( newest=1 ) for ( obsoleting, installed ) in obsoletes: if obsoleting[0] == pkg.name: - po = self.yumbase.rpmdb.searchPkgTuple( installed )[0] + po = self.yumbase.rpmdb.searchPkgTuple( installed )[0] txt = _( "Obsoleting : %s\n\n" ) % str(po) self.pkgInfo.write_line( txt ) break - self.writePkg( self.pkgInfo, pkg, 'RPM Group : %s\n', "group", True ) - self.writePkg( self.pkgInfo, pkg, 'Source : %s\n', "sourcerpm" ) - gp = self.yumbase.pkgInGrps.get(pkg.name) - if gp: - self.pkgInfo.write_line('Yum Group : %s/%s\n' % (gp[0].category.name,gp[0].group.name)) - gpType = const.GROUP_PACKAGE_TYPE[gp[0].typ] - self.pkgInfo.write_line(' -> Type : %s\n' % (gpType)) - self.writePkgTime( self.pkgInfo, pkg, 'Build Time : %s\n', "buildtime" ) - if pkg.action =='r': - self.writePkgTime( self.pkgInfo, pkg, 'Install Time : %s\n', "installtime" ) - self.writePkg( self.pkgInfo, pkg, 'License : %s\n', 'license' ) - self.pkgOther.write_line( _( "Requires:\n\n" ) ) - reqList = pkg.pkg.requiresList() - for req in reqList: - self.pkgOther.write_line( "%s\n" % req ) + self.writePkg( self.pkgInfo, pkg, 'Category : %s\n', "category", True ) + self.writePkg( self.pkgInfo, pkg, 'Name : %s\n', "name" ) + if not pkg.from_installed: + self.writePkg( self.pkgInfo, pkg, 'Branch : %s\n', "branch" ) + self.writePkg( self.pkgInfo, pkg, 'Slot : %s\n', "slot" ) + self.writePkg( self.pkgInfo, pkg, 'Version : %s\n', "version" ) + self.writePkg( self.pkgInfo, pkg, 'Kernel Tag : %s\n', "versiontag" ) + self.writePkg( self.pkgInfo, pkg, 'Revision : %s\n', "revision" ) + if pkg.from_installed: + self.writePkgTime( self.pkgInfo, pkg, 'Install time : %s\n', "creationdate" ) + else: + self.writePkgTime( self.pkgInfo, pkg, 'Install time : %s\n', "creationdate" ) + self.writePkg( self.pkgInfo, pkg, 'License : %s\n', 'license' ) + + #if pkg.action =='r': + # self.writePkgTime( self.pkgInfo, pkg, 'Install Time : %s\n', "installtime" ) + # self.pkgOther.write_line( _( "Requires:\n\n" ) ) self.goTop() def writePkg( self, outobj, pkg, markup, attr, remove_newline=False ): diff --git a/spritz/src/spritz.py b/spritz/src/spritz.py index 87cdc9594..16a2ae261 100644 --- a/spritz/src/spritz.py +++ b/spritz/src/spritz.py @@ -129,7 +129,7 @@ class YumexController(Controller): else: self.ui.pkgSelect.hide() self.ui.pkgDeSelect.hide() - + self.addPackages() rb.grab_remove() @@ -276,13 +276,13 @@ class YumexController(Controller): flt.activate(False) action = self.lastPkgPB rb = self.packageRB[action] - self.on_pkgFilter_toggled(rb,action) + self.on_pkgFilter_toggled(rb,action) def on_clear_clicked(self,widget): ''' Search Clear button handler''' self.ui.pkgFilter.set_text("") self.on_search_clicked(None) - + def on_schRepo_toggled(self,rb): ''' Search Repo Checkbox handler''' if rb.get_active(): @@ -301,7 +301,7 @@ class YumexController(Controller): self.ui.schArchText.set_sensitive(False) self.on_schArchText_activate(self.ui.schArchText) - def on_schRepoText_activate(self,entry): + def on_schRepoText_activate(self,entry): ''' Search Repo Entry handler''' txt = entry.get_text() flt = filters.yumexFilter.get('RepoFilter') @@ -330,7 +330,7 @@ class YumexController(Controller): flt.activate(False) action = self.lastPkgPB rb = self.packageRB[action] - self.on_pkgFilter_toggled(rb,action) + self.on_pkgFilter_toggled(rb,action) def on_comps_cursor_changed(self, widget): """ Handle selection of row in Comps Category view """ @@ -415,7 +415,8 @@ class YumexApplication(YumexController,YumexGUI): print self.yumexOptions.getArgs() self.logger.info(_('Yum Config Setup')) self.yumexOptions.parseCmdOptions() - #self.lastPkgPB = "updates" + self.lastPkgPB = "installed" # FIXME: change this in updates + self.etpbase.setFilter(filters.yumexFilter.processFilters) # Setup GUI self.setupGUI() @@ -470,7 +471,15 @@ class YumexApplication(YumexController,YumexGUI): except Exception, e: self.progressLog(_('Unhandled exception: %s') % (str(e),), extra = "repositories") return 2 - repoConn.sync() + rc = repoConn.sync() + if repoConn.syncErrors: + self.progress.set_mainLabel(_('Errors updating repositories.')) + self.progress.set_subLabel(_('Please check logs below for more info')) + else: + self.progress.set_mainLabel(_('Repositories updated successfully')) + self.progress.set_subLabel(_('Have fun :-)')) + if repoConn.newEquo: + self.progress.set_extraLabel(_('app-admin/equo needs to be updated as soon as possible.')) initConfig_entropyConstants(etpSys['rootdir']) self.setupRepoView() @@ -505,12 +514,12 @@ class YumexApplication(YumexController,YumexGUI): for po in allpkgs: self.pkgView.store.append([po,str(po)]) self.ui.viewPkg.set_model(self.pkgView.store) - + msg = _('Population Completed') self.progressLog(msg) self.setStatus(msg) normalCursor(self.ui.main) - if self.doProgress: self.progress.hide() #Hide Progress + if self.doProgress: self.progress.hide() #Hide Progress def addCategoryPackages(self,cat = None): msg = _('Package View Population') diff --git a/spritz/src/views.py b/spritz/src/views.py index 16dec6072..ac5645c45 100644 --- a/spritz/src/views.py +++ b/spritz/src/views.py @@ -35,7 +35,7 @@ class YumexCategoryView: def setup_view( self ): """ Setup Category View """ - model = gtk.TreeStore( gobject.TYPE_STRING,gobject.TYPE_STRING ) + model = gtk.TreeStore( gobject.TYPE_STRING,gobject.TYPE_STRING ) self.view.set_model( model ) cell1 = gtk.CellRendererText() column1= gtk.TreeViewColumn( _( "Categories" ), cell1, markup=0 ) @@ -46,7 +46,7 @@ class YumexCategoryView: self.view.append_column( column1 ) self.view.set_headers_visible(False) return model - + def populate(self,data,tree=False): self.model.clear() if tree: @@ -54,7 +54,7 @@ class YumexCategoryView: else: for el in data: self.model.append(None,[el,el]) - + class EntropyPackageView: def __init__( self, treeview,qview ): @@ -63,7 +63,7 @@ class EntropyPackageView: self.store = self.setupView() self.queue = qview.queue self.queueView = qview - + def setupView( self ): store = gtk.ListStore( gobject.TYPE_PYOBJECT, str) self.view.set_model( store ) @@ -89,18 +89,18 @@ class EntropyPackageView: self.view.append_column( column2 ) column2.set_clickable( True ) - self.create_text_column( _( "Package" ), 'name' , size=240) - self.create_text_column( _( "Arch." ), 'arch' , size = 50 ) - self.create_text_column( _( "Ver." ), 'ver', size = 100 ) - self.create_text_column( _( "Summary" ), 'summaryFirst', size=400 ) - self.create_text_column( _( "Repo." ), 'repoid' , size=100 ) - self.create_text_column( _( "Size." ), 'sizeFmt' , size=100 ) + self.create_text_column( _( "Package" ), 'name' , size=360) + self.create_text_column( _( "Rev." ), 'revision' , size=50 ) + self.create_text_column( _( "Slot" ), 'slot' , size = 50 ) + self.create_text_column( _( "Repository" ), 'repoid', size = 130 ) + self.create_text_column( _( "Size" ), 'intelligentsizeFmt', size=80 ) + #self.create_text_column( _( "Download" ), 'sizeFmt' , size=80 ) self.view.set_search_column( 1 ) self.view.set_enable_search(True) - #store.set_sort_column_id(1, gtk.SORT_ASCENDING) - self.view.set_reorderable( False ) + store.set_sort_column_id(1, gtk.SORT_ASCENDING) + self.view.set_reorderable( True ) return store - + def create_text_column( self, hdr, property, size, sortcol = None): """ Create a TreeViewColumn with text and set