[Pypt-offline-general] SF.net SVN: pypt-offline: [145] trunk/pypt_core.py
Status: Beta
Brought to you by:
riteshsarraf
From: <rit...@us...> - 2007-05-19 18:03:17
|
Revision: 145 http://svn.sourceforge.net/pypt-offline/?rev=145&view=rev Author: riteshsarraf Date: 2007-05-19 11:03:15 -0700 (Sat, 19 May 2007) Log Message: ----------- * Code formatting and uncluttering * Finally finalized the bug fetching code. Now syncer() needs to have parsing done. * Changed the num of spaces to be printed to 60 Modified Paths: -------------- trunk/pypt_core.py Modified: trunk/pypt_core.py =================================================================== --- trunk/pypt_core.py 2007-05-12 23:04:14 UTC (rev 144) +++ trunk/pypt_core.py 2007-05-19 18:03:15 UTC (rev 145) @@ -55,6 +55,7 @@ return False class ProgressBar(object): + def __init__(self, minValue = 0, maxValue = 0, width = None, fd = sys.stderr): #width does NOT include the two places for [] markers self.min = minValue @@ -62,15 +63,19 @@ self.span = float(self.max - self.min) self.fd = fd self.signal_set = False + if width is None: + try: self.handle_resize(None, None) signal.signal(signal.SIGWINCH, self.handle_resize) self.signal_set = True except: self.width = 79 #The standard + else: self.width = width + self.value = self.min self.items = 0 #count of items being tracked self.complete = 0 @@ -86,8 +91,10 @@ def completed(self): self.complete = self.complete + 1 + if self.signal_set: signal.signal(signal.SIGWINCH, signal.SIG_DFL) + self.display() def addItem(self, maxValue): @@ -106,6 +113,7 @@ return ("[" + "#"*widthFilled + " "*(self.width - widthFilled) + "]" + " %5.1f%% of %d KB" % (percentFilled * 100.0, self.max/1024)) class Log: + '''A OOP implementation for logging. warnings is to tackle the warning option verbose is to tackle the verbose option @@ -138,39 +146,49 @@ def msg(self, msg): 'Print general messages' + if self.color: WConio.textcolor(15) + sys.stdout.write(msg) sys.stdout.flush() def err(self, msg): 'Print messages with an error' + if self.color: WConio.textcolor(4) + sys.stderr.write(msg) sys.stderr.flush() def success(self, msg): 'Print messages with a success' + if self.color: WConio.textcolor(2) + sys.stdout.write(msg) sys.stdout.flush() # For the rest, we need to check the options also def warn(self, msg): 'Print warnings' + if self.WARN is True: if self.color: WConio.textcolor(12) + sys.stderr.write(msg) sys.stderr.flush() def verbose(self, msg): 'Print verbose messages' + if self.VERBOSE is True: if self.color: WConio.textcolor(11) + sys.stdout.write(msg) sys.stdout.flush() @@ -200,7 +218,6 @@ try: if self.lock: self.ZipLock.acquire(True) - filename = zipfile.ZipFile(zip_file_name, "a") except IOError: #INFO: By design zipfile throws an IOError exception when you open @@ -209,11 +226,12 @@ #except: #TODO Handle the exception #return False - filename.write(files_to_compress, files_to_compress, zipfile.ZIP_DEFLATED) filename.close() + if self.lock: self.ZipLock.release() + return True def decompress_the_file(self, archive_file, path, target_file, archive_type): @@ -238,7 +256,6 @@ if TarGzipBZ2_Uncomprerssed(read_from, write_to) != True: raise ArchiveError - write_to.close() read_from.close() return True @@ -261,7 +278,6 @@ if TarGzipBZ2_Uncomprerssed(read_from, write_to) != True: raise ArchiveError - write_to.close() read_from.close() return True @@ -275,38 +291,53 @@ for filename in zip_file.namelist(): data = zip_file.read() - zip_file.close() return True + else: return False -def FetchBugReportsDebian(PackageName, FileHandle): +def FetchBugReportsDebian(PackageName, ZipFileName=None, lock=False): try: import debianbts except ImportError: return False bug_list = [] - file_handle = open(FileHandle, 'w') + if ZipFileName is not None: + AddToArchive = Archiver(lock) (num_of_bugs, header, bugs_list) = debianbts.get_reports(PackageName) if num_of_bugs: for x in bugs_list: (sub_bugs_header, sub_bugs_list) = x + if not "Resolved bugs" in sub_bugs_header: + for x in sub_bugs_list: break_bugs = x.split(':') bug_num = string.lstrip(break_bugs[0], '#') data = debianbts.get_report(bug_num, followups=True) + FileName = PackageName + "." + bug_num + file_handle = open(FileName, 'w') file_handle.write(data[0] + "\n\n") + for x in data[1]: file_handle.write(x) file_handle.write("\n") + file_handle.write("\n" * 3) file_handle.flush() + file_handle.close() + + if ZipFileName is not None: + AddToArchive.compress_the_file(ZipFileName, FileName) + os.unlink(FileName) + + return True + return False def files(root): @@ -359,6 +390,7 @@ i += block_size counter += 1 self.updateValue(increment) + self.completed() data.close() temp.close() @@ -467,15 +499,18 @@ log.err("%s - %s - %s\n" % (filename, errno, errormsg)) log.verbose(" Will still try with other package uris\n\n") pass + elif errno == 407 or errno == 2: # These, I believe are from OSError/IOError exception. # I'll document it as soon as I confirm it. log.err("%s\n" % (errormsg)) sys.exit(errno) + elif errno == 1: log.err(errormsg) log.err("Explicit program termination %s\n" % (errno)) sys.exit(errno) + else: log.err("Aieee! I don't understand this errorcode\n" % (errno)) sys.exit(errno) @@ -585,15 +620,27 @@ PackageName = file.split("_")[0] if cache_dir is None: log.msg("Downloading %s - %d KB\n" % (file, size/1024)) + if FetcherInstance.download_from_web(url, file, download_path) != True: errlist.append(PackageName) + + bug_report_fetch_flag = 0 if ArgumentOptions.zip_it: log.success("\n%s done.\n" % (PackageName) ) FetcherInstance.compress_the_file(ArgumentOptions.zip_upgrade_file, file) os.unlink(os.path.join(download_path, file)) + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file) is True: + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) + bug_report_fetch_flag = 1 + + if ArgumentOptions.deb_bugs and bug_report_fetch_flag != 1: + if FetchBugReportsDebian(PackageName) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) else: if find_first_match(cache_dir, file, download_path, checksum) == False: log.msg("Downloading %s - %d KB\n" % (PackageName, size/1024)) + if FetcherInstance.download_from_web(url, file, download_path) != True: errlist.append(PackageName) else: @@ -607,14 +654,31 @@ else: log.verbose("Cannot copy %s to %s. Is %s writeable??\n" % (file, cache_dir)) + bug_report_fetch_flag = 0 if ArgumentOptions.zip_it: FetcherInstance.compress_the_file(ArgumentOptions.zip_upgrade_file, file) os.unlink(os.path.join(download_path, file)) + if ArgumentOptions.deb_bugs: + FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file) + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) + bug_report_fetch_flag = 1 + + if ArgumentOptions.deb_bugs and bug_report_fetch_flag != 1: + if FetchBugReportsDebian(PackageName) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) elif True: + bug_report_fetch_flag = 0 if ArgumentOptions.zip_it: FetcherInstance.compress_the_file(ArgumentOptions.zip_upgrade_file, file) os.unlink(os.path.join(download_path, file)) - + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file) is True: + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) + bug_report_fetch_flag = 1 + + if ArgumentOptions.deb_bugs and bug_report_fetch_flag != 1: + if FetchBugReportsDebian(PackageName) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) else: raise FetchDataKeyError @@ -658,7 +722,7 @@ log.msg("Downloading %s\n" % (PackageName) ) if FetcherInstance.download_from_web(url, file, download_path) == True: - log.success("\r%s done.%s\n" % (PackageName, " "* 40) ) + log.success("\r%s done.%s\n" % (PackageName, " "* 60) ) if ArgumentOptions.zip_it: if FetcherInstance.compress_the_file(ArgumentOptions.zip_update_file, file) != True: log.err("Couldn't archive %s to file %s.\n" % (file, ArgumentOptions.zip_update_file) ) @@ -679,18 +743,25 @@ if ArgumentOptions.zip_it: if FetcherInstance.compress_the_file(ArgumentOptions.zip_upgrade_file, full_file_path) is True: log.success("%s copied from local cache directory %s\n" % (PackageName, cache_dir) ) + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file, lock=True) is True: + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) else: try: shutil.copy(full_file_path, download_path) log.success("%s copied from local cache directory %s\n" % (PackageName, cache_dir) ) except shutil.Error: log.verbose("%s already available in %s. Skipping copy!!!\n\n" % (file, download_path) ) + + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, lock=True) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) else: log.verbose("%s MD5 checksum mismatch. Skipping file.\n" % (file) ) log.msg("Downloading %s - %d KB\n" % (PackageName, download_size/1024) ) if FetcherInstance.download_from_web(url, file, download_path) == True: - log.success("\r%s done.%s\n" % (PackageName, " "* 40) ) + log.success("\r%s done.%s\n" % (PackageName, " "* 60) ) if ArgumentOptions.cache_dir: try: shutil.copy(file, cache_dir) @@ -702,9 +773,18 @@ log.err("Couldn't archive %s to file %s\n" % (file, ArgumentOptions.zip_upgrade_file) ) sys.exit(1) os.unlink(os.path.join(download_path, file) ) + bug_report_fetch_flag = 0 + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file, lock=True) is True: + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) + bug_report_fetch_flag = 1 + + if ArgumentOptions.deb_bugs and bug_report_fetch_flag != 1: + if FetchBugReportsDebian(PackageName, lock=True) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) else: - #INFO: If md5check is disabled, just copy it. + #INFO: If md5check is disabled, just copy it to the cache_dir try: shutil.copy(full_file_path, download_path) log.success("%s copied from local cache directory %s\n" % (file, cache_dir) ) @@ -730,13 +810,32 @@ sys.exit(1) log.verbose("%s added to archive %s\n" % (file, ArgumentOptions.zip_upgrade_file) ) os.unlink(os.path.join(download_path, file) ) + bug_report_fetch_flag = 0 + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file, lock=True) is True: + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) + bug_report_fetch_flag = 1 + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, lock=True) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) + if ArgumentOptions.zip_it: if FetcherInstance.compress_the_file(ArgumentOptions.zip_upgrade_file, file) != True: log.err("Couldn't archive %s to file %s\n" % (file, ArgumentOptions.zip_upgrade_file) ) sys.exit(1) log.verbose("%s added to archive %s\n" % (file, ArgumentOptions.zip_upgrade_file) ) os.unlink(os.path.join(download_path, file) ) - log.success("\r%s done.%s\n" % (PackageName, " "* 40) ) + bug_report_fetch_flag = 0 + if ArgumentOptions.deb_bugs: + if FetchBugReportsDebian(PackageName, ArgumentOptions.zip_upgrade_file, lock=True) is True: + log.verbose("Fetched bug reports for package %s and archived to file %s.\n" % (PackageName, ArgumentOptions.zip_upgrade_file) ) + bug_report_fetch_flag = 1 + + if ArgumentOptions.deb_bugs and bug_report_fetch_flag != 1: + if FetchBugReportsDebian(PackageName, lock=True) is True: + log.verbose("Fetched bug reports for package %s.\n" % (PackageName) ) + + log.success("\r%s done.%s\n" % (PackageName, " "* 60) ) else: #log.err("Couldn't find %s\n" % (PackageName) ) errlist.append(PackageName) @@ -916,7 +1015,7 @@ help="Install the fetched packages to the NONET machine and _upgrade_ the packages on the NONET machine. This command must be executed on the NONET machine", action="store", type="string", metavar="pypt-offline-upgrade.zip") parser.add_option("", "--fetch-bug-reports", dest="deb_bugs", - help="Fetch bug reports from the BTS", action="store_false") + help="Fetch bug reports from the BTS", action="store_true") #global options, args (options, args) = parser.parse_args() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |