commit: 648dc5304cb2476592ff142988b8c62675011fcc
parent 1720c04dc56fa0d2caa0a455b1acbd569347482e
Author: dirkf <fieldhouse@gmx.net>
Date: Fri, 7 Jul 2023 18:51:38 +0100
[compat] Add Request and HTTPClient compat for redirect
* support `method` parameter of `Request.__init__` (Py 2 and old Py 3)
* support `getcode` method of compat_http_client.HTTPResponse (Py 2)
Diffstat:
1 file changed, 28 insertions(+), 0 deletions(-)
diff --git a/youtube_dl/compat.py b/youtube_dl/compat.py
@@ -21,6 +21,7 @@ import socket
import struct
import subprocess
import sys
+import types
import xml.etree.ElementTree
# naming convention
@@ -55,6 +56,22 @@ try:
except ImportError: # Python 2
import urllib2 as compat_urllib_request
+# Also fix up lack of method arg in old Pythons
+try:
+ _req = compat_urllib_request.Request
+ _req('http://127.0.0.1', method='GET')
+except TypeError:
+ class _request(object):
+ def __new__(cls, url, *args, **kwargs):
+ method = kwargs.pop('method', None)
+ r = _req(url, *args, **kwargs)
+ if method:
+ r.get_method = types.MethodType(lambda _: method, r)
+ return r
+
+ compat_urllib_request.Request = _request
+
+
try:
import urllib.error as compat_urllib_error
except ImportError: # Python 2
@@ -80,6 +97,12 @@ except ImportError: # Python 2
import urllib as compat_urllib_response
try:
+ compat_urllib_response.addinfourl.status
+except AttributeError:
+ # .getcode() is deprecated in Py 3.
+ compat_urllib_response.addinfourl.status = property(lambda self: self.getcode())
+
+try:
import http.cookiejar as compat_cookiejar
except ImportError: # Python 2
import cookielib as compat_cookiejar
@@ -2360,6 +2383,11 @@ try:
import http.client as compat_http_client
except ImportError: # Python 2
import httplib as compat_http_client
+try:
+ compat_http_client.HTTPResponse.getcode
+except AttributeError:
+ # Py < 3.1
+ compat_http_client.HTTPResponse.getcode = lambda self: self.status
try:
from urllib.error import HTTPError as compat_HTTPError