[cleanup] Sort imports

Using https://github.com/PyCQA/isort

    isort -m VERTICAL_HANGING_INDENT --py 36 -l 80 --rr -n --tc .
This commit is contained in:
pukkandan 2022-04-12 04:02:57 +05:30
parent 86e5f3ed2e
commit f82711587c
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39
86 changed files with 556 additions and 671 deletions

1
.gitignore vendored
View File

@ -82,6 +82,7 @@ updates_key.pem
*.egg-info *.egg-info
.tox .tox
*.class *.class
*.isorted
# Generated # Generated
AUTHORS AUTHORS

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
from os.path import dirname as dirn
import sys import sys
from os.path import dirname as dirn
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__)))) sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
import yt_dlp import yt_dlp

View File

@ -10,11 +10,12 @@
# Allow direct execution # Allow direct execution
import os import os
import sys import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import gettestcases from test.helper import gettestcases
from yt_dlp.utils import compat_urllib_parse_urlparse
from yt_dlp.utils import compat_urllib_request from yt_dlp.utils import compat_urllib_parse_urlparse, compat_urllib_request
if len(sys.argv) > 1: if len(sys.argv) > 1:
METHOD = 'LIST' METHOD = 'LIST'

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import optparse import optparse
import os import os
from os.path import dirname as dirn
import sys import sys
from os.path import dirname as dirn
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__)))) sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
import yt_dlp import yt_dlp

View File

@ -1,13 +1,13 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import codecs import codecs
import subprocess
import os import os
import subprocess
import sys import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from yt_dlp.utils import intlist_to_bytes
from yt_dlp.aes import aes_encrypt, key_expansion from yt_dlp.aes import aes_encrypt, key_expansion
from yt_dlp.utils import intlist_to_bytes
secret_msg = b'Secret message goes here' secret_msg = b'Secret message goes here'

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from inspect import getsource
import os import os
from os.path import dirname as dirn
import sys import sys
from inspect import getsource
from os.path import dirname as dirn
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__)))) sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))

View File

@ -2,8 +2,8 @@
# yt-dlp --help | make_readme.py # yt-dlp --help | make_readme.py
# This must be run in a console of correct width # This must be run in a console of correct width
import sys
import re import re
import sys
README_FILE = 'README.md' README_FILE = 'README.md'
helptext = sys.stdin.read() helptext = sys.stdin.read()

View File

@ -3,7 +3,6 @@
import os import os
import sys import sys
# Import yt_dlp # Import yt_dlp
ROOT_DIR = os.path.join(os.path.dirname(__file__), '..') ROOT_DIR = os.path.join(os.path.dirname(__file__), '..')
sys.path.insert(0, ROOT_DIR) sys.path.insert(0, ROOT_DIR)

View File

@ -8,7 +8,6 @@
from yt_dlp.compat import compat_urllib_request from yt_dlp.compat import compat_urllib_request
# usage: python3 ./devscripts/update-formulae.py <path-to-formulae-rb> <version> # usage: python3 ./devscripts/update-formulae.py <path-to-formulae-rb> <version>
# version can be either 0-aligned (yt-dlp version) or normalized (PyPl version) # version can be either 0-aligned (yt-dlp version) or normalized (PyPl version)

View File

@ -1,8 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from datetime import datetime
import sys
import subprocess import subprocess
import sys
from datetime import datetime
with open('yt_dlp/version.py') as f: with open('yt_dlp/version.py') as f:
exec(compile(f.read(), 'yt_dlp/version.py', 'exec')) exec(compile(f.read(), 'yt_dlp/version.py', 'exec'))

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
from os.path import dirname as dirn
import sys import sys
from os.path import dirname as dirn
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__)))) sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
import yt_dlp import yt_dlp

View File

@ -2,14 +2,20 @@
import os import os
import platform import platform
import sys import sys
from PyInstaller.utils.hooks import collect_submodules
from PyInstaller.utils.hooks import collect_submodules
OS_NAME = platform.system() OS_NAME = platform.system()
if OS_NAME == 'Windows': if OS_NAME == 'Windows':
from PyInstaller.utils.win32.versioninfo import ( from PyInstaller.utils.win32.versioninfo import (
VarStruct, VarFileInfo, StringStruct, StringTable, FixedFileInfo,
StringFileInfo, FixedFileInfo, VSVersionInfo, SetVersion, SetVersion,
StringFileInfo,
StringStruct,
StringTable,
VarFileInfo,
VarStruct,
VSVersionInfo,
) )
elif OS_NAME == 'Darwin': elif OS_NAME == 'Darwin':
pass pass

View File

@ -1,13 +1,13 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os.path import os.path
import warnings
import sys import sys
import warnings
try: try:
from setuptools import setup, Command, find_packages from setuptools import Command, find_packages, setup
setuptools_available = True setuptools_available = True
except ImportError: except ImportError:
from distutils.core import setup, Command from distutils.core import Command, setup
setuptools_available = False setuptools_available = False
from distutils.spawn import spawn from distutils.spawn import spawn

View File

@ -3,21 +3,14 @@
import json import json
import os.path import os.path
import re import re
import types
import ssl import ssl
import sys import sys
import types
import yt_dlp.extractor import yt_dlp.extractor
from yt_dlp import YoutubeDL from yt_dlp import YoutubeDL
from yt_dlp.compat import ( from yt_dlp.compat import compat_os_name, compat_str
compat_os_name, from yt_dlp.utils import preferredencoding, write_string
compat_str,
)
from yt_dlp.utils import (
preferredencoding,
write_string,
)
if 'pytest' in sys.modules: if 'pytest' in sys.modules:
import pytest import pytest

View File

@ -3,15 +3,21 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import FakeYDL, expect_dict, expect_value, http_server_port
from yt_dlp.compat import compat_etree_fromstring, compat_http_server
from yt_dlp.extractor.common import InfoExtractor
from yt_dlp.extractor import YoutubeIE, get_info_extractor
from yt_dlp.utils import encode_data_uri, strip_jsonp, ExtractorError, RegexNotFoundError
import threading import threading
from test.helper import FakeYDL, expect_dict, expect_value, http_server_port
from yt_dlp.compat import compat_etree_fromstring, compat_http_server
from yt_dlp.extractor import YoutubeIE, get_info_extractor
from yt_dlp.extractor.common import InfoExtractor
from yt_dlp.utils import (
ExtractorError,
RegexNotFoundError,
encode_data_uri,
strip_jsonp,
)
TEAPOT_RESPONSE_STATUS = 418 TEAPOT_RESPONSE_STATUS = 418
TEAPOT_RESPONSE_BODY = "<h1>418 I'm a teapot</h1>" TEAPOT_RESPONSE_BODY = "<h1>418 I'm a teapot</h1>"

View File

@ -3,18 +3,29 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import copy import copy
import json import json
from test.helper import FakeYDL, assertRegexpMatches from test.helper import FakeYDL, assertRegexpMatches
from yt_dlp import YoutubeDL from yt_dlp import YoutubeDL
from yt_dlp.compat import compat_os_name, compat_setenv, compat_str, compat_urllib_error from yt_dlp.compat import (
compat_os_name,
compat_setenv,
compat_str,
compat_urllib_error,
)
from yt_dlp.extractor import YoutubeIE from yt_dlp.extractor import YoutubeIE
from yt_dlp.extractor.common import InfoExtractor from yt_dlp.extractor.common import InfoExtractor
from yt_dlp.postprocessor.common import PostProcessor from yt_dlp.postprocessor.common import PostProcessor
from yt_dlp.utils import ExtractorError, int_or_none, match_filter_func, LazyList from yt_dlp.utils import (
ExtractorError,
LazyList,
int_or_none,
match_filter_func,
)
TEST_URL = 'http://localhost/sample.mp4' TEST_URL = 'http://localhost/sample.mp4'

View File

@ -4,6 +4,7 @@
import sys import sys
import tempfile import tempfile
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from yt_dlp.utils import YoutubeDLCookieJar from yt_dlp.utils import YoutubeDLCookieJar

View File

@ -3,26 +3,28 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import base64
from yt_dlp.aes import ( from yt_dlp.aes import (
aes_decrypt, BLOCK_SIZE_BYTES,
aes_encrypt,
aes_ecb_encrypt,
aes_ecb_decrypt,
aes_cbc_decrypt, aes_cbc_decrypt,
aes_cbc_decrypt_bytes, aes_cbc_decrypt_bytes,
aes_cbc_encrypt, aes_cbc_encrypt,
aes_ctr_decrypt, aes_ctr_decrypt,
aes_ctr_encrypt, aes_ctr_encrypt,
aes_decrypt,
aes_decrypt_text,
aes_ecb_decrypt,
aes_ecb_encrypt,
aes_encrypt,
aes_gcm_decrypt_and_verify, aes_gcm_decrypt_and_verify,
aes_gcm_decrypt_and_verify_bytes, aes_gcm_decrypt_and_verify_bytes,
aes_decrypt_text,
BLOCK_SIZE_BYTES,
) )
from yt_dlp.compat import compat_pycrypto_AES from yt_dlp.compat import compat_pycrypto_AES
from yt_dlp.utils import bytes_to_intlist, intlist_to_bytes from yt_dlp.utils import bytes_to_intlist, intlist_to_bytes
import base64
# the encrypted data can be generate with 'devscripts/generate_aes_testdata.py' # the encrypted data can be generate with 'devscripts/generate_aes_testdata.py'

