mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-30 12:01:28 +00:00
[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:
parent
86e5f3ed2e
commit
f82711587c
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -82,6 +82,7 @@ updates_key.pem
|
||||||
*.egg-info
|
*.egg-info
|
||||||
.tox
|
.tox
|
||||||
*.class
|
*.class
|
||||||
|
*.isorted
|
||||||
|
|
||||||
# Generated
|
# Generated
|
||||||
AUTHORS
|
AUTHORS
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
||||||
|
|
|
@ -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__))))
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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'))
|
||||||
|
|
|
@ -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
|
||||||
|
|
12
pyinst.py
12
pyinst.py
|
@ -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
|
||||||
|
|
6
setup.py
6
setup.py
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>"
|
||||||
|
|
|
@ -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'
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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__))
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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__))
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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__))))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
FFmpegThumbnailsConvertorPP,
|
FFmpegThumbnailsConvertorPP,
|
||||||
MetadataFromFieldPP,
|
MetadataFromFieldPP,
|
||||||
MetadataParserPP,
|
MetadataParserPP,
|
||||||
ModifyChaptersPP
|
ModifyChaptersPP,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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__)))
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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__))))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 = [
|
||||||
(
|
(
|
||||||
|
|
|
@ -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__,
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
import asyncio
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import asyncio
|
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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': {
|
||||||
|
|
|
@ -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_),
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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'):
|
||||||
|
|
|
@ -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())
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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>'
|
||||||
|
|
||||||
|
|
|
@ -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__
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue