def perform_command(self): """ Perform command and return the appropriate exit code. :rtype: int """ if len(self.actual_arguments) < 2: return self.print_help() source_url = self.actual_arguments[0] output_file_path = self.actual_arguments[1] download = not self.has_option("--list") # largest_audio = True by default or if explicitly given if self.has_option("--largest-audio"): largest_audio = True else: largest_audio = not self.has_option("--smallest-audio") download_format = self.has_option_with_value("--format") try: if download: self.print_info(u"Downloading audio stream from '%s' ..." % source_url) downloader = Downloader(logger=self.logger) result = downloader.audio_from_youtube( source_url, download=True, output_file_path=output_file_path, download_format=download_format, largest_audio=largest_audio, ) self.print_info(u"Downloading audio stream from '%s' ... done" % source_url) self.print_success(u"Downloaded file '%s'" % result) else: self.print_info(u"Downloading stream info from '%s' ..." % source_url) downloader = Downloader(logger=self.logger) result = downloader.audio_from_youtube( source_url, download=False ) self.print_info(u"Downloading stream info from '%s' ... done" % source_url) msg = [] msg.append(u"%s\t%s\t%s\t%s" % ("Format", "Extension", "Bitrate", "Size")) for r in result: filesize = gf.human_readable_number(r["filesize"]) msg.append(u"%s\t%s\t%s\t%s" % (r["format"], r["ext"], r["abr"], filesize)) self.print_generic(u"Available audio streams:") self.print_generic(u"\n".join(msg)) return self.NO_ERROR_EXIT_CODE except ImportError: self.print_no_dependency_error() except Exception as exc: self.print_error(u"An unexpected error occurred while downloading audio from YouTube:") self.print_error(u"%s" % exc) return self.ERROR_EXIT_CODE
def test_human_readable_number(self): tests = [ (0, "0.0"), (0.0, "0.0"), (1, "1.0"), (1.0, "1.0"), (10, "10.0"), (100, "100.0"), (1000, "1000.0"), (2000, "2.0K"), (3000, "2.9K"), (1000000, "976.6K"), (2000000, "1.9M"), (3000000, "2.9M"), ] for test in tests: self.assertEqual(gf.human_readable_number(test[0]), test[1])
def perform_command(self): """ Perform command and return the appropriate exit code. :rtype: int """ if len(self.actual_arguments) < 2: return self.print_help() source_url = self.actual_arguments[0] output_file_path = self.actual_arguments[1] download = not self.has_option("--list") # largest_audio = True by default or if explicitly given if self.has_option("--largest-audio"): largest_audio = True else: largest_audio = not self.has_option("--smallest-audio") preferred_format = self.has_option_with_value("--format") preferred_index = gf.safe_int(self.has_option_with_value("--index"), None) try: if download: self.print_info(u"Downloading audio stream from '%s' ..." % source_url) downloader = Downloader(logger=self.logger) result = downloader.audio_from_youtube( source_url, download=download, output_file_path=output_file_path, preferred_index=preferred_index, largest_audio=largest_audio, preferred_format=preferred_format ) self.print_info(u"Downloading audio stream from '%s' ... done" % source_url) self.print_success(u"Downloaded file '%s'" % result) else: self.print_info(u"Downloading stream info from '%s' ..." % source_url) downloader = Downloader(logger=self.logger) result = downloader.audio_from_youtube( source_url, download=False ) self.print_info(u"Downloading stream info from '%s' ... done" % source_url) msg = [] msg.append(u"%s\t%s\t%s\t%s" % ("Index", "Format", "Bitrate", "Size")) i = 0 for audio in result: ext = audio.extension bitrate = audio.bitrate size = gf.human_readable_number(audio.get_filesize()) msg.append(u"%d\t%s\t%s\t%s" % (i, ext, bitrate, size)) i += 1 self.print_generic(u"Available audio streams:") self.print_generic(u"\n".join(msg)) return self.NO_ERROR_EXIT_CODE except ImportError: self.print_no_pafy_error() except Exception as exc: self.print_error(u"An unexpected error occurred while downloading audio from YouTube:") self.print_error(u"%s" % exc) return self.ERROR_EXIT_CODE