View File

@ -3,9 +3,10 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import try_rm, is_download_test from test.helper import is_download_test, try_rm
from yt_dlp import YoutubeDL from yt_dlp import YoutubeDL

View File

@ -1,19 +1,16 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Allow direct execution # Allow direct execution
import collections
import os import os
import sys import sys
import unittest import unittest
import collections
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import gettestcases from test.helper import gettestcases
from yt_dlp.extractor import ( from yt_dlp.extractor import FacebookIE, YoutubeIE, gen_extractors
FacebookIE,
gen_extractors,
YoutubeIE,
)
class TestAllURLsMatching(unittest.TestCase): class TestAllURLsMatching(unittest.TestCase):

View File

@ -1,14 +1,15 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import shutil
# Allow direct execution # Allow direct execution
import os import os
import shutil
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import FakeYDL from test.helper import FakeYDL
from yt_dlp.cache import Cache from yt_dlp.cache import Cache

View File

@ -3,14 +3,15 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from yt_dlp.compat import ( from yt_dlp.compat import (
compat_getenv,
compat_setenv,
compat_etree_fromstring, compat_etree_fromstring,
compat_expanduser, compat_expanduser,
compat_getenv,
compat_setenv,
compat_str, compat_str,
compat_struct_unpack, compat_struct_unpack,
compat_urllib_parse_unquote, compat_urllib_parse_unquote,

View File

@ -6,10 +6,10 @@
LinuxChromeCookieDecryptor, LinuxChromeCookieDecryptor,
MacChromeCookieDecryptor, MacChromeCookieDecryptor,
WindowsChromeCookieDecryptor, WindowsChromeCookieDecryptor,
parse_safari_cookies,
pbkdf2_sha1,
_get_linux_desktop_environment, _get_linux_desktop_environment,
_LinuxDesktopEnvironment, _LinuxDesktopEnvironment,
parse_safari_cookies,
pbkdf2_sha1,
) )

View File

@ -1,8 +1,12 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Allow direct execution # Allow direct execution
import hashlib
import json
import os import os
import socket
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import ( from test.helper import (
@ -16,24 +20,19 @@
try_rm, try_rm,
) )
import hashlib
import json
import socket
import yt_dlp.YoutubeDL import yt_dlp.YoutubeDL
from yt_dlp.compat import ( from yt_dlp.compat import (
compat_http_client, compat_http_client,
compat_urllib_error,
compat_HTTPError, compat_HTTPError,
compat_urllib_error,
) )
from yt_dlp.extractor import get_info_extractor
from yt_dlp.utils import ( from yt_dlp.utils import (
DownloadError, DownloadError,
ExtractorError, ExtractorError,
format_bytes,
UnavailableVideoError, UnavailableVideoError,
format_bytes,
) )
from yt_dlp.extractor import get_info_extractor
RETRIES = 3 RETRIES = 3

View File

@ -4,14 +4,16 @@
import re import re
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import threading
from test.helper import http_server_port, try_rm from test.helper import http_server_port, try_rm
from yt_dlp import YoutubeDL from yt_dlp import YoutubeDL
from yt_dlp.compat import compat_http_server from yt_dlp.compat import compat_http_server
from yt_dlp.downloader.http import HttpFD from yt_dlp.downloader.http import HttpFD
from yt_dlp.utils import encodeFilename from yt_dlp.utils import encodeFilename
import threading
TEST_DIR = os.path.dirname(os.path.abspath(__file__)) TEST_DIR = os.path.dirname(os.path.abspath(__file__))

View File

@ -1,9 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import unittest
import sys
import os import os
import subprocess import subprocess
import sys
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from yt_dlp.utils import encodeArgument from yt_dlp.utils import encodeArgument

View File

@ -3,13 +3,15 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import http_server_port
from yt_dlp import YoutubeDL
from yt_dlp.compat import compat_http_server, compat_urllib_request
import ssl import ssl
import threading import threading
from test.helper import http_server_port
from yt_dlp import YoutubeDL
from yt_dlp.compat import compat_http_server, compat_urllib_request
TEST_DIR = os.path.dirname(os.path.abspath(__file__)) TEST_DIR = os.path.dirname(os.path.abspath(__file__))

View File

@ -3,9 +3,11 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import FakeYDL, is_download_test from test.helper import FakeYDL, is_download_test
from yt_dlp.extractor import IqiyiIE from yt_dlp.extractor import IqiyiIE

View File

@ -3,6 +3,7 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from yt_dlp.jsinterp import JSInterpreter from yt_dlp.jsinterp import JSInterpreter

View File

@ -1,6 +1,7 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

View File

@ -1,14 +1,14 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
from os.path import join
import subprocess import subprocess
import sys import sys
import unittest import unittest
from os.path import join
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import is_download_test, try_rm from test.helper import is_download_test, try_rm
root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
download_file = join(root_dir, 'test.webm') download_file = join(root_dir, 'test.webm')

View File

@ -2,9 +2,11 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import get_params, try_rm, is_download_test from test.helper import get_params, is_download_test, try_rm
import yt_dlp.YoutubeDL import yt_dlp.YoutubeDL
from yt_dlp.utils import DownloadError from yt_dlp.utils import DownloadError

View File

@ -13,7 +13,7 @@
FFmpegThumbnailsConvertorPP, FFmpegThumbnailsConvertorPP,
MetadataFromFieldPP, MetadataFromFieldPP,
MetadataParserPP, MetadataParserPP,
ModifyChaptersPP ModifyChaptersPP,
) )

View File

@ -3,20 +3,14 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import random import random
import subprocess import subprocess
from test.helper import FakeYDL, get_params, is_download_test
from test.helper import ( from yt_dlp.compat import compat_str, compat_urllib_request
FakeYDL,
get_params,
is_download_test,
)
from yt_dlp.compat import (
compat_str,
compat_urllib_request,
)
@is_download_test @is_download_test

View File

@ -3,29 +3,29 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import FakeYDL, md5, is_download_test from test.helper import FakeYDL, is_download_test, md5
from yt_dlp.extractor import ( from yt_dlp.extractor import (
YoutubeIE, NPOIE,
NRKTVIE,
PBSIE,
CeskaTelevizeIE,
ComedyCentralIE,
DailymotionIE, DailymotionIE,
DemocracynowIE,
LyndaIE,
RaiPlayIE,
RTVEALaCartaIE,
TedTalkIE, TedTalkIE,
ThePlatformFeedIE,
ThePlatformIE,
VikiIE,
VimeoIE, VimeoIE,
WallaIE, WallaIE,
CeskaTelevizeIE, YoutubeIE,
LyndaIE,
NPOIE,
PBSIE,
ComedyCentralIE,
NRKTVIE,
RaiPlayIE,
VikiIE,
ThePlatformIE,
ThePlatformFeedIE,
RTVEALaCartaIE,
DemocracynowIE,
) )

View File

@ -3,10 +3,12 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import json import json
from yt_dlp.update import rsa_verify from yt_dlp.update import rsa_verify

View File

