def _push_progress_to_output(self): mytxt = _("[F]") eta_txt = _("ETA") sec_txt = _("sec") # as in XX kb/sec current_txt = darkred(" %s: " % (mytxt,)) + \ darkgreen(str(round(float(self.__downloadedsize)/1000, 1))) + "/" \ + red(str(round(self.__remotesize, 1))) + " kB" # create progress bar barsize = 10 bartext = "[" curbarsize = 1 averagesize = (self.__average*barsize)/100 while averagesize > 0: curbarsize += 1 bartext += "=" averagesize -= 1 bartext += ">" diffbarsize = barsize - curbarsize while diffbarsize > 0: bartext += " " diffbarsize -= 1 if self.__show_speed: bartext += "] => %s" % (bytes_into_human(self.__datatransfer),) bartext += "/%s : %s: %s" % (sec_txt, eta_txt, self.__time_remaining,) else: bartext += "]" average = str(self.__average) if len(average) < 2: average = " "+average current_txt += " <-> "+average+"% "+bartext TextInterface.output(current_txt, back = True)
def __show_download_files_info(self): count = 0 pl = self._url_path_list[:] TextInterface.output( "%s: %s %s" % ( darkblue(_("Aggregated download")), darkred(str(len(pl))), darkblue(ngettext("item", "items", len(pl))), ), importance = 0, level = "info", header = purple(" ## ") ) for url, save_path in pl: count += 1 fname = os.path.basename(url) uri = spliturl(url)[1] TextInterface.output( "[%s] %s => %s" % ( darkblue(str(count)), darkgreen(uri), blue(fname), ), importance = 0, level = "info", header = brown(" # ") )
def _show_version(self, *args): # do not use entropy_client here # it is slow and might interfere with # other Client inits. release = read_client_release() text = TextInterface() text.output(release, level="generic") return 0
def _push_progress_to_output(self, force = False): stats = self._compute_progress_stats() downloaded_size = stats["downloaded_size"] total_size = stats["total_size"] time_remaining = stats["time_remaining"] data_transfer = stats["data_transfer"] average = stats["average"] time_remaining_str = stats["time_remaining_str"] self.__data_transfer = data_transfer self.__average = average self.__time_remaining_secs = time_remaining update_time_delta = 0.5 cur_t = time.time() if ((cur_t > (self.__progress_update_t + update_time_delta)) \ or force or (self.__first_refreshes > 0)) and self.__show_progress: self.__first_refreshes -= 1 self.__progress_update_t = cur_t eta_txt = _("ETA") sec_txt = _("sec") # as in XX kb/sec down_size_txt = str(round(float(downloaded_size) / 1000, 1)) total_size_txt = str(round(total_size, 1)) current_txt = darkgreen(down_size_txt) + "/" + red(total_size_txt) current_txt += " kB" # create progress bar barsize = 10 bartext = "[" curbarsize = 1 averagesize = (average*barsize)/100 while averagesize > 0: curbarsize += 1 bartext += "=" averagesize -= 1 bartext += ">" diffbarsize = barsize-curbarsize while diffbarsize > 0: bartext += " " diffbarsize -= 1 if self.__show_speed: bartext += "] => %s" % (bytes_into_human(data_transfer),) bartext += "/%s : %s: %s" % ( sec_txt, eta_txt, time_remaining_str,) else: bartext += "]" myavg = str(average) if len(myavg) < 2: myavg = " "+myavg current_txt += " <-> "+myavg+"% "+bartext+" " TextInterface.output(current_txt, back = True) self.__old_average = average
def _show_yell(self, *args): yell_id = SoloYell.read() max_id = max(list(SoloYell._MESSAGES.keys())) yell_message = SoloYell._MESSAGES.get(yell_id, max_id) # do not use entropy_client here # it is slow and might interfere with # other Client inits. text = TextInterface() text.output(yell_message, importance=1, level="warning") new_yell_id = yell_id + 1 if new_yell_id <= max_id: SoloYell.write(new_yell_id) return 1
def _show_yell(self, *args): yell_id = SoloYell.read() max_id = max(list(SoloYell._MESSAGES.keys())) yell_message = SoloYell._MESSAGES.get( yell_id, max_id) # do not use entropy_client here # it is slow and might interfere with # other Client inits. text = TextInterface() text.output( yell_message, importance=1, level="warning") new_yell_id = yell_id + 1 if new_yell_id <= max_id: SoloYell.write(new_yell_id) return 1
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 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 _push_progress_to_output(self, force = False): downloaded_size = 0 total_size = 0 time_remaining = 0 update_step = 0 pd = self.__progress_data.copy() pdlen = len(pd) # calculation for th_id in sorted(pd): data = pd.get(th_id) downloaded_size += data.get('downloaded_size', 0) total_size += data.get('total_size', 0) # data_transfer from Python threading bullshit is not reliable # with multiple threads and causes inaccurate informations to be # printed # data_transfer += data.get('data_transfer', 0) tr = data.get('time_remaining_secs', 0) if tr > 0: time_remaining += tr update_step += data.get('update_step', 0) elapsed_t = time.time() - self.__startup_time if elapsed_t < 0.1: elapsed_t = 0.1 data_transfer = downloaded_size / elapsed_t self.__data_transfer = data_transfer average = 100 # total_size is in kbytes # downloaded_size is in bytes if total_size > 0: average = int(float(downloaded_size/1024)/total_size * 100) self.__average = average if pdlen > 0: update_step = update_step/pdlen else: update_step = 0 time_remaining = convert_seconds_to_fancy_output(time_remaining) self.__time_remaining_sec = time_remaining update_time_delta = 0.5 cur_t = time.time() if ((cur_t > (self.__progress_update_t + update_time_delta)) \ or force or (self.__first_refreshes > 0)) and self.__show_progress: self.__first_refreshes -= 1 self.__progress_update_t = cur_t eta_txt = _("ETA") sec_txt = _("sec") # as in XX kb/sec down_size_txt = str(round(float(downloaded_size)/1024, 1)) total_size_txt = str(round(total_size, 1)) current_txt = darkgreen(down_size_txt) + "/" + red(total_size_txt) current_txt += " kB" # create progress bar barsize = 10 bartext = "[" curbarsize = 1 averagesize = (average*barsize)/100 while averagesize > 0: curbarsize += 1 bartext += "=" averagesize -= 1 bartext += ">" diffbarsize = barsize-curbarsize while diffbarsize > 0: bartext += " " diffbarsize -= 1 if self.__show_speed: bartext += "] => %s" % (bytes_into_human(data_transfer),) bartext += "/%s : %s: %s" % (sec_txt, eta_txt, time_remaining,) else: bartext += "]" myavg = str(average) if len(myavg) < 2: myavg = " "+myavg current_txt += " <-> "+myavg+"% "+bartext+" " TextInterface.output(self, current_txt, back = True) self.__old_average = average