From 42c3adf40c4e9fa543f7409155c94b04620fa70b Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Thu, 28 May 2009 05:54:40 +0200 Subject: [PATCH] entropy.qa: code review and cleanup --- libraries/entropy/qa.py | 135 ++++++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 62 deletions(-) diff --git a/libraries/entropy/qa.py b/libraries/entropy/qa.py index da8ebd00d..e88f83ec5 100644 --- a/libraries/entropy/qa.py +++ b/libraries/entropy/qa.py @@ -19,11 +19,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ''' - +# pylint ~ok import os from entropy.const import etpConst from entropy.output import blue, darkgreen, red, darkred, bold, purple, brown -from entropy.exceptions import * +from entropy.exceptions import IncorrectParameter, PermissionDenied from entropy.i18n import _ from entropy.core import SystemSettings @@ -36,11 +36,11 @@ class QAInterface: self.Output = OutputInterface self.SystemSettings = SystemSettings() - if not hasattr(self.Output,'updateProgress'): - mytxt = _("Output interface passed doesn't have the updateProgress method") + if not hasattr(self.Output, 'updateProgress'): + mytxt = _("Output interface has no updateProgress method") raise IncorrectParameter("IncorrectParameter: %s" % (mytxt,)) elif not callable(self.Output.updateProgress): - mytxt = _("Output interface passed doesn't have the updateProgress method") + mytxt = _("Output interface has no updateProgress method") raise IncorrectParameter("IncorrectParameter: %s" % (mytxt,)) def test_depends_linking(self, idpackages, dbconn, repo = None): @@ -65,7 +65,10 @@ class QAInterface: for idpackage in idpackages: count += 1 atom = dbconn.retrieveAtom(idpackage) - scan_msg = "%s, %s:" % (blue(_("scanning for broken depends")),darkgreen(atom),) + scan_msg = "%s, %s:" % ( + blue(_("scanning for broken depends")), + darkgreen(atom), + ) self.Output.updateProgress( "[repo:%s] %s" % ( darkgreen(repo), @@ -75,7 +78,7 @@ class QAInterface: type = "info", header = blue(" @@ "), back = True, - count = (count,maxcount,) + count = (count, maxcount,) ) mydepends = dbconn.retrieveDepends(idpackage) if not mydepends: @@ -92,7 +95,7 @@ class QAInterface: type = "info", header = blue(" @@ "), back = True, - count = (count,maxcount,) + count = (count, maxcount,) ) mycontent = dbconn.retrieveContent(mydepend) mybreakages = self.content_test(mycontent) @@ -109,7 +112,7 @@ class QAInterface: importance = 1, type = "warning", header = purple(" @@ "), - count = (count,maxcount,) + count = (count, maxcount,) ) for mylib in mybreakages: self.Output.updateProgress( @@ -140,7 +143,7 @@ class QAInterface: if repo == None: repo = self.SystemSettings['repositories']['default_repository'] - if not isinstance(black_list,set): + if not isinstance(black_list, set): black_list = set() taint = False @@ -160,7 +163,8 @@ class QAInterface: for idpackage in idpackages: count += 1 atom = dbconn.retrieveAtom(idpackage) - if not atom: continue + if not atom: + continue self.Output.updateProgress( "[repo:%s] %s: %s" % ( darkgreen(repo), @@ -171,9 +175,10 @@ class QAInterface: type = "info", header = blue(" @@ "), back = True, - count = (count,maxcount,) + count = (count, maxcount,) ) - missing_extended, missing = self.get_missing_rdepends(dbconn, idpackage, self_check = self_check) + missing_extended, missing = self.get_missing_rdepends(dbconn, + idpackage, self_check = self_check) missing -= black_list for item in missing_extended.keys(): missing_extended[item] -= black_list @@ -191,7 +196,7 @@ class QAInterface: importance = 1, type = "info", header = red(" @@ "), - count = (count,maxcount,) + count = (count, maxcount,) ) for missing_data in missing_extended: self.Output.updateProgress( @@ -208,11 +213,11 @@ class QAInterface: header = blue(" # ") ) if ask: - rc = self.Output.askQuestion(_("Do you want to add them?")) - if rc == "No": + rc_ask = self.Output.askQuestion(_("Do you want to add them?")) + if rc_ask == "No": continue - rc = self.Output.askQuestion(_("Selectively?")) - if rc == "Yes": + rc_ask = self.Output.askQuestion(_("Selectively?")) + if rc_ask == "Yes": newmissing = set() new_blacklist = set() for dependency in missing: @@ -226,30 +231,31 @@ class QAInterface: type = "info", header = blue(" @@ ") ) - rc = self.Output.askQuestion(_("Want to add?")) - if rc == "Yes": + rc_ask = self.Output.askQuestion(_("Want to add?")) + if rc_ask == "Yes": newmissing.add(dependency) else: - rc = self.Output.askQuestion(_("Want to blacklist?")) - if rc == "Yes": + rc_ask = self.Output.askQuestion( + _("Want to blacklist?")) + if rc_ask == "Yes": new_blacklist.add(dependency) if new_blacklist and (black_list_adder != None): black_list_adder(new_blacklist, repo = repo) missing = newmissing if missing: taint = True - dbconn.insertDependencies(idpackage,missing) + dbconn.insertDependencies(idpackage, missing) dbconn.commitChanges() self.Output.updateProgress( "[repo:%s] %s: %s" % ( - darkgreen(repo), - darkgreen(atom), - blue(_("missing dependencies added")), - ), + darkgreen(repo), + darkgreen(atom), + blue(_("missing dependencies added")), + ), importance = 1, type = "info", header = red(" @@ "), - count = (count,maxcount,) + count = (count, maxcount,) ) return taint @@ -265,13 +271,14 @@ class QAInterface: mylibs = {} for myfile in mycontent: myfile = myfile.encode('raw_unicode_escape') - if not os.access(myfile,os.R_OK): + if not os.access(myfile, os.R_OK): continue if not os.path.isfile(myfile): continue if not self.entropyTools.is_elf_file(myfile): continue - mylibs[myfile] = self.entropyTools.read_elf_dynamic_libraries(myfile) + mylibs[myfile] = self.entropyTools.read_elf_dynamic_libraries( + myfile) broken_libs = {} for mylib in mylibs: @@ -293,8 +300,8 @@ class QAInterface: def do_resolve(mypaths): found_path = None for mypath in mypaths: - mypath = os.path.join(etpConst['systemroot']+mypath,library) - if not os.access(mypath,os.R_OK): + mypath = os.path.join(etpConst['systemroot']+mypath, library) + if not os.access(mypath, os.R_OK): continue if os.path.isdir(mypath): continue @@ -308,7 +315,8 @@ class QAInterface: found_path = do_resolve(mypaths) if not found_path: - mypaths = self.entropyTools.read_elf_linker_paths(requiring_executable) + mypaths = self.entropyTools.read_elf_linker_paths( + requiring_executable) found_path = do_resolve(mypaths) return found_path @@ -320,14 +328,14 @@ class QAInterface: neededs = dbconn.retrieveNeeded(idpackage, extended = True) ldpaths = set(self.entropyTools.collect_linker_paths()) deps_content = set() - dependencies = self.get_deep_dependency_list(dbconn, idpackage, atoms = True) + dependencies = self.get_deep_dependency_list(dbconn, idpackage, + atoms = True) scope_cache = set() def update_depscontent(mycontent, dbconn, ldpaths): return set( \ - [ x for x in mycontent if os.path.dirname(x) in ldpaths \ - and (dbconn.isNeededAvailable(os.path.basename(x)) > 0) ] \ - ) + [x for x in mycontent if os.path.dirname(x) in ldpaths \ + and (dbconn.isNeededAvailable(os.path.basename(x)) > 0) ]) def is_in_content(myneeded, content): for item in content: @@ -342,25 +350,26 @@ class QAInterface: mycontent = dbconn.retrieveContent(match[0]) deps_content |= update_depscontent(mycontent, dbconn, ldpaths) key, slot = dbconn.retrieveKeySlot(match[0]) - scope_cache.add((key,slot)) + scope_cache.add((key, slot)) key, slot = dbconn.retrieveKeySlot(idpackage) mycontent = dbconn.retrieveContent(idpackage) deps_content |= update_depscontent(mycontent, dbconn, ldpaths) - scope_cache.add((key,slot)) + scope_cache.add((key, slot)) idpackages_cache = set() idpackage_map = {} idpackage_map_reverse = {} for needed, elfclass in neededs: - data_solved = dbconn.resolveNeeded(needed,elfclass) + data_solved = dbconn.resolveNeeded(needed, elfclass) data_size = len(data_solved) - data_solved = set([x for x in data_solved if x[0] not in idpackages_cache]) + data_solved = set([x for x in data_solved if x[0] \ + not in idpackages_cache]) if not data_solved or (data_size != len(data_solved)): continue if self_check: - if is_in_content(needed,mycontent): + if is_in_content(needed, mycontent): continue found = False @@ -372,18 +381,18 @@ class QAInterface: for data in data_solved: r_idpackage = data[0] key, slot = dbconn.retrieveKeySlot(r_idpackage) - if (key,slot) not in scope_cache: + if (key, slot) not in scope_cache: if not dbconn.isSystemPackage(r_idpackage): - if not rdepends.has_key((needed,elfclass)): - rdepends[(needed,elfclass)] = set() - if not idpackage_map.has_key((needed,elfclass)): - idpackage_map[(needed,elfclass)] = set() - keyslot = "%s:%s" % (key,slot,) - if not idpackage_map_reverse.has_key(keyslot): - idpackage_map_reverse[keyslot] = set() - idpackage_map_reverse[keyslot].add((needed,elfclass)) - rdepends[(needed,elfclass)].add(keyslot) - idpackage_map[(needed,elfclass)].add(r_idpackage) + if not rdepends.has_key((needed, elfclass)): + rdepends[(needed, elfclass)] = set() + if not idpackage_map.has_key((needed, elfclass)): + idpackage_map[(needed, elfclass)] = set() + keyslot = "%s:%s" % (key, slot,) + obj = idpackage_map_reverse.setdefault( + keyslot, set()) + obj.add((needed, elfclass,)) + rdepends[(needed, elfclass)].add(keyslot) + idpackage_map[(needed, elfclass)].add(r_idpackage) rdepends_plain.add(keyslot) idpackages_cache.add(r_idpackage) @@ -398,14 +407,16 @@ class QAInterface: r_keyslots = set() for r_dep in r_deplist: m_idpackage, m_rc = dbconn.atomMatch(r_dep) - if m_rc != 0: continue + if m_rc != 0: + continue keyslot = dbconn.retrieveKeySlotAggregated(m_idpackage) if keyslot in rdepends_plain: r_keyslots.add(keyslot) rdepends_plain -= r_keyslots for r_keyslot in r_keyslots: - keys = [x for x in idpackage_map_reverse.get(keyslot,set()) if x in rdepends] + keys = [x for x in idpackage_map_reverse.get(keyslot, set()) if \ + x in rdepends] for key in keys: rdepends[key].discard(r_keyslot) if not rdepends[key]: @@ -452,7 +463,6 @@ class ErrorReportInterface: import entropy.tools as entropyTools def __init__(self, post_url = etpConst['handlers']['errorsend']): from entropy.misc import MultipartPostHandler - from entropy.core import SystemSettings import urllib2 self.url = post_url self.opener = urllib2.build_opener(MultipartPostHandler) @@ -469,7 +479,7 @@ class ErrorReportInterface: if mydict: mydict['username'] = proxy_settings['username'] mydict['password'] = proxy_settings['password'] - self.entropyTools.add_proxy_opener(urllib2,mydict) + self.entropyTools.add_proxy_opener(urllib2, mydict) else: # unset urllib2._opener = None @@ -488,16 +498,17 @@ class ErrorReportInterface: self.params['arguments'] = ' '.join(sys.argv) self.params['uid'] = etpConst['uid'] self.params['system_version'] = "N/A" - if os.access(etpConst['systemreleasefile'],os.R_OK): - f = open(etpConst['systemreleasefile'],"r") - self.params['system_version'] = f.readlines() - f.close() + if os.access(etpConst['systemreleasefile'], os.R_OK): + f_rel = open(etpConst['systemreleasefile'], "r") + self.params['system_version'] = f_rel.readlines() + f_rel.close() self.params['processes'] = getstatusoutput('ps auxf')[1] self.params['lspci'] = getstatusoutput('/usr/sbin/lspci')[1] self.params['dmesg'] = getstatusoutput('dmesg')[1] self.params['locale'] = getstatusoutput('locale -v')[1] - self.params['stacktrace'] += "\n\n"+self.params['locale'] # just for a while, won't hurt + # just for a while, won't hurt + self.params['stacktrace'] += "\n\n"+self.params['locale'] self.generated = True