@ -3,6 +3,7 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@ -12,75 +13,95 @@
import json import json
import xml.etree.ElementTree import xml.etree.ElementTree
from yt_dlp.compat import (
compat_chr,
compat_etree_fromstring,
compat_getenv,
compat_HTMLParseError,
compat_os_name,
compat_setenv,
)
from yt_dlp.utils import ( from yt_dlp.utils import (
Config,
DateRange,
ExtractorError,
InAdvancePagedList,
LazyList,
OnDemandPagedList,
age_restricted, age_restricted,
args_to_str, args_to_str,
encode_base_n, base_url,
caesar, caesar,
clean_html, clean_html,
clean_podcast_url, clean_podcast_url,
Config, cli_bool_option,
cli_option,
cli_valueless_option,
date_from_str, date_from_str,
datetime_from_str, datetime_from_str,
DateRange,
detect_exe_version, detect_exe_version,
determine_ext, determine_ext,
dfxp2srt,
dict_get, dict_get,
encode_base_n,
encode_compat_str, encode_compat_str,
encodeFilename, encodeFilename,
escape_rfc3986, escape_rfc3986,
escape_url, escape_url,
expand_path,
extract_attributes, extract_attributes,
ExtractorError,
find_xpath_attr, find_xpath_attr,
fix_xml_ampersands, fix_xml_ampersands,
format_bytes,
float_or_none, float_or_none,
get_element_by_class, format_bytes,
get_element_by_attribute, get_element_by_attribute,
get_elements_by_class, get_element_by_class,
get_elements_by_attribute,
get_element_html_by_class,
get_element_html_by_attribute, get_element_html_by_attribute,
get_elements_html_by_class, get_element_html_by_class,
get_elements_html_by_attribute,
get_elements_text_and_html_by_attribute,
get_element_text_and_html_by_tag, get_element_text_and_html_by_tag,
InAdvancePagedList, get_elements_by_attribute,
get_elements_by_class,
get_elements_html_by_attribute,
get_elements_html_by_class,
get_elements_text_and_html_by_attribute,
int_or_none, int_or_none,
intlist_to_bytes, intlist_to_bytes,
iri_to_uri,
is_html, is_html,
js_to_json, js_to_json,
limit_length, limit_length,
locked_file, locked_file,
lowercase_escape,
match_str,
merge_dicts, merge_dicts,
mimetype2ext, mimetype2ext,
month_by_name, month_by_name,
multipart_encode, multipart_encode,
ohdave_rsa_encrypt, ohdave_rsa_encrypt,
OnDemandPagedList,
orderedSet, orderedSet,
parse_age_limit, parse_age_limit,
parse_bitrate,
parse_codecs,
parse_count,
parse_dfxp_time_expr,
parse_duration, parse_duration,
parse_filesize, parse_filesize,
parse_count,
parse_iso8601, parse_iso8601,
parse_resolution,
parse_bitrate,
parse_qs, parse_qs,
parse_resolution,
pkcs1pad, pkcs1pad,
prepend_extension,
read_batch_urls, read_batch_urls,
remove_end,
remove_quotes,
remove_start,
render_table,
replace_extension,
rot47,
sanitize_filename, sanitize_filename,
sanitize_path, sanitize_path,
sanitize_url, sanitize_url,
sanitized_Request, sanitized_Request,
expand_path,
prepend_extension,
replace_extension,
remove_start,
remove_end,
remove_quotes,
rot47,
shell_quote, shell_quote,
smuggle_url, smuggle_url,
str_to_int, str_to_int,
@ -92,38 +113,18 @@
unified_strdate, unified_strdate,
unified_timestamp, unified_timestamp,
unsmuggle_url, unsmuggle_url,
update_url_query,
uppercase_escape, uppercase_escape,
lowercase_escape,
url_basename, url_basename,
url_or_none, url_or_none,
base_url,
urljoin,
urlencode_postdata, urlencode_postdata,
urljoin,
urshift, urshift,
update_url_query,
version_tuple, version_tuple,
xpath_with_ns, xpath_attr,
xpath_element, xpath_element,
xpath_text, xpath_text,
xpath_attr, xpath_with_ns,
render_table,
match_str,
parse_dfxp_time_expr,
dfxp2srt,
cli_option,
cli_valueless_option,
cli_bool_option,
parse_codecs,
iri_to_uri,
LazyList,
)
from yt_dlp.compat import (
compat_chr,
compat_etree_fromstring,
compat_getenv,
compat_HTMLParseError,
compat_os_name,
compat_setenv,
) )

View File

@ -1,9 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import unittest
import sys
import os import os
import subprocess import subprocess
import sys
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
rootDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) rootDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

View File

@ -3,17 +3,15 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import get_params, try_rm, is_download_test
import io import io
import xml.etree.ElementTree import xml.etree.ElementTree
from test.helper import get_params, is_download_test, try_rm
import yt_dlp.YoutubeDL
import yt_dlp.extractor import yt_dlp.extractor
import yt_dlp.YoutubeDL
class YoutubeDL(yt_dlp.YoutubeDL): class YoutubeDL(yt_dlp.YoutubeDL):

View File

@ -3,14 +3,12 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import FakeYDL, is_download_test from test.helper import FakeYDL, is_download_test
from yt_dlp.extractor import ( from yt_dlp.extractor import YoutubeIE, YoutubeTabIE
YoutubeIE,
YoutubeTabIE,
)
@is_download_test @is_download_test

View File

@ -3,6 +3,7 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

View File

