mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-10-05 00:31:23 +02:00
Compare commits
No commits in common. "c20ec1eb89f24dc985f4d73f4990b347f3829ec3" and "e27dafc971b494d6de145ee58fca8913287d04ea" have entirely different histories.
c20ec1eb89
...
e27dafc971
|
@ -746,25 +746,6 @@ class TestClientCertificate:
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
class TestRequestHandlerMisc:
|
|
||||||
"""Misc generic tests for request handlers, not related to request or validation testing"""
|
|
||||||
@pytest.mark.parametrize('handler,logger_name', [
|
|
||||||
('Requests', 'urllib3'),
|
|
||||||
('Websockets', 'websockets.client'),
|
|
||||||
('Websockets', 'websockets.server')
|
|
||||||
], indirect=['handler'])
|
|
||||||
def test_remove_logging_handler(self, handler, logger_name):
|
|
||||||
# Ensure any logging handlers, which may contain a YoutubeDL instance,
|
|
||||||
# are removed when we close the request handler
|
|
||||||
# See: https://github.com/yt-dlp/yt-dlp/issues/8922
|
|
||||||
logging_handlers = logging.getLogger(logger_name).handlers
|
|
||||||
before_count = len(logging_handlers)
|
|
||||||
rh = handler()
|
|
||||||
assert len(logging_handlers) == before_count + 1
|
|
||||||
rh.close()
|
|
||||||
assert len(logging_handlers) == before_count
|
|
||||||
|
|
||||||
|
|
||||||
class TestUrllibRequestHandler(TestRequestHandlerBase):
|
class TestUrllibRequestHandler(TestRequestHandlerBase):
|
||||||
@pytest.mark.parametrize('handler', ['Urllib'], indirect=True)
|
@pytest.mark.parametrize('handler', ['Urllib'], indirect=True)
|
||||||
def test_file_urls(self, handler):
|
def test_file_urls(self, handler):
|
||||||
|
@ -925,6 +906,16 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
||||||
|
|
||||||
assert called
|
assert called
|
||||||
|
|
||||||
|
def test_remove_logging_handler(self, handler):
|
||||||
|
# Ensure logging handler, containing YoutubeDL instance, is removed when we close the request handler
|
||||||
|
# https://github.com/yt-dlp/yt-dlp/issues/8922
|
||||||
|
logging_handlers = logging.getLogger('urllib3').handlers
|
||||||
|
before_count = len(logging_handlers)
|
||||||
|
rh = handler()
|
||||||
|
assert len(logging_handlers) == before_count + 1
|
||||||
|
rh.close()
|
||||||
|
assert len(logging_handlers) == before_count
|
||||||
|
|
||||||
|
|
||||||
def run_validation(handler, error, req, **handler_kwargs):
|
def run_validation(handler, error, req, **handler_kwargs):
|
||||||
with handler(**handler_kwargs) as rh:
|
with handler(**handler_kwargs) as rh:
|
||||||
|
@ -1429,6 +1420,23 @@ class TestYoutubeDLNetworking:
|
||||||
assert len(director.preferences) == 1
|
assert len(director.preferences) == 1
|
||||||
assert director.preferences.pop()(UrllibRH, None)
|
assert director.preferences.pop()(UrllibRH, None)
|
||||||
|
|
||||||
|
def test_close(self, monkeypatch):
|
||||||
|
with FakeYDL() as ydl:
|
||||||
|
director = ydl._request_director
|
||||||
|
called = False
|
||||||
|
original_close = director.close
|
||||||
|
|
||||||
|
def mock_close(*args, **kwargs):
|
||||||
|
nonlocal called
|
||||||
|
called = True
|
||||||
|
return original_close(*args, **kwargs)
|
||||||
|
|
||||||
|
monkeypatch.setattr(director, 'close', mock_close)
|
||||||
|
|
||||||
|
ydl.close()
|
||||||
|
|
||||||
|
assert called is True
|
||||||
|
|
||||||
|
|
||||||
class TestRequest:
|
class TestRequest:
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,6 @@ if websockets_version < (12, 0):
|
||||||
import websockets.sync.client
|
import websockets.sync.client
|
||||||
from websockets.uri import parse_uri
|
from websockets.uri import parse_uri
|
||||||
|
|
||||||
WEBSOCKETS_LOGGERS = ('websockets.client', 'websockets.server')
|
|
||||||
|
|
||||||
|
|
||||||
class WebsocketsResponseAdapter(WebSocketResponse):
|
class WebsocketsResponseAdapter(WebSocketResponse):
|
||||||
|
|
||||||
|
@ -92,12 +90,10 @@ class WebsocketsRH(WebSocketRequestHandler):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.__logging_handlers = []
|
for name in ('websockets.client', 'websockets.server'):
|
||||||
for name in WEBSOCKETS_LOGGERS:
|
|
||||||
logger = logging.getLogger(name)
|
logger = logging.getLogger(name)
|
||||||
handler = logging.StreamHandler(stream=sys.stdout)
|
handler = logging.StreamHandler(stream=sys.stdout)
|
||||||
handler.setFormatter(logging.Formatter(f'{self.RH_NAME}: %(message)s'))
|
handler.setFormatter(logging.Formatter(f'{self.RH_NAME}: %(message)s'))
|
||||||
self.__logging_handlers.append(handler)
|
|
||||||
logger.addHandler(handler)
|
logger.addHandler(handler)
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
logger.setLevel(logging.DEBUG)
|
logger.setLevel(logging.DEBUG)
|
||||||
|
@ -107,13 +103,6 @@ class WebsocketsRH(WebSocketRequestHandler):
|
||||||
extensions.pop('timeout', None)
|
extensions.pop('timeout', None)
|
||||||
extensions.pop('cookiejar', None)
|
extensions.pop('cookiejar', None)
|
||||||
|
|
||||||
def close(self):
|
|
||||||
# Remove the logging handler that contains a reference to our logger
|
|
||||||
# See: https://github.com/yt-dlp/yt-dlp/issues/8922
|
|
||||||
for name in WEBSOCKETS_LOGGERS:
|
|
||||||
for handler in self.__logging_handlers:
|
|
||||||
logging.getLogger(name).removeHandler(handler)
|
|
||||||
|
|
||||||
def _send(self, request):
|
def _send(self, request):
|
||||||
timeout = float(request.extensions.get('timeout') or self.timeout)
|
timeout = float(request.extensions.get('timeout') or self.timeout)
|
||||||
headers = self._merge_headers(request.headers)
|
headers = self._merge_headers(request.headers)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user