diff options
author | dirkf <fieldhouse@gmx.net> | 2023-07-07 18:51:38 +0100 |
---|---|---|
committer | dirkf <fieldhouse@gmx.net> | 2023-07-18 10:50:46 +0100 |
commit | 648dc5304cb2476592ff142988b8c62675011fcc (patch) | |
tree | fa00cc2e3f5c2feda798a160df5ca8f1fd8a846b | |
parent | 1720c04dc56fa0d2caa0a455b1acbd569347482e (diff) |
[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)
-rw-r--r-- | youtube_dl/compat.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/youtube_dl/compat.py b/youtube_dl/compat.py index 2554fd1c3..cd11ba5aa 100644 --- 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 |