def notify(self): """ Overridden from BaseAntiMatterResult """ for package in self._result: if self._nsargs.extended: cp = package.key() slot = package.slot() from_ver = "x" inst = package.installed() if inst is not None: from_ver = inst.version to_ver = "x" avail = package.available() if avail is not None: to_ver = avail.version name = "%s:%s [%s->%s]" % ( darkgreen(cp), brown(slot), teal(from_ver), purple(to_ver)) elif self._nsargs.verbose: name = package.target() else: name = package.keyslot() if self._nsargs.quiet: print_generic(name) else: print_info(name)
def output(self, text, header = "", footer = "", back = False, importance = 0, level = "info", count = [], percent = False): count_str = "" if self.progress: if count: count_str = "(%s/%s) " % (str(count[0]), str(count[1]),) cur_prog = float(count[0])/count[1] if importance == 0: progress_text = decolorize(text) else: progress_text = str(int(cur_prog * 100)) + "%" self.progress.set_progress(cur_prog, progress_text) if importance < 1: myfunc = self.progress.set_extraLabel elif importance == 1: myfunc = self.progress.set_subLabel elif importance > 1: myfunc = self.progress.set_mainLabel myfunc(count_str+decolorize(text)) if not back and hasattr(self, 'progress_log'): def update_gui(): if hasattr(self.progress_log, '__call__'): self.progress_log(header+count_str+text+footer) return False gobject.timeout_add(0, update_gui) elif not back: print_generic(count_str+text)
def on_abortQueue_clicked(self, widget): msg = _("You have chosen to interrupt the processing. Are you sure you want to do it ?") rc = questionDialog(self.ui.main, msg) if rc: if self.do_debug: print_generic("on_abortQueue_clicked: abort is now on") self.abortQueueNow = True
def on_ui_color_set(self, widget): key = self.colorSettingsReverseMap.get(widget) if not hasattr(SulfurConf, key): print_generic("WARNING: no %s in SulfurConf" % (key,)) return w_col = widget.get_color().to_string() self.on_Preferences_toggled(None, True) setattr(SulfurConf, key, w_col)
def notify(self): """ Overridden from BaseAntiMatterResult """ txt = "<h3>" + str(len(self._result)) + " packages are %s</h3>" if self._nsargs.extinguished: txt = txt % ("extinguished",) elif self._nsargs.upgrade: txt = txt % ("upgradable",) elif self._nsargs.downgrade: txt = txt % ("downgradable",) elif self._nsargs.new: txt = txt % ("new",) elif self._nsargs.not_installed: txt = txt % ("not installed",) print_generic(txt) print_generic("<ul class='result'>") for package in self._result: if self._nsargs.extended: cp = package.key() slot = package.slot() from_ver = "x" inst = package.installed() if inst is not None: from_ver = cgi.escape(inst.version) to_ver = "x" avail = package.available() if avail is not None: to_ver = cgi.escape(avail.version) name = """\ <li> <span class='rt'>%s:%s</span> [<span class='rd'> <span class='frompkg'>%s</span> %s <span class='topkg'>%s</span> </span>] </li>""" % ( cgi.escape(cp), cgi.escape(slot), cgi.escape(from_ver), cgi.escape("->"), cgi.escape(to_ver)) elif self._nsargs.verbose: name = "<li class='rt'>%s</li>" % ( cgi.escape(package.target()),) else: name = "<li class='rt'>%s</li>" % ( cgi.escape(package.keyslot()),) print_generic(name) print_generic("</ul>")
def handle_exception(exc_class, exc_instance, exc_tb): # restore original exception handler, to avoid loops uninstall_exception_handler() _text = TextInterface() if exc_class is SystemDatabaseError: _text.output( darkred(_("Installed packages repository corrupted. " "Please re-generate it")), importance=1, level="error") os._exit(101) generic_exc_classes = (OnlineMirrorError, RepositoryError, PermissionDenied, FileNotFound, SPMError, SystemError) if exc_class in generic_exc_classes: _text.output( "%s: %s" % (exc_instance, darkred(_("Cannot continue")),), importance=1, level="error") os._exit(1) if exc_class is SystemExit: return if issubclass(exc_class, IOError): # in Python 3.3+ it's BrokenPipeError if exc_instance.errno == errno.EPIPE: return if exc_class is KeyboardInterrupt: os._exit(1) t_back = entropy.tools.get_traceback(tb_obj = exc_tb) if const_debug_enabled(): sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ entropy.tools.print_exception(tb_data = exc_tb) pdb.set_trace() if exc_class in (IOError, OSError): if exc_instance.errno == errno.ENOSPC: print_generic(t_back) _text.output( "%s: %s" % ( exc_instance, darkred(_("Your hard drive is full! Your fault!")),), importance=1, level="error") os._exit(5) elif exc_instance.errno == errno.ENOMEM: print_generic(t_back) _text.output( "%s: %s" % ( exc_instance, darkred(_("No more memory dude! Your fault!")),), importance=1, level="error") os._exit(5) _text.output( darkred(_("Hi. My name is Bug Reporter. " "I am sorry to inform you that the program crashed. " "Well, you know, shit happens.")), importance=1, level="error") _text.output( darkred(_("But there's something you could " "do to help me to be a better application.")), importance=1, level="error") _text.output( darkred( _("-- BUT, DO NOT SUBMIT THE SAME REPORT MORE THAN ONCE --")), importance=1, level="error") _text.output( darkred( _("Now I am showing you what happened. " "Don't panic, I'm here to help you.")), importance=1, level="error") entropy.tools.print_exception(tb_data = exc_tb) exception_data = entropy.tools.print_exception(silent = True, tb_data = exc_tb, all_frame_data = True) exception_tback_raw = const_convert_to_rawstring(t_back) error_fd, error_file = None, None try: error_fd, error_file = const_mkstemp( prefix="entropy.error.report.", suffix=".txt") with os.fdopen(error_fd, "wb") as ferror: ferror.write( const_convert_to_rawstring( "\nRevision: %s\n\n" % ( etpConst['entropyversion'],)) ) ferror.write( exception_tback_raw) ferror.write( const_convert_to_rawstring("\n\n")) ferror.write( const_convert_to_rawstring(''.join(exception_data))) ferror.write( const_convert_to_rawstring("\n")) except (OSError, IOError) as err: _text.output( "%s: %s" % ( err, darkred( _("Oh well, I cannot even write to TMPDIR. " "So, please copy the error and " "mail [email protected]."))), importance=1, level="error") os._exit(1) finally: if error_fd is not None: try: os.close(error_fd) except OSError: pass _text.output("", level="error") ask_msg = _("Erm... Can I send the error, " "along with some other information\nabout your " "hardware to my creators so they can fix me? " "(Your IP will be logged)") rc = _text.ask_question(ask_msg) if rc == _("No"): _text.output( darkgreen(_("Ok, ok ok ok... Sorry!")), level="error") os._exit(2) _text.output( darkgreen( _("If you want to be contacted back " "(and actively supported), also answer " "the questions below:") ), level="error") try: name = readtext(_("Your Full name:")) email = readtext(_("Your E-Mail address:")) description = readtext(_("What you were doing:")) except EOFError: os._exit(2) try: from entropy.client.interfaces.qa import UGCErrorReport from entropy.core.settings.base import SystemSettings _settings = SystemSettings() repository_id = _settings['repositories']['default_repository'] error = UGCErrorReport(repository_id) except (OnlineMirrorError, AttributeError, ImportError,): error = None result = None if error is not None: error.prepare(exception_tback_raw, name, email, '\n'.join([x for x in exception_data]), description) result = error.submit() if result: _text.output( darkgreen( _("Thank you very much. The error has been " "reported and hopefully, the problem will " "be solved as soon as possible.")), level="error") else: _text.output( darkred(_("Ugh. Cannot send the report. " "Please mail the file below " "to [email protected].")), level="error") _text.output("", level="error") _text.output("==> %s" % (error_file,), level="error") _text.output("", level="error")
def write(self, string): print_generic(string)
def _scan(self): """ Internal scan method, executes the actual scan and retuns a raw list of AntiMatterPackage objects. """ vardb, portdb = self._get_dbs() result = [] vardb.lock() try: cpv_all = vardb.cpv_all() cpv_all.sort() for count, package in enumerate(cpv_all): count_str = "[%s of %s]" % ( count, len(cpv_all),) try: slot, repo = vardb.aux_get( package, ["SLOT", "repository"]) except KeyError: # package vanished, can still # happen even if locked? continue atom = portage.dep.Atom( "=%s:%s::%s" % (package, slot, repo), allow_wildcard=True, allow_repo=True) if self._nsargs.verbose: print_warning("%s :: %s" % (count_str, atom), back=True) key_slot = "%s:%s" % (atom.cp, atom.slot) best_visible = portage.best(portdb.match(key_slot)) if not best_visible: # dropped upstream pkg = AntiMatterPackage( vardb, portdb, atom, None, -1) result.append(pkg) if self._nsargs.verbose: print_error( " %s no longer upstream or masked" % (key_slot,)) continue cmp_res = portage.versions.pkgcmp( portage.versions.pkgsplit(best_visible), portage.versions.pkgsplit(package)) pkg = AntiMatterPackage( vardb, portdb, atom, best_visible, cmp_res) result.append(pkg) finally: vardb.unlock() if cpv_all and self._nsargs.verbose: print_generic("") return result
def _new_scan(self): """ Internal scan method, executes the actual scan and retuns a raw list of AntiMatterPackage objects. """ vardb, portdb = self._get_dbs() new_days_old_secs = self._nsargs.new_days_old * 3600 * 24 not_installed = self._nsargs.not_installed result = [] cp_all = portdb.cp_all() cp_all.sort() root = portdb.porttree_root for count, package in enumerate(cp_all): count_str = "[%s of %s]" % ( count, len(cp_all),) if self._nsargs.verbose: print_warning("%s :: %s" % (count_str, package), back=True) if not not_installed: cp_dir = os.path.join(root, package) try: mtime = os.path.getmtime(cp_dir) except (OSError, IOError): mtime = 0.0 if abs(time.time() - mtime) >= new_days_old_secs: # not new enough continue best_installed = portage.best(vardb.match(package)) if best_installed: # package key is already installed, ignore continue best_visible = portage.best(portdb.match(package)) if not best_visible: # wtf? package masked? continue try: slot, repo = portdb.aux_get( best_visible, ["SLOT", "repository"]) except KeyError: # portage is scrappy continue atom = portage.dep.Atom( "=%s:%s::%s" % (best_visible, slot, repo), allow_wildcard=True, allow_repo=True) pkg = AntiMatterPackage( vardb, portdb, None, atom, 1) result.append(pkg) if cp_all and self._nsargs.verbose: print_generic("") return result
def listFilters(self): for flt in self.filters: print_generic("%s : %s " % (flt.get_name(), flt._state))
def handle_exception(exc_class, exc_instance, exc_tb): # restore original exception handler, to avoid loops uninstall_exception_handler() _text = TextInterface() if exc_class is SystemDatabaseError: _text.output(darkred( _("Installed packages repository corrupted. " "Please re-generate it")), importance=1, level="error") os._exit(101) generic_exc_classes = (OnlineMirrorError, RepositoryError, PermissionDenied, FileNotFound, SPMError, SystemError) if exc_class in generic_exc_classes: _text.output("%s: %s" % ( exc_instance, darkred(_("Cannot continue")), ), importance=1, level="error") os._exit(1) if exc_class is SystemExit: return if exc_class is IOError: if exc_instance.errno != errno.EPIPE: return if exc_class is KeyboardInterrupt: os._exit(1) t_back = entropy.tools.get_traceback(tb_obj=exc_tb) if const_debug_enabled(): sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ entropy.tools.print_exception(tb_data=exc_tb) pdb.set_trace() if exc_class is OSError: if exc_instance.errno == errno.ENOSPC: print_generic(t_back) _text.output("%s: %s" % ( exc_instance, darkred(_("Your hard drive is full! Your fault!")), ), importance=1, level="error") os._exit(5) elif exc_instance.errno == errno.ENOMEM: print_generic(t_back) _text.output("%s: %s" % ( exc_instance, darkred(_("No more memory dude! Your fault!")), ), importance=1, level="error") os._exit(5) _text.output(darkred( _("Hi. My name is Bug Reporter. " "I am sorry to inform you that the program crashed. " "Well, you know, shit happens.")), importance=1, level="error") _text.output(darkred( _("But there's something you could " "do to help me to be a better application.")), importance=1, level="error") _text.output(darkred( _("-- BUT, DO NOT SUBMIT THE SAME REPORT MORE THAN ONCE --")), importance=1, level="error") _text.output(darkred( _("Now I am showing you what happened. " "Don't panic, I'm here to help you.")), importance=1, level="error") entropy.tools.print_exception(tb_data=exc_tb) exception_data = entropy.tools.print_exception(silent=True, tb_data=exc_tb, all_frame_data=True) exception_tback_raw = const_convert_to_rawstring(t_back) error_fd, error_file = None, None try: error_fd, error_file = const_mkstemp(prefix="entropy.error.report.", suffix=".txt") with os.fdopen(error_fd, "wb") as ferror: ferror.write( const_convert_to_rawstring("\nRevision: %s\n\n" % (etpConst['entropyversion'], ))) ferror.write(exception_tback_raw) ferror.write(const_convert_to_rawstring("\n\n")) ferror.write(const_convert_to_rawstring(''.join(exception_data))) ferror.write(const_convert_to_rawstring("\n")) except (OSError, IOError) as err: _text.output("%s: %s" % (err, darkred( _("Oh well, I cannot even write to TMPDIR. " "So, please copy the error and " "mail [email protected]."))), importance=1, level="error") os._exit(1) finally: if error_fd is not None: try: os.close(error_fd) except OSError: pass _text.output("", level="error") ask_msg = _("Erm... Can I send the error, " "along with some other information\nabout your " "hardware to my creators so they can fix me? " "(Your IP will be logged)") rc = _text.ask_question(ask_msg) if rc == _("No"): _text.output(darkgreen(_("Ok, ok ok ok... Sorry!")), level="error") os._exit(2) _text.output(darkgreen( _("If you want to be contacted back " "(and actively supported), also answer " "the questions below:")), level="error") try: name = readtext(_("Your Full name:")) email = readtext(_("Your E-Mail address:")) description = readtext(_("What you were doing:")) except EOFError: os._exit(2) try: from entropy.client.interfaces.qa import UGCErrorReport from entropy.core.settings.base import SystemSettings _settings = SystemSettings() repository_id = _settings['repositories']['default_repository'] error = UGCErrorReport(repository_id) except ( OnlineMirrorError, AttributeError, ImportError, ): error = None result = None if error is not None: error.prepare(exception_tback_raw, name, email, '\n'.join([x for x in exception_data]), description) result = error.submit() if result: _text.output(darkgreen( _("Thank you very much. The error has been " "reported and hopefully, the problem will " "be solved as soon as possible.")), level="error") else: _text.output(darkred( _("Ugh. Cannot send the report. " "Please mail the file below " "to [email protected].")), level="error") _text.output("", level="error") _text.output("==> %s" % (error_file, ), level="error") _text.output("", level="error")