mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-07-27 13:54:14 +09:00
Compare commits
9 Commits
02709d1935
...
4f36426a75
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4f36426a75 | ||
![]() |
c61f271c9c | ||
![]() |
f2473ff30f | ||
![]() |
90ed89d2d4 | ||
![]() |
fec4837e42 | ||
![]() |
f67e26763c | ||
![]() |
ce7fa2423b | ||
![]() |
d48a828186 | ||
![]() |
5c66a3d1b3 |
@ -89,6 +89,17 @@ class FakeYDL(YoutubeDL):
|
|||||||
self.report_warning = types.MethodType(report_warning, self)
|
self.report_warning = types.MethodType(report_warning, self)
|
||||||
|
|
||||||
|
|
||||||
|
class FakeLogger(object):
|
||||||
|
def debug(self, msg):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def warning(self, msg):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def error(self, msg):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def gettestcases(include_onlymatching=False):
|
def gettestcases(include_onlymatching=False):
|
||||||
for ie in youtube_dl.extractor.gen_extractors():
|
for ie in youtube_dl.extractor.gen_extractors():
|
||||||
for tc in ie.get_testcases(include_onlymatching):
|
for tc in ie.get_testcases(include_onlymatching):
|
||||||
|
@ -7,15 +7,18 @@ import os
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
|
||||||
import unittest
|
import unittest
|
||||||
import warnings
|
|
||||||
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, try_rm
|
from test.helper import (
|
||||||
|
FakeLogger,
|
||||||
|
http_server_port,
|
||||||
|
try_rm,
|
||||||
|
)
|
||||||
from youtube_dl import YoutubeDL
|
from youtube_dl import YoutubeDL
|
||||||
from youtube_dl.compat import compat_http_server
|
from youtube_dl.compat import compat_http_server
|
||||||
from youtube_dl.utils import encodeFilename
|
from youtube_dl.utils import encodeFilename
|
||||||
|
from youtube_dl.downloader.external import Aria2pFD
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
TEST_DIR = os.path.dirname(os.path.abspath(__file__))
|
TEST_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
@ -23,6 +26,7 @@ TEST_DIR = os.path.dirname(os.path.abspath(__file__))
|
|||||||
|
|
||||||
TEST_SIZE = 10 * 1024
|
TEST_SIZE = 10 * 1024
|
||||||
|
|
||||||
|
|
||||||
class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
|
class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
|
||||||
def log_message(self, format, *args):
|
def log_message(self, format, *args):
|
||||||
pass
|
pass
|
||||||
@ -31,10 +35,9 @@ class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
|
|||||||
range_header = self.headers.get('Range')
|
range_header = self.headers.get('Range')
|
||||||
start = end = None
|
start = end = None
|
||||||
if range_header:
|
if range_header:
|
||||||
mobj = re.search(r'^bytes=(\d+)-(\d+)', range_header)
|
mobj = re.match(r'bytes=(\d+)-(\d+)', range_header)
|
||||||
if mobj:
|
if mobj:
|
||||||
start = int(mobj.group(1))
|
start, end = (int(mobj.group(i)) for i in (1, 2))
|
||||||
end = int(mobj.group(2))
|
|
||||||
valid_range = start is not None and end is not None
|
valid_range = start is not None and end is not None
|
||||||
if valid_range:
|
if valid_range:
|
||||||
content_range = 'bytes %d-%d' % (start, end)
|
content_range = 'bytes %d-%d' % (start, end)
|
||||||
@ -64,18 +67,10 @@ class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
|
|||||||
elif self.path == '/no-range-no-content-length':
|
elif self.path == '/no-range-no-content-length':
|
||||||
self.serve(range=False, content_length=False)
|
self.serve(range=False, content_length=False)
|
||||||
else:
|
else:
|
||||||
assert False
|
assert False, 'unrecognised server path'
|
||||||
|
|
||||||
class FakeLogger(object):
|
|
||||||
def debug(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def warning(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def error(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
@unittest.skipUnless(Aria2pFD.available(), 'aria2p module not found')
|
||||||
class TestAria2pFD(unittest.TestCase):
|
class TestAria2pFD(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.httpd = compat_http_server.HTTPServer(
|
self.httpd = compat_http_server.HTTPServer(
|
||||||
@ -86,7 +81,6 @@ class TestAria2pFD(unittest.TestCase):
|
|||||||
self.server_thread.start()
|
self.server_thread.start()
|
||||||
|
|
||||||
def download(self, params, ep):
|
def download(self, params, ep):
|
||||||
try:
|
|
||||||
with subprocess.Popen(
|
with subprocess.Popen(
|
||||||
['aria2c', '--enable-rpc'],
|
['aria2c', '--enable-rpc'],
|
||||||
stdout=subprocess.DEVNULL,
|
stdout=subprocess.DEVNULL,
|
||||||
@ -102,19 +96,12 @@ class TestAria2pFD(unittest.TestCase):
|
|||||||
self.assertEqual(os.path.getsize(encodeFilename(filename)), TEST_SIZE)
|
self.assertEqual(os.path.getsize(encodeFilename(filename)), TEST_SIZE)
|
||||||
try_rm(encodeFilename(filename))
|
try_rm(encodeFilename(filename))
|
||||||
process.kill()
|
process.kill()
|
||||||
except FileNotFoundError:
|
|
||||||
warnings.warn("You haven't install aria2c. Cannot test Aria2pFD")
|
|
||||||
|
|
||||||
def download_all(self, params):
|
def download_all(self, params):
|
||||||
for ep in ('regular', 'no-content-length', 'no-range', 'no-range-no-content-length'):
|
for ep in ('regular', 'no-content-length', 'no-range', 'no-range-no-content-length'):
|
||||||
self.download(params, ep)
|
self.download(params, ep)
|
||||||
|
|
||||||
def test_regular(self):
|
def test_regular(self):
|
||||||
try:
|
|
||||||
import aria2p
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.download_all({'external_downloader': 'aria2p'})
|
self.download_all({'external_downloader': 'aria2p'})
|
||||||
|
|
||||||
def test_chunked(self):
|
def test_chunked(self):
|
@ -9,7 +9,11 @@ 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, try_rm
|
from test.helper import (
|
||||||
|
FakeLogger,
|
||||||
|
http_server_port,
|
||||||
|
try_rm,
|
||||||
|
)
|
||||||
from youtube_dl import YoutubeDL
|
from youtube_dl import YoutubeDL
|
||||||
from youtube_dl.compat import compat_http_server
|
from youtube_dl.compat import compat_http_server
|
||||||
from youtube_dl.downloader.http import HttpFD
|
from youtube_dl.downloader.http import HttpFD
|
||||||
@ -66,17 +70,6 @@ class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
|
|||||||
assert False
|
assert False
|
||||||
|
|
||||||
|
|
||||||
class FakeLogger(object):
|
|
||||||
def debug(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def warning(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def error(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class TestHttpFD(unittest.TestCase):
|
class TestHttpFD(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.httpd = compat_http_server.HTTPServer(
|
self.httpd = compat_http_server.HTTPServer(
|
||||||
|
@ -8,7 +8,10 @@ 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 test.helper import (
|
||||||
|
FakeLogger,
|
||||||
|
http_server_port,
|
||||||
|
)
|
||||||
from youtube_dl import YoutubeDL
|
from youtube_dl import YoutubeDL
|
||||||
from youtube_dl.compat import compat_http_server, compat_urllib_request
|
from youtube_dl.compat import compat_http_server, compat_urllib_request
|
||||||
import ssl
|
import ssl
|
||||||
@ -52,17 +55,6 @@ class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
|
|||||||
assert False
|
assert False
|
||||||
|
|
||||||
|
|
||||||
class FakeLogger(object):
|
|
||||||
def debug(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def warning(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def error(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class TestHTTP(unittest.TestCase):
|
class TestHTTP(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.httpd = compat_http_server.HTTPServer(
|
self.httpd = compat_http_server.HTTPServer(
|
||||||
|
@ -220,9 +220,8 @@ class Aria2pFD(ExternalFD):
|
|||||||
return cls.__avail
|
return cls.__avail
|
||||||
|
|
||||||
def _call_downloader(self, tmpfilename, info_dict):
|
def _call_downloader(self, tmpfilename, info_dict):
|
||||||
import aria2p
|
aria2 = self.aria2p.API(
|
||||||
aria2 = aria2p.API(
|
self.aria2p.Client(
|
||||||
aria2p.Client(
|
|
||||||
host='http://localhost',
|
host='http://localhost',
|
||||||
port=6800,
|
port=6800,
|
||||||
secret=''
|
secret=''
|
||||||
@ -234,13 +233,9 @@ class Aria2pFD(ExternalFD):
|
|||||||
'max-connection-per-server': 4,
|
'max-connection-per-server': 4,
|
||||||
'auto-file-renaming': 'false',
|
'auto-file-renaming': 'false',
|
||||||
}
|
}
|
||||||
download_dir = os.path.dirname(tmpfilename)
|
options['dir'] = os.path.dirname(tmpfilename) or os.path.abspath('.')
|
||||||
if download_dir:
|
options['out'] = os.path.basename(tmpfilename)
|
||||||
options["dir"] = download_dir
|
options['header'] = []
|
||||||
else:
|
|
||||||
options["dir"] = os.path.abspath('.')
|
|
||||||
options["out"] = os.path.basename(tmpfilename)
|
|
||||||
options["header"] = []
|
|
||||||
for key, val in info_dict['http_headers'].items():
|
for key, val in info_dict['http_headers'].items():
|
||||||
options['header'].append('{0}: {1}'.format(key, val))
|
options['header'].append('{0}: {1}'.format(key, val))
|
||||||
download = aria2.add_uris([info_dict['url']], options)
|
download = aria2.add_uris([info_dict['url']], options)
|
||||||
@ -260,7 +255,7 @@ class Aria2pFD(ExternalFD):
|
|||||||
})
|
})
|
||||||
self._hook_progress(status)
|
self._hook_progress(status)
|
||||||
time.sleep(.5)
|
time.sleep(.5)
|
||||||
return not download.status == 'complete'
|
return download.status != 'complete'
|
||||||
|
|
||||||
|
|
||||||
class HttpieFD(ExternalFD):
|
class HttpieFD(ExternalFD):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user