@ -3,16 +3,17 @@
import os import os
import sys import sys
import unittest import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import re import re
import string import string
import urllib.request import urllib.request
from test.helper import FakeYDL, is_download_test from test.helper import FakeYDL, is_download_test
from yt_dlp.compat import compat_str
from yt_dlp.extractor import YoutubeIE from yt_dlp.extractor import YoutubeIE
from yt_dlp.jsinterp import JSInterpreter from yt_dlp.jsinterp import JSInterpreter
from yt_dlp.compat import compat_str
_SIG_TESTS = [ _SIG_TESTS = [
( (

View File

@ -12,6 +12,7 @@
import operator import operator
import os import os
import platform import platform
import random
import re import re
import shutil import shutil
import subprocess import subprocess
@ -20,13 +21,12 @@
import time import time
import tokenize import tokenize
import traceback import traceback
import random
import unicodedata import unicodedata
import urllib.request import urllib.request
from enum import Enum from enum import Enum
from string import ascii_letters from string import ascii_letters
from .cache import Cache
from .compat import ( from .compat import (
compat_brotli, compat_brotli,
compat_get_terminal_size, compat_get_terminal_size,
@ -39,109 +39,15 @@
windows_enable_vt_mode, windows_enable_vt_mode,
) )
from .cookies import load_cookies from .cookies import load_cookies
from .utils import ( from .downloader import FFmpegFD, get_suitable_downloader, shorten_protocol_name
age_restricted,
args_to_str,
ContentTooShortError,
date_from_str,
DateRange,
DEFAULT_OUTTMPL,
determine_ext,
determine_protocol,
DownloadCancelled,
DownloadError,
encode_compat_str,
encodeFilename,
EntryNotInPlaylist,
error_to_compat_str,
ExistingVideoReached,
expand_path,
ExtractorError,
filter_dict,
float_or_none,
format_bytes,
format_field,
format_decimal_suffix,
formatSeconds,
GeoRestrictedError,
get_domain,
has_certifi,
HEADRequest,
InAdvancePagedList,
int_or_none,
iri_to_uri,
ISO3166Utils,
join_nonempty,
LazyList,
LINK_TEMPLATES,
locked_file,
make_dir,
make_HTTPS_handler,
MaxDownloadsReached,
merge_headers,
network_exceptions,
NO_DEFAULT,
number_of_digits,
orderedSet,
OUTTMPL_TYPES,
PagedList,
parse_filesize,
PerRequestProxyHandler,
platform_name,
Popen,
POSTPROCESS_WHEN,
PostProcessingError,
preferredencoding,
prepend_extension,
ReExtractInfo,
register_socks_protocols,
RejectedVideoReached,
remove_terminal_sequences,
render_table,
replace_extension,
SameFileError,
sanitize_filename,
sanitize_path,
sanitize_url,
sanitized_Request,
std_headers,
STR_FORMAT_RE_TMPL,
STR_FORMAT_TYPES,
str_or_none,
strftime_or_none,
subtitles_filename,
supports_terminal_sequences,
timetuple_from_msec,
to_high_limit_path,
traverse_obj,
try_get,
UnavailableVideoError,
url_basename,
variadic,
version_tuple,
write_json_file,
write_string,
YoutubeDLCookieProcessor,
YoutubeDLHandler,
YoutubeDLRedirectHandler,
)
from .cache import Cache
from .minicurses import format_text
from .extractor import (
gen_extractor_classes,
get_info_extractor,
_LAZY_LOADER,
_PLUGIN_CLASSES as plugin_extractors
)
from .extractor.openload import PhantomJSwrapper
from .downloader import (
FFmpegFD,
get_suitable_downloader,
shorten_protocol_name
)
from .downloader.rtmp import rtmpdump_version from .downloader.rtmp import rtmpdump_version
from .extractor import _LAZY_LOADER
from .extractor import _PLUGIN_CLASSES as plugin_extractors
from .extractor import gen_extractor_classes, get_info_extractor
from .extractor.openload import PhantomJSwrapper
from .minicurses import format_text
from .postprocessor import _PLUGIN_CLASSES as plugin_postprocessors
from .postprocessor import ( from .postprocessor import (
get_postprocessor,
EmbedThumbnailPP, EmbedThumbnailPP,
FFmpegFixupDuplicateMoovPP, FFmpegFixupDuplicateMoovPP,
FFmpegFixupDurationPP, FFmpegFixupDurationPP,
@ -152,10 +58,96 @@
FFmpegMergerPP, FFmpegMergerPP,
FFmpegPostProcessor, FFmpegPostProcessor,
MoveFilesAfterDownloadPP, MoveFilesAfterDownloadPP,
_PLUGIN_CLASSES as plugin_postprocessors get_postprocessor,
) )
from .update import detect_variant from .update import detect_variant
from .version import __version__, RELEASE_GIT_HEAD from .utils import (
DEFAULT_OUTTMPL,
LINK_TEMPLATES,
NO_DEFAULT,
OUTTMPL_TYPES,
POSTPROCESS_WHEN,
STR_FORMAT_RE_TMPL,
STR_FORMAT_TYPES,
ContentTooShortError,
DateRange,
DownloadCancelled,
DownloadError,
EntryNotInPlaylist,
ExistingVideoReached,
ExtractorError,
GeoRestrictedError,
HEADRequest,
InAdvancePagedList,
ISO3166Utils,
LazyList,
MaxDownloadsReached,
PagedList,
PerRequestProxyHandler,
Popen,
PostProcessingError,
ReExtractInfo,
RejectedVideoReached,
SameFileError,
UnavailableVideoError,
YoutubeDLCookieProcessor,
YoutubeDLHandler,
YoutubeDLRedirectHandler,
age_restricted,
args_to_str,
date_from_str,
determine_ext,
determine_protocol,
encode_compat_str,
encodeFilename,
error_to_compat_str,
expand_path,
filter_dict,
float_or_none,
format_bytes,
format_decimal_suffix,
format_field,
formatSeconds,
get_domain,
has_certifi,
int_or_none,
iri_to_uri,
join_nonempty,
locked_file,
make_dir,
make_HTTPS_handler,
merge_headers,
network_exceptions,
number_of_digits,
orderedSet,
parse_filesize,
platform_name,
preferredencoding,
prepend_extension,
register_socks_protocols,
remove_terminal_sequences,
render_table,
replace_extension,
sanitize_filename,
sanitize_path,
sanitize_url,
sanitized_Request,
std_headers,
str_or_none,
strftime_or_none,
subtitles_filename,
supports_terminal_sequences,
timetuple_from_msec,
to_high_limit_path,
traverse_obj,
try_get,
url_basename,
variadic,
version_tuple,
write_json_file,
write_string,
)
from .version import RELEASE_GIT_HEAD, __version__
if compat_os_name == 'nt': if compat_os_name == 'nt':
import ctypes import ctypes
@ -3666,9 +3658,9 @@ def python_implementation():
) or 'none' ) or 'none'
write_debug('exe versions: %s' % exe_str) write_debug('exe versions: %s' % exe_str)
from .cookies import SECRETSTORAGE_AVAILABLE, SQLITE_AVAILABLE
from .downloader.websocket import has_websockets from .downloader.websocket import has_websockets
from .postprocessor.embedthumbnail import has_mutagen from .postprocessor.embedthumbnail import has_mutagen
from .cookies import SQLITE_AVAILABLE, SECRETSTORAGE_AVAILABLE
lib_str = join_nonempty( lib_str = join_nonempty(
compat_brotli and compat_brotli.__name__, compat_brotli and compat_brotli.__name__,

View File

@ -9,39 +9,13 @@
import re import re
import sys import sys
from .options import parseOpts from .compat import compat_getpass, compat_os_name, compat_shlex_quote
from .compat import (
compat_getpass,
compat_os_name,
compat_shlex_quote,
)
from .cookies import SUPPORTED_BROWSERS, SUPPORTED_KEYRINGS from .cookies import SUPPORTED_BROWSERS, SUPPORTED_KEYRINGS
from .utils import (
DateRange,
decodeOption,
DownloadCancelled,
DownloadError,
expand_path,
float_or_none,
GeoUtils,
int_or_none,
match_filter_func,
NO_DEFAULT,
parse_duration,
preferredencoding,
read_batch_urls,
render_table,
SameFileError,
setproctitle,
std_headers,
traverse_obj,
write_string,
)
from .update import run_update
from .downloader import FileDownloader from .downloader import FileDownloader
from .extractor import gen_extractors, list_extractors from .extractor import gen_extractors, list_extractors
from .extractor.common import InfoExtractor
from .extractor.adobepass import MSO_INFO from .extractor.adobepass import MSO_INFO
from .extractor.common import InfoExtractor
from .options import parseOpts
from .postprocessor import ( from .postprocessor import (
FFmpegExtractAudioPP, FFmpegExtractAudioPP,
FFmpegSubtitlesConvertorPP, FFmpegSubtitlesConvertorPP,
@ -51,6 +25,28 @@
MetadataFromFieldPP, MetadataFromFieldPP,
MetadataParserPP, MetadataParserPP,
) )
from .update import run_update
from .utils import (
NO_DEFAULT,
DateRange,
DownloadCancelled,
DownloadError,
GeoUtils,
SameFileError,
decodeOption,
expand_path,
float_or_none,
int_or_none,
match_filter_func,
parse_duration,
preferredencoding,
read_batch_urls,
render_table,
setproctitle,
std_headers,
traverse_obj,
write_string,
)
from .YoutubeDL import YoutubeDL from .YoutubeDL import YoutubeDL

View File

@ -1,15 +1,7 @@
from math import ceil from math import ceil
from .compat import ( from .compat import compat_b64decode, compat_ord, compat_pycrypto_AES
compat_b64decode, from .utils import bytes_to_intlist, intlist_to_bytes
compat_ord,
compat_pycrypto_AES,
)
from .utils import (
bytes_to_intlist,
intlist_to_bytes,
)
if compat_pycrypto_AES: if compat_pycrypto_AES:
def aes_cbc_decrypt_bytes(data, key, iv): def aes_cbc_decrypt_bytes(data, key, iv):

View File

@ -6,10 +6,7 @@
import traceback import traceback
from .compat import compat_getenv from .compat import compat_getenv
from .utils import ( from .utils import expand_path, write_json_file
expand_path,
write_json_file,
)
class Cache: class Cache:

View File

@ -16,17 +16,9 @@
aes_gcm_decrypt_and_verify_bytes, aes_gcm_decrypt_and_verify_bytes,
unpad_pkcs7, unpad_pkcs7,
) )
from .compat import ( from .compat import compat_b64decode, compat_cookiejar_Cookie
compat_b64decode,
compat_cookiejar_Cookie,
)
from .minicurses import MultilinePrinter, QuietMultilinePrinter from .minicurses import MultilinePrinter, QuietMultilinePrinter
from .utils import ( from .utils import Popen, YoutubeDLCookieJar, error_to_str, expand_path
error_to_str,
expand_path,
Popen,
YoutubeDLCookieJar,
)
try: try:
import sqlite3 import sqlite3

View File

@ -1,8 +1,5 @@
from ..compat import compat_str from ..compat import compat_str
from ..utils import ( from ..utils import NO_DEFAULT, determine_protocol
determine_protocol,
NO_DEFAULT
)
def get_suitable_downloader(info_dict, params={}, default=NO_DEFAULT, protocol=None, to_stdout=False): def get_suitable_downloader(info_dict, params={}, default=NO_DEFAULT, protocol=None, to_stdout=False):
@ -27,21 +24,18 @@ def get_suitable_downloader(info_dict, params={}, default=NO_DEFAULT, protocol=N
# Some of these require get_suitable_downloader # Some of these require get_suitable_downloader
from .common import FileDownloader from .common import FileDownloader
from .dash import DashSegmentsFD from .dash import DashSegmentsFD
from .external import FFmpegFD, get_external_downloader
from .f4m import F4mFD from .f4m import F4mFD
from .fc2 import FC2LiveFD from .fc2 import FC2LiveFD
from .hls import HlsFD from .hls import HlsFD
from .http import HttpFD from .http import HttpFD
from .rtmp import RtmpFD
from .rtsp import RtspFD
from .ism import IsmFD from .ism import IsmFD
from .mhtml import MhtmlFD from .mhtml import MhtmlFD
from .niconico import NiconicoDmcFD from .niconico import NiconicoDmcFD
from .rtmp import RtmpFD
from .rtsp import RtspFD
from .websocket import WebSocketFragmentFD from .websocket import WebSocketFragmentFD
from .youtube_live_chat import YoutubeLiveChatFD from .youtube_live_chat import YoutubeLiveChatFD
from .external import (
get_external_downloader,
FFmpegFD,
)
PROTOCOL_MAP = { PROTOCOL_MAP = {
'rtmp': RtmpFD, 'rtmp': RtmpFD,

View File

@ -1,26 +1,26 @@
import errno
import os import os
import random
import re import re
import time import time
import random
import errno
from ..minicurses import (
BreaklineStatusPrinter,
MultilineLogger,
MultilinePrinter,
QuietMultilinePrinter,
)
from ..utils import ( from ..utils import (
LockingUnsupportedError,
decodeArgument, decodeArgument,
encodeFilename, encodeFilename,
error_to_compat_str, error_to_compat_str,
format_bytes, format_bytes,
LockingUnsupportedError,
sanitize_open, sanitize_open,
shell_quote, shell_quote,
timeconvert, timeconvert,
timetuple_from_msec, timetuple_from_msec,
) )
from ..minicurses import (
MultilineLogger,
MultilinePrinter,
QuietMultilinePrinter,
BreaklineStatusPrinter
)
class FileDownloader: class FileDownloader:

View File

@ -1,8 +1,7 @@
import time import time
from ..downloader import get_suitable_downloader
from .fragment import FragmentFD from .fragment import FragmentFD
from ..downloader import get_suitable_downloader
from ..utils import urljoin from ..utils import urljoin

View File

@ -5,23 +5,20 @@
import time import time
from .fragment import FragmentFD from .fragment import FragmentFD
from ..compat import ( from ..compat import compat_setenv, compat_str
compat_setenv, from ..postprocessor.ffmpeg import EXT_TO_OUT_FORMATS, FFmpegPostProcessor
compat_str,
)
from ..postprocessor.ffmpeg import FFmpegPostProcessor, EXT_TO_OUT_FORMATS
from ..utils import ( from ..utils import (
Popen,
_configuration_args,
check_executable,
classproperty, classproperty,
cli_bool_option,
cli_option, cli_option,
cli_valueless_option, cli_valueless_option,
cli_bool_option,
_configuration_args,
determine_ext, determine_ext,
encodeFilename,
encodeArgument, encodeArgument,
encodeFilename,
handle_youtubedl_headers, handle_youtubedl_headers,
check_executable,
Popen,
remove_end, remove_end,
) )

View File

@ -6,16 +6,13 @@
from ..compat import ( from ..compat import (
compat_b64decode, compat_b64decode,
compat_etree_fromstring, compat_etree_fromstring,
compat_urlparse,
compat_urllib_error,
compat_urllib_parse_urlparse,
compat_struct_pack, compat_struct_pack,
compat_struct_unpack, compat_struct_unpack,
compat_urllib_error,
compat_urllib_parse_urlparse,
compat_urlparse,
) )
from ..utils import ( from ..utils import fix_xml_ampersands, xpath_text
fix_xml_ampersands,
xpath_text,
)
class DataTruncatedError(Exception): class DataTruncatedError(Exception):

View File

@ -13,15 +13,11 @@
from .common import FileDownloader from .common import FileDownloader
from .http import HttpFD from .http import HttpFD
from ..aes import aes_cbc_decrypt_bytes, unpad_pkcs7 from ..aes import aes_cbc_decrypt_bytes, unpad_pkcs7
from ..compat import ( from ..compat import compat_os_name, compat_struct_pack, compat_urllib_error
compat_os_name,
compat_urllib_error,
compat_struct_pack,
)
from ..utils import ( from ..utils import (
DownloadError, DownloadError,
error_to_compat_str,
encodeFilename, encodeFilename,
error_to_compat_str,
sanitized_Request, sanitized_Request,
traverse_obj, traverse_obj,
) )

View File

@ -1,21 +1,13 @@
import re
import io
import binascii import binascii
import io
import re
from ..downloader import get_suitable_downloader
from .fragment import FragmentFD
from .external import FFmpegFD from .external import FFmpegFD
from .fragment import FragmentFD
from ..compat import (
compat_pycrypto_AES,
compat_urlparse,
)
from ..utils import (
parse_m3u8_attributes,
update_url_query,
bug_reports_message,
)
from .. import webvtt from .. import webvtt
from ..compat import compat_pycrypto_AES, compat_urlparse
from ..downloader import get_suitable_downloader
from ..utils import bug_reports_message, parse_m3u8_attributes, update_url_query
class HlsFD(FragmentFD): class HlsFD(FragmentFD):

View File

@ -1,24 +1,21 @@
import os import os
import random
import ssl import ssl
import time import time
import random
from .common import FileDownloader from .common import FileDownloader
from ..compat import ( from ..compat import compat_http_client, compat_urllib_error
compat_urllib_error,
compat_http_client
)
from ..utils import ( from ..utils import (
ContentTooShortError, ContentTooShortError,
ThrottledDownload,
XAttrMetadataError,
XAttrUnavailableError,
encodeFilename, encodeFilename,
int_or_none, int_or_none,
parse_http_range, parse_http_range,
sanitized_Request, sanitized_Request,
ThrottledDownload,
try_call, try_call,
write_xattr, write_xattr,
XAttrMetadataError,
XAttrUnavailableError,
) )
RESPONSE_READ_EXCEPTIONS = (TimeoutError, ConnectionError, ssl.SSLError, compat_http_client.HTTPException) RESPONSE_READ_EXCEPTIONS = (TimeoutError, ConnectionError, ssl.SSLError, compat_http_client.HTTPException)

View File

@ -1,13 +1,10 @@
import time
import binascii import binascii
import io import io
import struct import struct
import time
from .fragment import FragmentFD from .fragment import FragmentFD
from ..compat import ( from ..compat import compat_urllib_error
compat_urllib_error,
)
u8 = struct.Struct('>B') u8 = struct.Struct('>B')
u88 = struct.Struct('>Bx') u88 = struct.Struct('>Bx')

View File

@ -4,12 +4,7 @@
import uuid import uuid
from .fragment import FragmentFD from .fragment import FragmentFD
from ..utils import ( from ..utils import escapeHTML, formatSeconds, srt_subtitles_timecode, urljoin
escapeHTML,
formatSeconds,
srt_subtitles_timecode,
urljoin,
)
from ..version import __version__ as YT_DLP_VERSION from ..version import __version__ as YT_DLP_VERSION

View File

@ -6,11 +6,11 @@
from .common import FileDownloader from .common import FileDownloader
from ..compat import compat_str from ..compat import compat_str
from ..utils import ( from ..utils import (
check_executable,
encodeFilename,
encodeArgument,
get_exe_version,
Popen, Popen,
check_executable,
encodeArgument,
encodeFilename,
get_exe_version,
) )

View File

@ -2,10 +2,7 @@
import subprocess import subprocess
from .common import FileDownloader from .common import FileDownloader
from ..utils import ( from ..utils import check_executable, encodeFilename
check_executable,
encodeFilename,
)
class RtspFD(FileDownloader): class RtspFD(FileDownloader):

View File

@ -1,6 +1,6 @@
import asyncio
import os import os
import signal import signal
import asyncio
import threading import threading
try: try:

View File

@ -3,13 +3,8 @@
from .fragment import FragmentFD from .fragment import FragmentFD
from ..compat import compat_urllib_error from ..compat import compat_urllib_error
from ..utils import (
try_get,
dict_get,
int_or_none,
RegexNotFoundError,
)
from ..extractor.youtube import YoutubeBaseInfoExtractor as YT_BaseIE from ..extractor.youtube import YoutubeBaseInfoExtractor as YT_BaseIE
from ..utils import RegexNotFoundError, dict_get, int_or_none, try_get
class YoutubeLiveChatFD(FragmentFD): class YoutubeLiveChatFD(FragmentFD):

View File

@ -1,35 +1,31 @@
import io import base64
import json import binascii
import time
import hashlib import hashlib
import hmac import hmac
import io
import json
import re import re
import struct import struct
import time
import urllib.response import urllib.response
import uuid import uuid
from base64 import urlsafe_b64encode
from binascii import unhexlify
from .common import InfoExtractor from .common import InfoExtractor
from ..aes import aes_ecb_decrypt from ..aes import aes_ecb_decrypt
from ..compat import ( from ..compat import compat_urllib_parse_urlparse, compat_urllib_request
compat_urllib_parse_urlparse,
compat_urllib_request,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
bytes_to_intlist,
decode_base, decode_base,
int_or_none, int_or_none,
intlist_to_bytes,
request_to_url, request_to_url,
time_seconds, time_seconds,
update_url_query,
traverse_obj, traverse_obj,
intlist_to_bytes, update_url_query,
bytes_to_intlist,
urljoin, urljoin,
) )
# NOTE: network handler related code is temporary thing until network stack overhaul PRs are merged (#2861/#2862) # NOTE: network handler related code is temporary thing until network stack overhaul PRs are merged (#2861/#2862)
def add_opener(ydl, handler): def add_opener(ydl, handler):
@ -130,7 +126,7 @@ def _get_videokey_from_ticket(self, ticket):
encvideokey = bytes_to_intlist(struct.pack('>QQ', res >> 64, res & 0xffffffffffffffff)) encvideokey = bytes_to_intlist(struct.pack('>QQ', res >> 64, res & 0xffffffffffffffff))
h = hmac.new( h = hmac.new(
unhexlify(self.HKEY), binascii.unhexlify(self.HKEY),
(license_response['cid'] + self.ie._DEVICE_ID).encode('utf-8'), (license_response['cid'] + self.ie._DEVICE_ID).encode('utf-8'),
digestmod=hashlib.sha256) digestmod=hashlib.sha256)
enckey = bytes_to_intlist(h.digest()) enckey = bytes_to_intlist(h.digest())
@ -238,7 +234,7 @@ def mix_tmp(count):
def mix_twist(nonce): def mix_twist(nonce):
nonlocal tmp nonlocal tmp
mix_once(urlsafe_b64encode(tmp).rstrip(b'=') + nonce) mix_once(base64.urlsafe_b64encode(tmp).rstrip(b'=') + nonce)
mix_once(self._SECRETKEY) mix_once(self._SECRETKEY)
mix_tmp(time_struct.tm_mon) mix_tmp(time_struct.tm_mon)
@ -247,7 +243,7 @@ def mix_twist(nonce):
mix_twist(ts_1hour_str) mix_twist(ts_1hour_str)
mix_tmp(time_struct.tm_hour % 5) mix_tmp(time_struct.tm_hour % 5)
return urlsafe_b64encode(tmp).rstrip(b'=').decode('utf-8') return base64.urlsafe_b64encode(tmp).rstrip(b'=').decode('utf-8')
def _get_device_token(self): def _get_device_token(self):
if self._USERTOKEN: if self._USERTOKEN:

View File

@ -1,16 +1,16 @@
import base64 import base64
import collections import collections
import xml.etree.ElementTree
import hashlib import hashlib
import itertools import itertools
import json import json
import math
import netrc import netrc
import os import os
import random import random
import re import re
import sys import sys
import time import time
import math import xml.etree.ElementTree
from ..compat import ( from ..compat import (
compat_cookiejar_Cookie, compat_cookiejar_Cookie,
@ -29,11 +29,15 @@
compat_urlparse, compat_urlparse,
) )
from ..downloader import FileDownloader from ..downloader import FileDownloader
from ..downloader.f4m import ( from ..downloader.f4m import get_base_url, remove_encrypted_media
get_base_url,
remove_encrypted_media,
)
from ..utils import ( from ..utils import (
JSON_LD_RE,
NO_DEFAULT,
ExtractorError,
GeoRestrictedError,
GeoUtils,
RegexNotFoundError,
UnsupportedError,
age_restricted, age_restricted,
base_url, base_url,
bug_reports_message, bug_reports_message,
@ -44,20 +48,15 @@
encode_data_uri, encode_data_uri,
error_to_compat_str, error_to_compat_str,
extract_attributes, extract_attributes,
ExtractorError,
filter_dict, filter_dict,
fix_xml_ampersands, fix_xml_ampersands,
float_or_none, float_or_none,
format_field, format_field,
GeoRestrictedError,
GeoUtils,
int_or_none, int_or_none,
join_nonempty, join_nonempty,
js_to_json, js_to_json,
JSON_LD_RE,
mimetype2ext, mimetype2ext,
network_exceptions, network_exceptions,
NO_DEFAULT,
orderedSet, orderedSet,
parse_bitrate, parse_bitrate,
parse_codecs, parse_codecs,
@ -65,7 +64,6 @@
parse_iso8601, parse_iso8601,
parse_m3u8_attributes, parse_m3u8_attributes,
parse_resolution, parse_resolution,
RegexNotFoundError,
sanitize_filename, sanitize_filename,
sanitized_Request, sanitized_Request,
str_or_none, str_or_none,
@ -74,7 +72,6 @@
traverse_obj, traverse_obj,
try_get, try_get,
unescapeHTML, unescapeHTML,
UnsupportedError,
unified_strdate, unified_strdate,
unified_timestamp, unified_timestamp,
update_Request, update_Request,

View File

@ -1,7 +1,5 @@
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import compat_urlparse
compat_urlparse,
)
class RtmpIE(InfoExtractor): class RtmpIE(InfoExtractor):

View File

@ -2,8 +2,107 @@
import re import re
import xml.etree.ElementTree import xml.etree.ElementTree
from .ant1newsgr import Ant1NewsGrEmbedIE
from .anvato import AnvatoIE
from .apa import APAIE
from .arcpublishing import ArcPublishingIE
from .arkena import ArkenaIE
from .arte import ArteTVEmbedIE
from .bitchute import BitChuteIE
from .blogger import BloggerIE
from .brightcove import BrightcoveLegacyIE, BrightcoveNewIE
from .channel9 import Channel9IE
from .cloudflarestream import CloudflareStreamIE
from .common import InfoExtractor from .common import InfoExtractor
from .commonprotocols import RtmpIE
from .condenast import CondeNastIE
from .dailymail import DailyMailIE
from .dailymotion import DailymotionIE
from .dbtv import DBTVIE
from .digiteka import DigitekaIE
from .drtuber import DrTuberIE
from .eagleplatform import EaglePlatformIE
from .ertgr import ERTWebtvEmbedIE
from .expressen import ExpressenIE
from .facebook import FacebookIE
from .foxnews import FoxNewsIE
from .gedidigital import GediDigitalIE
from .gfycat import GfycatIE
from .glomex import GlomexEmbedIE
from .googledrive import GoogleDriveIE
from .indavideo import IndavideoEmbedIE
from .instagram import InstagramIE
from .joj import JojIE
from .jwplatform import JWPlatformIE
from .kaltura import KalturaIE
from .kinja import KinjaEmbedIE
from .limelight import LimelightBaseIE
from .mainstreaming import MainStreamingIE
from .medialaan import MedialaanIE
from .mediaset import MediasetIE
from .mediasite import MediasiteIE
from .megaphone import MegaphoneIE
from .megatvcom import MegaTVComEmbedIE
from .mofosex import MofosexEmbedIE
from .mtv import MTVServicesEmbeddedIE
from .myvi import MyviIE
from .nbc import NBCSportsVPlayerIE
from .nexx import NexxEmbedIE, NexxIE
from .odnoklassniki import OdnoklassnikiIE
from .onionstudios import OnionStudiosIE
from .ooyala import OoyalaIE
from .panopto import PanoptoBaseIE
from .peertube import PeerTubeIE
from .piksel import PikselIE
from .pladform import PladformIE
from .pornhub import PornHubIE
from .rcs import RCSEmbedsIE
from .redtube import RedTubeIE
from .rumble import RumbleEmbedIE
from .rutube import RutubeIE
from .rutv import RUTVIE
from .ruutu import RuutuIE
from .senategov import SenateISVPIE
from .simplecast import SimplecastIE
from .soundcloud import SoundcloudEmbedIE
from .spankwire import SpankwireIE
from .sportbox import SportBoxIE
from .springboardplatform import SpringboardPlatformIE
from .svt import SVTIE
from .teachable import TeachableIE
from .ted import TedEmbedIE
from .theplatform import ThePlatformIE
from .threeqsdn import ThreeQSDNIE
from .tnaflix import TNAFlixNetworkEmbedIE
from .tube8 import Tube8IE
from .tunein import TuneInBaseIE
from .tvc import TVCIE
from .tvopengr import TVOpenGrEmbedIE
from .tvp import TVPEmbedIE
from .twentymin import TwentyMinutenIE
from .udn import UDNEmbedIE
from .ustream import UstreamIE
from .vbox7 import Vbox7IE
from .vice import ViceIE
from .videa import VideaIE
from .videomore import VideomoreIE
from .videopress import VideoPressIE
from .viewlift import ViewLiftEmbedIE
from .vimeo import VHXEmbedIE, VimeoIE
from .viqeo import ViqeoIE
from .vk import VKIE
from .vshare import VShareIE
from .vzaar import VzaarIE
from .washingtonpost import WashingtonPostIE
from .webcaster import WebcasterFeedIE
from .wimtv import WimTVIE
from .wistia import WistiaIE
from .xfileshare import XFileShareIE
from .xhamster import XHamsterEmbedIE
from .yapfiles import YapFilesIE
from .youporn import YouPornIE
from .youtube import YoutubeIE from .youtube import YoutubeIE
from .zype import ZypeIE
from ..compat import ( from ..compat import (
compat_etree_fromstring, compat_etree_fromstring,
compat_str, compat_str,
@ -11,15 +110,16 @@
compat_urlparse, compat_urlparse,
) )
from ..utils import ( from ..utils import (
KNOWN_EXTENSIONS,
ExtractorError,
HEADRequest,
UnsupportedError,
determine_ext, determine_ext,
dict_get, dict_get,
ExtractorError,
float_or_none, float_or_none,
HEADRequest,
int_or_none, int_or_none,
is_html, is_html,
js_to_json, js_to_json,
KNOWN_EXTENSIONS,
merge_dicts, merge_dicts,
mimetype2ext, mimetype2ext,
orderedSet, orderedSet,
@ -31,120 +131,11 @@
unescapeHTML, unescapeHTML,
unified_timestamp, unified_timestamp,
unsmuggle_url, unsmuggle_url,
UnsupportedError,
url_or_none, url_or_none,
xpath_attr, xpath_attr,
xpath_text, xpath_text,
xpath_with_ns, xpath_with_ns,
) )
from .commonprotocols import RtmpIE
from .brightcove import (
BrightcoveLegacyIE,
BrightcoveNewIE,
)
from .nexx import (
NexxIE,
NexxEmbedIE,
)
from .nbc import NBCSportsVPlayerIE
from .ooyala import OoyalaIE
from .rutv import RUTVIE
from .tvc import TVCIE
from .sportbox import SportBoxIE
from .myvi import MyviIE
from .condenast import CondeNastIE
from .udn import UDNEmbedIE
from .senategov import SenateISVPIE
from .svt import SVTIE
from .pornhub import PornHubIE
from .xhamster import XHamsterEmbedIE
from .tnaflix import TNAFlixNetworkEmbedIE
from .drtuber import DrTuberIE
from .redtube import RedTubeIE
from .tube8 import Tube8IE
from .mofosex import MofosexEmbedIE
from .spankwire import SpankwireIE
from .youporn import YouPornIE
from .vimeo import (
VimeoIE,
VHXEmbedIE,
)
from .dailymotion import DailymotionIE
from .dailymail import DailyMailIE
from .onionstudios import OnionStudiosIE
from .viewlift import ViewLiftEmbedIE
from .mtv import MTVServicesEmbeddedIE
from .pladform import PladformIE
from .videomore import VideomoreIE
from .webcaster import WebcasterFeedIE
from .googledrive import GoogleDriveIE
from .jwplatform import JWPlatformIE
from .digiteka import DigitekaIE
from .arkena import ArkenaIE
from .instagram import InstagramIE
from .threeqsdn import ThreeQSDNIE
from .theplatform import ThePlatformIE
from .kaltura import KalturaIE
from .eagleplatform import EaglePlatformIE
from .facebook import FacebookIE
from .soundcloud import SoundcloudEmbedIE
from .tunein import TuneInBaseIE
from .vbox7 import Vbox7IE
from .dbtv import DBTVIE
from .piksel import PikselIE
from .videa import VideaIE
from .twentymin import TwentyMinutenIE
from .ustream import UstreamIE
from .arte import ArteTVEmbedIE
from .videopress import VideoPressIE
from .rutube import RutubeIE
from .glomex import GlomexEmbedIE
from .megatvcom import MegaTVComEmbedIE
from .ant1newsgr import Ant1NewsGrEmbedIE
from .limelight import LimelightBaseIE
from .anvato import AnvatoIE
from .washingtonpost import WashingtonPostIE
from .wistia import WistiaIE
from .mediaset import MediasetIE
from .joj import JojIE
from .megaphone import MegaphoneIE
from .vzaar import VzaarIE
from .channel9 import Channel9IE
from .vshare import VShareIE
from .mediasite import MediasiteIE
from .springboardplatform import SpringboardPlatformIE
from .ted import TedEmbedIE
from .yapfiles import YapFilesIE
from .vice import ViceIE
from .xfileshare import XFileShareIE
from .cloudflarestream import CloudflareStreamIE
from .peertube import PeerTubeIE
from .teachable import TeachableIE
from .indavideo import IndavideoEmbedIE
from .apa import APAIE
from .foxnews import FoxNewsIE
from .viqeo import ViqeoIE
from .expressen import ExpressenIE
from .zype import ZypeIE
from .odnoklassniki import OdnoklassnikiIE
from .vk import VKIE
from .kinja import KinjaEmbedIE
from .gedidigital import GediDigitalIE
from .rcs import RCSEmbedsIE
from .bitchute import BitChuteIE
from .rumble import RumbleEmbedIE
from .arcpublishing import ArcPublishingIE
from .medialaan import MedialaanIE
from .simplecast import SimplecastIE
from .wimtv import WimTVIE
from .tvopengr import TVOpenGrEmbedIE
from .ertgr import ERTWebtvEmbedIE
from .tvp import TVPEmbedIE
from .blogger import BloggerIE
from .mainstreaming import MainStreamingIE
from .gfycat import GfycatIE
from .panopto import PanoptoBaseIE
from .ruutu import RuutuIE
class GenericIE(InfoExtractor): class GenericIE(InfoExtractor):

View File

@ -1,9 +1,7 @@
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import compat_str
compat_str,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
find_xpath_attr, find_xpath_attr,

View File

@ -1,13 +1,11 @@
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urllib_parse_unquote,
)
from ..utils import ( from ..utils import (
int_or_none, int_or_none,
find_xpath_attr, find_xpath_attr,
xpath_text, xpath_text,
update_url_query, update_url_query,
) )
from ..compat import compat_urllib_parse_unquote
class NozIE(InfoExtractor): class NozIE(InfoExtractor):

View File

@ -3,16 +3,14 @@
import subprocess import subprocess
import tempfile import tempfile
from ..compat import ( from ..compat import compat_urlparse
compat_urlparse,
)
from ..utils import ( from ..utils import (
ExtractorError,
Popen,
check_executable, check_executable,
encodeArgument, encodeArgument,
ExtractorError,
get_exe_version, get_exe_version,
is_outdated_version, is_outdated_version,
Popen,
) )

View File

@ -10,9 +10,9 @@
import random import random
import re import re
import sys import sys
import threading
import time import time
import traceback import traceback
import threading
from .common import InfoExtractor, SearchInfoExtractor from .common import InfoExtractor, SearchInfoExtractor
from ..compat import ( from ..compat import (
@ -27,12 +27,13 @@
) )
from ..jsinterp import JSInterpreter from ..jsinterp import JSInterpreter
from ..utils import ( from ..utils import (
NO_DEFAULT,
ExtractorError,
bug_reports_message, bug_reports_message,
clean_html, clean_html,
datetime_from_str, datetime_from_str,
dict_get, dict_get,
error_to_compat_str, error_to_compat_str,
ExtractorError,
float_or_none, float_or_none,
format_field, format_field,
get_first, get_first,
@ -42,7 +43,6 @@
js_to_json, js_to_json,
mimetype2ext, mimetype2ext,
network_exceptions, network_exceptions,
NO_DEFAULT,
orderedSet, orderedSet,
parse_codecs, parse_codecs,
parse_count, parse_count,
@ -68,7 +68,6 @@
variadic, variadic,
) )
# any clients starting with _ cannot be explicity requested by the user # any clients starting with _ cannot be explicity requested by the user
INNERTUBE_CLIENTS = { INNERTUBE_CLIENTS = {
'web': { 'web': {

View File

@ -1,12 +1,9 @@
from collections.abc import MutableMapping
import json import json
import operator import operator
import re import re
from collections.abc import MutableMapping
from .utils import ( from .utils import ExtractorError, remove_quotes
ExtractorError,
remove_quotes,
)
_OPERATORS = [ _OPERATORS = [
('|', operator.or_), ('|', operator.or_),

View File

@ -1,7 +1,7 @@
import functools import functools
from threading import Lock from threading import Lock
from .utils import supports_terminal_sequences, write_string
from .utils import supports_terminal_sequences, write_string
CONTROL_SEQUENCES = { CONTROL_SEQUENCES = {
'DOWN': '\n', 'DOWN': '\n',

View File

@ -1,26 +1,11 @@
import os.path
import optparse import optparse
import os.path
import re import re
import shlex import shlex
import sys import sys
from .compat import ( from .compat import compat_expanduser, compat_get_terminal_size, compat_getenv
compat_expanduser,
compat_get_terminal_size,
compat_getenv,
)
from .utils import (
Config,
expand_path,
get_executable_path,
OUTTMPL_TYPES,
POSTPROCESS_WHEN,
remove_end,
write_string,
)
from .cookies import SUPPORTED_BROWSERS, SUPPORTED_KEYRINGS from .cookies import SUPPORTED_BROWSERS, SUPPORTED_KEYRINGS
from .version import __version__
from .downloader.external import list_external_downloaders from .downloader.external import list_external_downloaders
from .postprocessor import ( from .postprocessor import (
FFmpegExtractAudioPP, FFmpegExtractAudioPP,
@ -30,6 +15,16 @@
SponsorBlockPP, SponsorBlockPP,
) )
from .postprocessor.modify_chapters import DEFAULT_SPONSORBLOCK_CHAPTER_TITLE from .postprocessor.modify_chapters import DEFAULT_SPONSORBLOCK_CHAPTER_TITLE
from .utils import (
OUTTMPL_TYPES,
POSTPROCESS_WHEN,
Config,
expand_path,
get_executable_path,
remove_end,
write_string,
)
from .version import __version__
def parseOpts(overrideArguments=None, ignore_config_files='if_override'): def parseOpts(overrideArguments=None, ignore_config_files='if_override'):

View File

@ -1,27 +1,25 @@
# flake8: noqa: F401 # flake8: noqa: F401
from ..utils import load_plugins
from .common import PostProcessor from .common import PostProcessor
from .embedthumbnail import EmbedThumbnailPP from .embedthumbnail import EmbedThumbnailPP
from .exec import ExecPP, ExecAfterDownloadPP from .exec import ExecAfterDownloadPP, ExecPP
from .ffmpeg import ( from .ffmpeg import (
FFmpegPostProcessor,
FFmpegCopyStreamPP,
FFmpegConcatPP, FFmpegConcatPP,
FFmpegCopyStreamPP,
FFmpegEmbedSubtitlePP, FFmpegEmbedSubtitlePP,
FFmpegExtractAudioPP, FFmpegExtractAudioPP,
FFmpegFixupDuplicateMoovPP, FFmpegFixupDuplicateMoovPP,
FFmpegFixupDurationPP, FFmpegFixupDurationPP,
FFmpegFixupStretchedPP,
FFmpegFixupTimestampPP,
FFmpegFixupM3u8PP, FFmpegFixupM3u8PP,
FFmpegFixupM4aPP, FFmpegFixupM4aPP,
FFmpegFixupStretchedPP,
FFmpegFixupTimestampPP,
FFmpegMergerPP, FFmpegMergerPP,
FFmpegMetadataPP, FFmpegMetadataPP,
FFmpegPostProcessor,
FFmpegSplitChaptersPP,
FFmpegSubtitlesConvertorPP, FFmpegSubtitlesConvertorPP,
FFmpegThumbnailsConvertorPP, FFmpegThumbnailsConvertorPP,
FFmpegSplitChaptersPP,
FFmpegVideoConvertorPP, FFmpegVideoConvertorPP,
FFmpegVideoRemuxerPP, FFmpegVideoRemuxerPP,
) )
@ -35,6 +33,7 @@
from .sponskrub import SponSkrubPP from .sponskrub import SponSkrubPP
from .sponsorblock import SponsorBlockPP from .sponsorblock import SponsorBlockPP
from .xattrpp import XAttrMetadataPP from .xattrpp import XAttrMetadataPP
from ..utils import load_plugins
_PLUGIN_CLASSES = load_plugins('postprocessor', 'PP', globals()) _PLUGIN_CLASSES = load_plugins('postprocessor', 'PP', globals())

View File

@ -6,10 +6,10 @@
import urllib.error import urllib.error
from ..utils import ( from ..utils import (
PostProcessingError,
_configuration_args, _configuration_args,
encodeFilename, encodeFilename,
network_exceptions, network_exceptions,
PostProcessingError,
sanitized_Request, sanitized_Request,
write_string, write_string,
) )

View File

@ -1,11 +1,11 @@
import base64 import base64
import imghdr import imghdr
import os import os
import subprocess
import re import re
import subprocess
try: try:
from mutagen.flac import Picture, FLAC from mutagen.flac import FLAC, Picture
from mutagen.mp4 import MP4, MP4Cover from mutagen.mp4 import MP4, MP4Cover
from mutagen.oggopus import OggOpus from mutagen.oggopus import OggOpus
from mutagen.oggvorbis import OggVorbis from mutagen.oggvorbis import OggVorbis
@ -14,17 +14,14 @@
has_mutagen = False has_mutagen = False
from .common import PostProcessor from .common import PostProcessor
from .ffmpeg import ( from .ffmpeg import FFmpegPostProcessor, FFmpegThumbnailsConvertorPP
FFmpegPostProcessor,
FFmpegThumbnailsConvertorPP,
)
from ..utils import ( from ..utils import (
Popen,
PostProcessingError,
check_executable, check_executable,
encodeArgument, encodeArgument,
encodeFilename, encodeFilename,
error_to_compat_str, error_to_compat_str,
Popen,
PostProcessingError,
prepend_extension, prepend_extension,
shell_quote, shell_quote,
) )

View File

@ -2,11 +2,7 @@
from .common import PostProcessor from .common import PostProcessor
from ..compat import compat_shlex_quote from ..compat import compat_shlex_quote
from ..utils import ( from ..utils import PostProcessingError, encodeArgument, variadic
encodeArgument,
PostProcessingError,
variadic,
)
class ExecPP(PostProcessor): class ExecPP(PostProcessor):

View File

@ -1,27 +1,26 @@
import collections import collections
import itertools import itertools
import json
import os import os
import re
import subprocess import subprocess
import time import time
import re
import json
from .common import AudioConversionError, PostProcessor from .common import AudioConversionError, PostProcessor
from ..compat import compat_str from ..compat import compat_str
from ..utils import ( from ..utils import (
ISO639Utils,
Popen,
PostProcessingError,
_get_exe_version_output,
detect_exe_version,
determine_ext, determine_ext,
dfxp2srt, dfxp2srt,
encodeArgument, encodeArgument,
encodeFilename, encodeFilename,
float_or_none, float_or_none,
_get_exe_version_output,
detect_exe_version,
is_outdated_version, is_outdated_version,
ISO639Utils,
orderedSet, orderedSet,
Popen,
PostProcessingError,
prepend_extension, prepend_extension,
replace_extension, replace_extension,
shell_quote, shell_quote,
@ -30,7 +29,6 @@
write_json_file, write_json_file,
) )
EXT_TO_OUT_FORMATS = { EXT_TO_OUT_FORMATS = {
'aac': 'adts', 'aac': 'adts',
'flac': 'flac', 'flac': 'flac',

View File

@ -3,17 +3,9 @@
import os import os
from .common import PostProcessor from .common import PostProcessor
from .ffmpeg import ( from .ffmpeg import FFmpegPostProcessor, FFmpegSubtitlesConvertorPP
FFmpegPostProcessor,
FFmpegSubtitlesConvertorPP
)
from .sponsorblock import SponsorBlockPP from .sponsorblock import SponsorBlockPP
from ..utils import ( from ..utils import PostProcessingError, orderedSet, prepend_extension
orderedSet,
PostProcessingError,
prepend_extension,
)
_TINY_CHAPTER_DURATION = 1 _TINY_CHAPTER_DURATION = 1
DEFAULT_SPONSORBLOCK_CHAPTER_TITLE = '[SponsorBlock]: %(category_names)l' DEFAULT_SPONSORBLOCK_CHAPTER_TITLE = '[SponsorBlock]: %(category_names)l'

View File

@ -3,10 +3,10 @@
from .common import PostProcessor from .common import PostProcessor
from ..utils import ( from ..utils import (
PostProcessingError,
decodeFilename, decodeFilename,
encodeFilename, encodeFilename,
make_dir, make_dir,
PostProcessingError,
) )

View File

@ -4,15 +4,15 @@
from .common import PostProcessor from .common import PostProcessor
from ..utils import ( from ..utils import (
Popen,
PostProcessingError,
check_executable, check_executable,
cli_option, cli_option,
encodeArgument, encodeArgument,
encodeFilename, encodeFilename,
prepend_extension,
shell_quote, shell_quote,
str_or_none, str_or_none,
Popen,
PostProcessingError,
prepend_extension,
) )

View File

@ -1,6 +1,6 @@
from hashlib import sha256
import json import json
import re import re
from hashlib import sha256
from .ffmpeg import FFmpegPostProcessor from .ffmpeg import FFmpegPostProcessor
from ..compat import compat_urllib_parse_urlencode from ..compat import compat_urllib_parse_urlencode

View File

@ -1,11 +1,11 @@
from .common import PostProcessor from .common import PostProcessor
from ..compat import compat_os_name from ..compat import compat_os_name
from ..utils import ( from ..utils import (
hyphenate_date,
write_xattr,
PostProcessingError, PostProcessingError,
XAttrMetadataError, XAttrMetadataError,
XAttrUnavailableError, XAttrUnavailableError,
hyphenate_date,
write_xattr,
) )

View File

@ -9,11 +9,7 @@
import collections import collections
import socket import socket
from .compat import ( from .compat import compat_ord, compat_struct_pack, compat_struct_unpack
compat_ord,
compat_struct_pack,
compat_struct_unpack,
)
__author__ = 'Timo Schmid <coding@timoschmid.de>' __author__ = 'Timo Schmid <coding@timoschmid.de>'

View File

@ -8,8 +8,7 @@
from zipimport import zipimporter from zipimport import zipimporter
from .compat import compat_realpath from .compat import compat_realpath
from .utils import encode_compat_str, Popen, write_string from .utils import Popen, encode_compat_str, write_string
from .version import __version__ from .version import __version__

View File

@ -9,8 +9,8 @@
import contextlib import contextlib
import ctypes import ctypes
import datetime import datetime
import email.utils
import email.header import email.header
import email.utils
import errno import errno
import functools import functools
import gzip import gzip
@ -22,11 +22,13 @@
import json import json
import locale import locale
import math import math
import mimetypes
import operator import operator
import os import os
import platform import platform
import random import random
import re import re
import shlex
import socket import socket
import ssl import ssl
import subprocess import subprocess
@ -34,16 +36,11 @@
import tempfile import tempfile
import time import time
import traceback import traceback
import urllib.parse
import xml.etree.ElementTree import xml.etree.ElementTree
import zlib import zlib
import mimetypes
import urllib.parse
import shlex
from .compat import ( from .compat import (
compat_HTMLParseError,
compat_HTMLParser,
compat_HTTPError,
compat_brotli, compat_brotli,
compat_chr, compat_chr,
compat_cookiejar, compat_cookiejar,
@ -51,7 +48,10 @@
compat_expanduser, compat_expanduser,
compat_html_entities, compat_html_entities,
compat_html_entities_html5, compat_html_entities_html5,
compat_HTMLParseError,
compat_HTMLParser,
compat_http_client, compat_http_client,
compat_HTTPError,
compat_os_name, compat_os_name,
compat_parse_qs, compat_parse_qs,
compat_shlex_quote, compat_shlex_quote,
@ -59,18 +59,14 @@
compat_struct_pack, compat_struct_pack,
compat_struct_unpack, compat_struct_unpack,
compat_urllib_error, compat_urllib_error,
compat_urllib_parse_unquote_plus,
compat_urllib_parse_urlencode, compat_urllib_parse_urlencode,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_parse_unquote_plus,
compat_urllib_request, compat_urllib_request,
compat_urlparse, compat_urlparse,
compat_websockets, compat_websockets,
) )
from .socks import ProxyType, sockssocket
from .socks import (
ProxyType,
sockssocket,
)
try: try:
import certifi import certifi

View File

@ -8,13 +8,11 @@
in RFC 8216 §3.5 <https://tools.ietf.org/html/rfc8216#section-3.5>. in RFC 8216 §3.5 <https://tools.ietf.org/html/rfc8216#section-3.5>.
""" """
import re
import io import io
import re
from .compat import compat_Match, compat_Pattern
from .utils import int_or_none, timetuple_from_msec from .utils import int_or_none, timetuple_from_msec
from .compat import (
compat_Pattern,
compat_Match,
)
class _MatchParser: class _MatchParser: