Compare commits

...
Sign in to create a new pull request.

16 commits

Author SHA1 Message Date
Maxwell G
2a9ff01123
Update to 2025.03.31. Fixes rhbz#2355632. 2025-03-31 22:56:22 -05:00
Maxwell G
9c7f1f9f6d
Update to 2025.03.26. Fixes rhbz#2354242. 2025-03-27 11:35:55 -05:00
Maxwell G
b860ff73b7 Update to 2025.02.19. Fixes rhbz#2346539. 2025-02-22 18:41:46 -06:00
Mikel Olasagasti Uranga
8eacb27463 Update to 2025.01.26 - Closes rhbz#2342116 2025-01-26 15:31:33 +01:00
Mikel Olasagasti Uranga
b32c6119e7 Update to 2025.01.15 - Closes rhbz#2338387 2025-01-16 15:25:01 +01:00
Mikel Olasagasti Uranga
58c7b223ae Update to 2025.01.12 - Closes rhbz#2337284 2025-01-13 09:46:46 +01:00
Maxwell G
6b9deb5086 Preserve compatibility with requests 2.31 for Fedora 40
[skip changelog]

(cherry picked from commit b8d3a22583)
2025-01-06 17:16:13 -06:00
Maxwell G
0b3bfa128f Properly handle yt-dlp extras subpackages
(cherry picked from commit eacda9a5dd)
2025-01-06 17:16:13 -06:00
Maxwell G
bb236482e6 Recreate websockets 12 compat patch
Recreate the websockets 12 compat patch so it can be rebased and applied
in the normal way instead needing to use patch -R.

Also, remove the tomcli pyproject.toml version constraints command.
Brute forcing the version constraints in the pyproject.toml won't work,
as they are now also checked at runtime and the code itself needs to be
patched as well.

[skip changelog]

(cherry picked from commit 6308364583)
2025-01-06 17:16:13 -06:00
Mikel Olasagasti Uranga
9690485ec7 Update to 2024.12.23 - Closes rhbz#2330257
(cherry picked from commit 473142dd7d)
2025-01-06 17:16:13 -06:00
Mikel Olasagasti Uranga
699b594e50 Convert to %autorelease and %autochangelog
[skip changelog]

(cherry picked from commit 4b45f4c7c9)
2025-01-06 17:16:13 -06:00
Yaakov Selkowitz
50a4a661a1 Fix EPEL build
Undefined macros result in a parser error unless they are ?-prefixed, and
%fedora is not guaranteed to be defined (as in EPEL builds).

(cherry picked from commit d77c484ebe)
2025-01-06 17:16:13 -06:00
Mikel Olasagasti Uranga
429a67881c Update to 2024.11.04. Fixes rhbz#2323783
(cherry picked from commit b43afeaccb)
2025-01-06 17:16:13 -06:00
Mikel Olasagasti Uranga
c070263390 Update to 2024.11.04. Fixes rhbz#2323783
(cherry picked from commit 5d846b7f84)
2025-01-06 17:16:13 -06:00
Mikel Olasagasti Uranga
64d87fdda4 Update to 2024.10.22. Fixes rhbz#2321221
(cherry picked from commit 0b309bc750)
2025-01-06 17:16:13 -06:00
Maxwell G
3093ca0390
Update to 2024.10.07.
(cherry picked from commit 1fa052bd17)
2024-10-08 10:37:00 -05:00
7 changed files with 703 additions and 259 deletions

11
.gitignore vendored
View file

@ -42,3 +42,14 @@
/yt-dlp-2024.08.01.tar.gz
/yt-dlp-2024.08.06.tar.gz
/yt-dlp-2024.09.27.tar.gz
/yt-dlp-2024.10.07.tar.gz
/yt-dlp-2024.10.22.tar.gz
/yt-dlp-2024.11.04.tar.gz
/yt-dlp-2024.11.18.tar.gz
/yt-dlp-2024.12.23.tar.gz
/yt-dlp-2025.01.12.tar.gz
/yt-dlp-2025.01.15.tar.gz
/yt-dlp-2025.01.26.tar.gz
/yt-dlp-2025.02.19.tar.gz
/yt-dlp-2025.03.26.tar.gz
/yt-dlp-2025.03.31.tar.gz

View file

@ -0,0 +1,119 @@
From fbc486f4fac78bfd49011c1b60362e656c679c71 Mon Sep 17 00:00:00 2001
From: Maxwell G <maxwell@gtmx.me>
Date: Mon, 6 Jan 2025 14:37:58 -0600
Subject: [PATCH 1/2] Revert "[rh:websockets] Upgrade websockets to 13.0
(#10815)"
This reverts commit 6f9e6537434562d513d0c9b68ced8a61ade94a64.
---
.github/workflows/core.yml | 1 -
.github/workflows/quick-test.yml | 1 -
pyproject.toml | 2 +-
test/test_websockets.py | 8 ++++----
yt_dlp/networking/_websockets.py | 5 ++++-
5 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index 9a4342a58..bed3af94b 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -59,7 +59,6 @@ jobs:
- name: Install test requirements
run: python3 ./devscripts/install_deps.py --include test --include curl-cffi
- name: Run tests
- timeout-minutes: 15
continue-on-error: False
run: |
python3 -m yt_dlp -v || true # Print debug head
diff --git a/.github/workflows/quick-test.yml b/.github/workflows/quick-test.yml
index 1a32bbfe3..235a2c64d 100644
--- a/.github/workflows/quick-test.yml
+++ b/.github/workflows/quick-test.yml
@@ -17,7 +17,6 @@ jobs:
- name: Install test requirements
run: python3 ./devscripts/install_deps.py -o --include test
- name: Run tests
- timeout-minutes: 15
run: |
python3 -m yt_dlp -v || true
python3 ./devscripts/run_tests.py --pytest-args '--reruns 2 --reruns-delay 3.0' core
diff --git a/pyproject.toml b/pyproject.toml
index 5e987a6fd..6810415d1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -52,7 +52,7 @@ default = [
"pycryptodomex",
"requests>=2.32.2,<3",
"urllib3>=1.26.17,<3",
- "websockets>=13.0",
+ "websockets>=12.0",
]
curl-cffi = [
"curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.11; implementation_name=='cpython'",
diff --git a/test/test_websockets.py b/test/test_websockets.py
index dead5fe5c..5e0ce48cc 100644
--- a/test/test_websockets.py
+++ b/test/test_websockets.py
@@ -88,7 +88,7 @@ def create_wss_websocket_server():
certfn = os.path.join(TEST_DIR, 'testcert.pem')
sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
sslctx.load_cert_chain(certfn, None)
- return create_websocket_server(ssl=sslctx)
+ return create_websocket_server(ssl_context=sslctx)
MTLS_CERT_DIR = os.path.join(TEST_DIR, 'testdata', 'certificate')
@@ -103,7 +103,7 @@ def create_mtls_wss_websocket_server():
sslctx.load_verify_locations(cafile=cacertfn)
sslctx.load_cert_chain(certfn, None)
- return create_websocket_server(ssl=sslctx)
+ return create_websocket_server(ssl_context=sslctx)
def create_legacy_wss_websocket_server():
@@ -112,7 +112,7 @@ def create_legacy_wss_websocket_server():
sslctx.maximum_version = ssl.TLSVersion.TLSv1_2
sslctx.set_ciphers('SHA1:AESCCM:aDSS:eNULL:aNULL')
sslctx.load_cert_chain(certfn, None)
- return create_websocket_server(ssl=sslctx)
+ return create_websocket_server(ssl_context=sslctx)
def ws_validate_and_send(rh, req):
@@ -139,7 +139,7 @@ def setup_class(cls):
cls.wss_thread, cls.wss_port = create_wss_websocket_server()
cls.wss_base_url = f'wss://127.0.0.1:{cls.wss_port}'
- cls.bad_wss_thread, cls.bad_wss_port = create_websocket_server(ssl=ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER))
+ cls.bad_wss_thread, cls.bad_wss_port = create_websocket_server(ssl_context=ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER))
cls.bad_wss_host = f'wss://127.0.0.1:{cls.bad_wss_port}'
cls.mtls_wss_thread, cls.mtls_wss_port = create_mtls_wss_websocket_server()
diff --git a/yt_dlp/networking/_websockets.py b/yt_dlp/networking/_websockets.py
index d29f8e45a..a2bdb9c82 100644
--- a/yt_dlp/networking/_websockets.py
+++ b/yt_dlp/networking/_websockets.py
@@ -48,7 +48,10 @@
# 2: "AttributeError: 'ClientConnection' object has no attribute 'recv_events_exc'. Did you mean: 'recv_events'?"
import websockets.sync.connection # isort: split
with contextlib.suppress(Exception):
+ # > 12.0
websockets.sync.connection.Connection.recv_exc = None
+ # 12.0
+ websockets.sync.connection.Connection.recv_events_exc = None
class WebsocketsResponseAdapter(WebSocketResponse):
@@ -162,7 +165,7 @@ def _send(self, request):
additional_headers=headers,
open_timeout=timeout,
user_agent_header=None,
- ssl=ssl_ctx if wsuri.secure else None,
+ ssl_context=ssl_ctx if wsuri.secure else None,
close_timeout=0, # not ideal, but prevents yt-dlp hanging
)
return WebsocketsResponseAdapter(conn, url=request.url)
--
2.48.1

View file

@ -0,0 +1,369 @@
From 86b38cb4301ee26dbea2c3ef1865d463aaf67721 Mon Sep 17 00:00:00 2001
From: Maxwell G <maxwell@gtmx.me>
Date: Mon, 6 Jan 2025 14:48:08 -0600
Subject: [PATCH 2/2] Revert "[rh:requests] Bump minimum `requests` version to
2.32.2 (#10079)"
This reverts commit db50f19d76c6870a5a13d0cab9287d684fd7449a.
---
pyproject.toml | 2 +-
yt_dlp/networking/_requests.py | 163 ++++++++++++++++++++++-----------
2 files changed, 109 insertions(+), 56 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 6810415d1..2c1d485d4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -50,7 +50,7 @@ default = [
"certifi",
"mutagen",
"pycryptodomex",
- "requests>=2.32.2,<3",
+ "requests>=2.31.0,<3",
"urllib3>=1.26.17,<3",
"websockets>=12.0",
]
diff --git a/yt_dlp/networking/_requests.py b/yt_dlp/networking/_requests.py
index 5b6b264a6..98c755d57 100644
--- a/yt_dlp/networking/_requests.py
+++ b/yt_dlp/networking/_requests.py
@@ -13,20 +13,21 @@
from ..utils.networking import normalize_url
if requests is None:
- raise ImportError('requests module is not installed')
+ raise ImportError("requests module is not installed")
if urllib3 is None:
- raise ImportError('urllib3 module is not installed')
+ raise ImportError("urllib3 module is not installed")
-urllib3_version = tuple(int_or_none(x, default=0) for x in urllib3.__version__.split('.'))
+urllib3_version = tuple(
+ int_or_none(x, default=0) for x in urllib3.__version__.split(".")
+)
if urllib3_version < (1, 26, 17):
- urllib3._yt_dlp__version = f'{urllib3.__version__} (unsupported)'
- raise ImportError('Only urllib3 >= 1.26.17 is supported')
+ urllib3._yt_dlp__version = f"{urllib3.__version__} (unsupported)"
+ raise ImportError("Only urllib3 >= 1.26.17 is supported")
-if requests.__build__ < 0x023202:
- requests._yt_dlp__version = f'{requests.__version__} (unsupported)'
- raise ImportError('Only requests >= 2.32.2 is supported')
+if requests.__build__ < 0x023100:
+ raise ImportError("Only requests >= 2.31.0 is supported")
import requests.adapters
import requests.utils
@@ -62,13 +63,14 @@
from ..socks import ProxyError as SocksProxyError
SUPPORTED_ENCODINGS = [
- 'gzip', 'deflate',
+ "gzip",
+ "deflate",
]
if brotli is not None:
- SUPPORTED_ENCODINGS.append('br')
+ SUPPORTED_ENCODINGS.append("br")
-'''
+"""
Override urllib3's behavior to not convert lower-case percent-encoded characters
to upper-case during url normalization process.
@@ -83,7 +85,7 @@
1: https://tools.ietf.org/html/rfc3986#section-2.1
2: https://github.com/streamlink/streamlink/pull/4003
-'''
+"""
class Urllib3PercentREOverride:
@@ -102,14 +104,19 @@ def subn(self, repl, string, *args, **kwargs):
# https://github.com/urllib3/urllib3/commit/a2697e7c6b275f05879b60f593c5854a816489f0
import urllib3.util.url
-if hasattr(urllib3.util.url, 'PERCENT_RE'):
+if hasattr(urllib3.util.url, "PERCENT_RE"):
urllib3.util.url.PERCENT_RE = Urllib3PercentREOverride(urllib3.util.url.PERCENT_RE)
-elif hasattr(urllib3.util.url, '_PERCENT_RE'): # urllib3 >= 2.0.0
- urllib3.util.url._PERCENT_RE = Urllib3PercentREOverride(urllib3.util.url._PERCENT_RE)
+elif hasattr(urllib3.util.url, "_PERCENT_RE"): # urllib3 >= 2.0.0
+ urllib3.util.url._PERCENT_RE = Urllib3PercentREOverride(
+ urllib3.util.url._PERCENT_RE
+ )
else:
- warnings.warn('Failed to patch PERCENT_RE in urllib3 (does the attribute exist?)' + bug_reports_message())
+ warnings.warn(
+ "Failed to patch PERCENT_RE in urllib3 (does the attribute exist?)"
+ + bug_reports_message()
+ )
-'''
+"""
Workaround for issue in urllib.util.ssl_.py: ssl_wrap_context does not pass
server_hostname to SSLContext.wrap_socket if server_hostname is an IP,
however this is an issue because we set check_hostname to True in our SSLContext.
@@ -118,7 +125,7 @@ def subn(self, repl, string, *args, **kwargs):
This has been fixed in urllib3 2.0+.
See: https://github.com/urllib3/urllib3/issues/517
-'''
+"""
if urllib3_version < (2, 0, 0):
with contextlib.suppress(Exception):
@@ -134,8 +141,12 @@ def subn(self, repl, string, *args, **kwargs):
class RequestsResponseAdapter(Response):
def __init__(self, res: requests.models.Response):
super().__init__(
- fp=res.raw, headers=res.headers, url=res.url,
- status=res.status_code, reason=res.reason)
+ fp=res.raw,
+ headers=res.headers,
+ url=res.url,
+ status=res.status_code,
+ reason=res.reason,
+ )
self._requests_response = res
@@ -152,12 +163,21 @@ def read(self, amt: int | None = None):
# IncompleteRead is always contained within ProtocolError
# See urllib3.response.HTTPResponse._error_catcher()
ir_err = next(
- (err for err in (e.__context__, e.__cause__, *variadic(e.args))
- if isinstance(err, http.client.IncompleteRead)), None)
+ (
+ err
+ for err in (e.__context__, e.__cause__, *variadic(e.args))
+ if isinstance(err, http.client.IncompleteRead)
+ ),
+ None,
+ )
if ir_err is not None:
# `urllib3.exceptions.IncompleteRead` is subclass of `http.client.IncompleteRead`
# but uses an `int` for its `partial` property.
- partial = ir_err.partial if isinstance(ir_err.partial, int) else len(ir_err.partial)
+ partial = (
+ ir_err.partial
+ if isinstance(ir_err.partial, int)
+ else len(ir_err.partial)
+ )
raise IncompleteRead(partial=partial, expected=ir_err.expected) from e
raise TransportError(cause=e) from e
@@ -167,12 +187,14 @@ def read(self, amt: int | None = None):
class RequestsHTTPAdapter(requests.adapters.HTTPAdapter):
- def __init__(self, ssl_context=None, proxy_ssl_context=None, source_address=None, **kwargs):
+ def __init__(
+ self, ssl_context=None, proxy_ssl_context=None, source_address=None, **kwargs
+ ):
self._pm_args = {}
if ssl_context:
- self._pm_args['ssl_context'] = ssl_context
+ self._pm_args["ssl_context"] = ssl_context
if source_address:
- self._pm_args['source_address'] = (source_address, 0)
+ self._pm_args["source_address"] = (source_address, 0)
self._proxy_ssl_context = proxy_ssl_context or ssl_context
super().__init__(**kwargs)
@@ -181,14 +203,21 @@ def init_poolmanager(self, *args, **kwargs):
def proxy_manager_for(self, proxy, **proxy_kwargs):
extra_kwargs = {}
- if not proxy.lower().startswith('socks') and self._proxy_ssl_context:
- extra_kwargs['proxy_ssl_context'] = self._proxy_ssl_context
- return super().proxy_manager_for(proxy, **proxy_kwargs, **self._pm_args, **extra_kwargs)
+ if not proxy.lower().startswith("socks") and self._proxy_ssl_context:
+ extra_kwargs["proxy_ssl_context"] = self._proxy_ssl_context
+ return super().proxy_manager_for(
+ proxy, **proxy_kwargs, **self._pm_args, **extra_kwargs
+ )
# Skip `requests` internal verification; we use our own SSLContext
+ # requests 2.31.0+
def cert_verify(*args, **kwargs):
pass
+ # requests 2.31.0-2.32.1
+ def _get_connection(self, request, *_, proxies=None, **__):
+ return self.get_connection(request.url, proxies)
+
# requests 2.32.2+: Reimplementation without `_urllib3_request_context`
def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None):
url = urllib3.util.parse_url(request.url).url
@@ -222,7 +251,7 @@ def rebuild_method(self, prepared_request, response):
def rebuild_auth(self, prepared_request, response):
# HACK: undo status code change from rebuild_method, if applicable.
# rebuild_auth runs after requests would remove headers/body based on status code
- if hasattr(response, '_real_status_code'):
+ if hasattr(response, "_real_status_code"):
response.status_code = response._real_status_code
del response._real_status_code
return super().rebuild_auth(prepared_request, response)
@@ -256,23 +285,30 @@ def emit(self, record):
@register_rh
class RequestsRH(RequestHandler, InstanceStoreMixin):
-
"""Requests RequestHandler
https://github.com/psf/requests
"""
- _SUPPORTED_URL_SCHEMES = ('http', 'https')
+
+ _SUPPORTED_URL_SCHEMES = ("http", "https")
_SUPPORTED_ENCODINGS = tuple(SUPPORTED_ENCODINGS)
- _SUPPORTED_PROXY_SCHEMES = ('http', 'https', 'socks4', 'socks4a', 'socks5', 'socks5h')
+ _SUPPORTED_PROXY_SCHEMES = (
+ "http",
+ "https",
+ "socks4",
+ "socks4a",
+ "socks5",
+ "socks5h",
+ )
_SUPPORTED_FEATURES = (Features.NO_PROXY, Features.ALL_PROXY)
- RH_NAME = 'requests'
+ RH_NAME = "requests"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Forward urllib3 debug messages to our logger
- logger = logging.getLogger('urllib3')
+ logger = logging.getLogger("urllib3")
self.__logging_handler = Urllib3LoggingHandler(logger=self._logger)
- self.__logging_handler.setFormatter(logging.Formatter('requests: %(message)s'))
+ self.__logging_handler.setFormatter(logging.Formatter("requests: %(message)s"))
self.__logging_handler.addFilter(Urllib3LoggingFilter())
logger.addHandler(self.__logging_handler)
# TODO: Use a logger filter to suppress pool reuse warning instead
@@ -291,14 +327,14 @@ def close(self):
self._clear_instances()
# Remove the logging handler that contains a reference to our logger
# See: https://github.com/yt-dlp/yt-dlp/issues/8922
- logging.getLogger('urllib3').removeHandler(self.__logging_handler)
+ logging.getLogger("urllib3").removeHandler(self.__logging_handler)
def _check_extensions(self, extensions):
super()._check_extensions(extensions)
- extensions.pop('cookiejar', None)
- extensions.pop('timeout', None)
- extensions.pop('legacy_ssl', None)
- extensions.pop('keep_header_casing', None)
+ extensions.pop("cookiejar", None)
+ extensions.pop("timeout", None)
+ extensions.pop("legacy_ssl", None)
+ extensions.pop("keep_header_casing", None)
def _create_instance(self, cookiejar, legacy_ssl_support=None):
session = RequestsSession()
@@ -308,9 +344,11 @@ def _create_instance(self, cookiejar, legacy_ssl_support=None):
max_retries=urllib3.util.retry.Retry(False),
)
session.adapters.clear()
- session.headers = requests.models.CaseInsensitiveDict({'Connection': 'keep-alive'})
- session.mount('https://', http_adapter)
- session.mount('http://', http_adapter)
+ session.headers = requests.models.CaseInsensitiveDict(
+ {"Connection": "keep-alive"}
+ )
+ session.mount("https://", http_adapter)
+ session.mount("http://", http_adapter)
session.cookies = cookiejar
session.trust_env = False # no need, we already load proxies from env
return session
@@ -325,7 +363,7 @@ def _send(self, request):
session = self._get_instance(
cookiejar=self._get_cookiejar(request),
- legacy_ssl_support=request.extensions.get('legacy_ssl'),
+ legacy_ssl_support=request.extensions.get("legacy_ssl"),
)
try:
@@ -345,7 +383,7 @@ def _send(self, request):
requests_res = e.response
except requests.exceptions.SSLError as e:
- if 'CERTIFICATE_VERIFY_FAILED' in str(e):
+ if "CERTIFICATE_VERIFY_FAILED" in str(e):
raise CertificateVerifyError(cause=e) from e
raise SSLError(cause=e) from e
@@ -378,26 +416,33 @@ def requests_preference(rh, request):
# Use our socks proxy implementation with requests to avoid an extra dependency.
class SocksHTTPConnection(urllib3.connection.HTTPConnection):
- def __init__(self, _socks_options, *args, **kwargs): # must use _socks_options to pass PoolKey checks
+ def __init__(
+ self, _socks_options, *args, **kwargs
+ ): # must use _socks_options to pass PoolKey checks
self._proxy_args = _socks_options
super().__init__(*args, **kwargs)
def _new_conn(self):
try:
return create_connection(
- address=(self._proxy_args['addr'], self._proxy_args['port']),
+ address=(self._proxy_args["addr"], self._proxy_args["port"]),
timeout=self.timeout,
source_address=self.source_address,
_create_socket_func=functools.partial(
- create_socks_proxy_socket, (self.host, self.port), self._proxy_args))
+ create_socks_proxy_socket, (self.host, self.port), self._proxy_args
+ ),
+ )
except (socket.timeout, TimeoutError) as e:
raise urllib3.exceptions.ConnectTimeoutError(
- self, f'Connection to {self.host} timed out. (connect timeout={self.timeout})') from e
+ self,
+ f"Connection to {self.host} timed out. (connect timeout={self.timeout})",
+ ) from e
except SocksProxyError as e:
raise urllib3.exceptions.ProxyError(str(e), e) from e
except OSError as e:
raise urllib3.exceptions.NewConnectionError(
- self, f'Failed to establish a new connection: {e}') from e
+ self, f"Failed to establish a new connection: {e}"
+ ) from e
class SocksHTTPSConnection(SocksHTTPConnection, urllib3.connection.HTTPSConnection):
@@ -414,12 +459,20 @@ class SocksHTTPSConnectionPool(urllib3.HTTPSConnectionPool):
class SocksProxyManager(urllib3.PoolManager):
- def __init__(self, socks_proxy, username=None, password=None, num_pools=10, headers=None, **connection_pool_kw):
- connection_pool_kw['_socks_options'] = make_socks_proxy_opts(socks_proxy)
+ def __init__(
+ self,
+ socks_proxy,
+ username=None,
+ password=None,
+ num_pools=10,
+ headers=None,
+ **connection_pool_kw,
+ ):
+ connection_pool_kw["_socks_options"] = make_socks_proxy_opts(socks_proxy)
super().__init__(num_pools, headers, **connection_pool_kw)
self.pool_classes_by_scheme = {
- 'http': SocksHTTPConnectionPool,
- 'https': SocksHTTPSConnectionPool,
+ "http": SocksHTTPConnectionPool,
+ "https": SocksHTTPSConnectionPool,
}
--
2.48.1

180
changelog Normal file
View file

@ -0,0 +1,180 @@
* Mon Nov 18 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.11.18-1
- Update to 2024.11.18. Fixes rhbz#2326919
* Tue Nov 05 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.11.04-1
- Update to 2024.11.04. Fixes rhbz#2323783
* Wed Oct 23 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.10.22-1
- Update to 2024.10.22. Fixes rhbz#2321221
* Tue Oct 08 2024 Maxwell G <maxwell@gtmx.me> - 2024.10.07-1
- Update to 2024.10.07.
* Sat Sep 28 2024 Maxwell G <maxwell@gtmx.me> - 2024.09.27-1
- Update to 2024.09.27.
* Mon Aug 12 2024 Maxwell G <maxwell@gtmx.me> - 2024.08.06-1
- Update to 2024.08.06. Fixes rhbz#2303069.
* Sat Aug 03 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.08.01-1
- Update to 2024.08.01. Fixes rhbz#2302522
* Fri Jul 26 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.25-1
- Update to 2024.07.25. Fixes rhbz#2300087
* Wed Jul 24 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.16-1
- Update to 2024.07.16. Fixes rhbz#2298550
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2024.07.09-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Thu Jul 11 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.09-1
- Update to 2024.07.09. Fixes rhbz#2297344
* Mon Jul 08 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.07-1
- Update to 2024.07.07. Fixes rhbz#2296356
* Thu Jul 04 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.02-1
- Update to 2024.07.02. Fixes rhbz#2295769
* Fri Jun 07 2024 Python Maint <python-maint@redhat.com> - 2024.05.27-2
- Rebuilt for Python 3.13
* Wed May 29 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.05.27-1
- Update to 2024.05.27. Fixes rhbz#2283578.
* Mon May 27 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.05.26-1
- Update to 2024.05.26. Fixes rhbz#2274266.
* Wed Apr 10 2024 Maxwell G <maxwell@gtmx.me> - 2024.04.09-1
- Update to 2024.04.09.
* Wed Mar 13 2024 Maxwell G <maxwell@gtmx.me> - 2024.03.10-1
- Update to 2024.03.10. Fixes rhbz#2268944.
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2023.12.30-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jan 3 2024 Maxwell G <maxwell@gtmx.me> - 2023.12.30-1
- Update to 2023.12.30. Fixes rhbz#2244200.
* Wed Oct 11 2023 Marcus Müller <marcus_fedora@baseband.digital> - 2023.10.07-1
- Update to 2023.10.07.
- Fixes rhbz#2243274
- Fixes rhbz#2240465
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2023.07.06-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jul 07 2023 Maxwell G <maxwell@gtmx.me> - 2023.07.06-1
- Update to 2023.07.06.
- Mitigates CVE-2023-35934 / GHSA-v8mc-9377-rwjj
* Wed Jul 05 2023 Maxwell G <maxwell@gtmx.me> - 2023.06.22-1
- Update to 2023.06.22. Fixes rhbz#2216612.
* Thu Jun 22 2023 Maxwell G <maxwell@gtmx.me> - 2023.06.21-1
- Update to 2023.06.21. Fixes rhbz#2216612.
* Thu Jun 15 2023 Python Maint <python-maint@redhat.com> - 2023.03.04-2
- Rebuilt for Python 3.12
* Mon Mar 06 2023 Maxwell G <maxwell@gtmx.me> - 2023.03.04-1
- Update to 2023.03.04. Fixes rhbz#2175395.
* Fri Feb 17 2023 Maxwell G <maxwell@gtmx.me> - 2023.02.17-1
- Update to 2023.02.17.
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2023.01.06-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Jan 10 2023 Maxwell G <gotmax@e.email> - 2023.01.06-1
- Update to 2023.01.06. Fixes rhbz#2157879.
* Mon Nov 14 2022 Maxwell G <gotmax@e.email> - 2022.11.11-1
- Update to 2022.11.11. Fixes rhbz#2142417.
* Sat Oct 08 2022 Maxwell G <gotmax@e.email> - 2022.10.04-1
- Update to 2022.10.04. Fixes rhbz#2132726.
* Fri Sep 02 2022 Maxwell G <gotmax@e.email> - 2022.09.01-1
- Update to 2022.09.01. Fixes rhbz#2123442.
* Fri Aug 19 2022 Maxwell G <gotmax@e.email> - 2022.08.19-1
- Update to 2022.08.19. Fixes rhbz#2118224.
* Tue Aug 09 2022 Maxwell G <gotmax@e.email> - 2022.08.08-1
- Update to 2022.08.08.
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2022.06.29-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon Jul 04 2022 Maxwell G <gotmax@e.email> - 2022.06.29-2
- Fix shell completions subpackages
* Mon Jul 04 2022 Maxwell G <gotmax@e.email> - 2022.06.29-1
- Update to 2022.06.29. Fixes rhbz#2102238.
* Thu Jun 23 2022 Maxwell G <gotmax@e.email> - 2022.06.22.1-1
- Update to 2022.06.22.1. Fixes rhbz#2100019.
* Fri Jun 17 2022 Maxwell G <gotmax@e.email> - 2022.05.18-3
- Fix gating configuration
* Thu Jun 16 2022 Python Maint <python-maint@redhat.com> - 2022.05.18-2
- Rebuilt for Python 3.11
* Tue May 24 2022 Maxwell G <gotmax@e.email> - 2022.05.18-1
- Update to 2022.05.18. Fixes rhbz#2088564.
* Fri Apr 08 2022 Maxwell G <gotmax@e.email> - 2022.04.08-1
- Update to 2022.04.08. Fixes rhbz#2073359.
* Sat Mar 12 2022 Artem Polishchuk <ego.cordatus@gmail.com> - 2022.03.08.1-2
- build: Make ffmpeg and ffprobe conditional deps for >= f36 only
* Thu Mar 10 2022 Maxwell G <gotmax@e.email> - 2022.03.08.1-1
- Update to 2022.03.08.1. Fixes rhbz#2061973.
* Mon Mar 07 2022 Maxwell G <gotmax@e.email> - 2022.02.04-2
- Add weak dependency on ffmpeg and ffprobe.
- Make shell-completion subpackages optional again.
* Fri Feb 04 2022 Maxwell G <gotmax@e.email> - 2022.2.4-1
- Update to 2022.2.4. Fixes rhbz#2050497.
* Mon Jan 24 2022 Maxwell G <gotmax@e.email> - 2022.01.21-1
- Update to 2022.01.21.
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2021.12.27-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Dec 27 2021 Maxwell G <gotmax@e.email> - 2021.12.27-1
- Update to 2021.12.27.
* Sun Dec 26 2021 Maxwell G <gotmax@e.email> - 2021.12.25-1
- Update to 2021.12.25.
* Wed Dec 01 2021 Maxwell G <gotmax@e.email> - 2021.12.01-1
- Update to 2021.12.01.
* Tue Nov 9 2021 Maxwell G <gotmax@e.email> - 2021.11.10.1-1
- Update to 2021.11.10.1.
* Tue Nov 9 2021 Maxwell G <gotmax@e.email> - 2021.10.22-2
- Skip installing unnecessary tox dependencies
- Fix shell-completion subpackages
- Only package README.md; don't generate extra README.txt
* Sat Oct 23 2021 Maxwell G <gotmax@e.email> - 2021.10.22-1
- Update to 2021.10.22
* Sun Oct 10 2021 Maxwell G <gotmax@e.email> - 2021.10.10-1
- Mark LICENSE with %%license instead of %%doc
- Update to 2021.10.10
- Fix non-executable-script rpmlint error
- Use `python3dist(NAME)` for dependencies
- Fix rpm-buildroot-usage rpmlint error
* Sat Oct 9 2021 Maxwell G <gotmax@e.email> - 2021.10.09-1
- Initial package

View file

@ -1 +1 @@
SHA512 (yt-dlp-2024.09.27.tar.gz) = 8c518aae18d049495def31dad1e81374ff7a2f1b136356c574d97643c6bbde37f757f74d77c519a8782c4d69668db80f367a21424923f249e82491c14f4880e8
SHA512 (yt-dlp-2025.03.31.tar.gz) = 3ac5e5d13e3d1d4965ec398901bea158f451e0aed3600dace706e9e1a8f89580349fe1249c76fe097966c8254eb1cc526075138fc16ea29cf933ab0019cfaf27

View file

@ -1,77 +0,0 @@
diff --git a/pyproject.toml b/pyproject.toml
index d5480e1c6d73..fe6894a42838 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -49,7 +49,7 @@ dependencies = [
"pycryptodomex",
"requests>=2.32.2,<3",
"urllib3>=1.26.17,<3",
- "websockets>=12.0",
+ "websockets>=13.0",
]
[project.optional-dependencies]
diff --git a/test/test_websockets.py b/test/test_websockets.py
index 43f20ac655ad..06112cc0b8fb 100644
--- a/test/test_websockets.py
+++ b/test/test_websockets.py
@@ -88,7 +88,7 @@ def create_wss_websocket_server():
certfn = os.path.join(TEST_DIR, 'testcert.pem')
sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
sslctx.load_cert_chain(certfn, None)
- return create_websocket_server(ssl_context=sslctx)
+ return create_websocket_server(ssl=sslctx)
MTLS_CERT_DIR = os.path.join(TEST_DIR, 'testdata', 'certificate')
@@ -103,7 +103,7 @@ def create_mtls_wss_websocket_server():
sslctx.load_verify_locations(cafile=cacertfn)
sslctx.load_cert_chain(certfn, None)
- return create_websocket_server(ssl_context=sslctx)
+ return create_websocket_server(ssl=sslctx)
def create_legacy_wss_websocket_server():
@@ -112,7 +112,7 @@ def create_legacy_wss_websocket_server():
sslctx.maximum_version = ssl.TLSVersion.TLSv1_2
sslctx.set_ciphers('SHA1:AESCCM:aDSS:eNULL:aNULL')
sslctx.load_cert_chain(certfn, None)
- return create_websocket_server(ssl_context=sslctx)
+ return create_websocket_server(ssl=sslctx)
def ws_validate_and_send(rh, req):
@@ -139,7 +139,7 @@ def setup_class(cls):
cls.wss_thread, cls.wss_port = create_wss_websocket_server()
cls.wss_base_url = f'wss://127.0.0.1:{cls.wss_port}'
- cls.bad_wss_thread, cls.bad_wss_port = create_websocket_server(ssl_context=ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER))
+ cls.bad_wss_thread, cls.bad_wss_port = create_websocket_server(ssl=ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER))
cls.bad_wss_host = f'wss://127.0.0.1:{cls.bad_wss_port}'
cls.mtls_wss_thread, cls.mtls_wss_port = create_mtls_wss_websocket_server()
diff --git a/yt_dlp/networking/_websockets.py b/yt_dlp/networking/_websockets.py
index 492af1154de7..21b765b91dc8 100644
--- a/yt_dlp/networking/_websockets.py
+++ b/yt_dlp/networking/_websockets.py
@@ -47,10 +47,7 @@
# 2: "AttributeError: 'ClientConnection' object has no attribute 'recv_events_exc'. Did you mean: 'recv_events'?"
import websockets.sync.connection # isort: split
with contextlib.suppress(Exception):
- # > 12.0
websockets.sync.connection.Connection.recv_exc = None
- # 12.0
- websockets.sync.connection.Connection.recv_events_exc = None
class WebsocketsResponseAdapter(WebSocketResponse):
@@ -162,7 +159,7 @@ def _send(self, request):
additional_headers=headers,
open_timeout=timeout,
user_agent_header=None,
- ssl_context=ssl_ctx if wsuri.secure else None,
+ ssl=ssl_ctx if wsuri.secure else None,
close_timeout=0, # not ideal, but prevents yt-dlp hanging
)
return WebsocketsResponseAdapter(conn, url=request.url)

View file

@ -7,8 +7,8 @@
%bcond_without tests
Name: yt-dlp
Version: 2024.09.27
Release: 1%{?dist}
Version: 2025.03.31
Release: %autorelease
Summary: A command-line program to download videos from online video platforms
License: Unlicense
@ -20,15 +20,18 @@ Source: yt-dlp.spec.license
# https://github.com/yt-dlp/yt-dlp/commit/6f9e6537434562d513d0c9b68ced8a61ade94a64
# [rh:websockets] Upgrade websockets to 13.0 (#10815)
# Revert this patch for compatibility with older Fedora versions
Patch1000: websockets-13.patch
# This patch is applied conditionally to Fedora <= 41
Patch1000: 0001-Revert-rh-websockets-Upgrade-websockets-to-13.0-1081.patch
# Revert "[rh:requests] Bump minimum `requests` version to 2.32.2 (#10079)"
# Revert this patch for compatibility with older Fedora versions
# This patch is applied conditionally to Fedora <= 40
Patch1001: 0002-Revert-rh-requests-Bump-minimum-requests-version-to-.patch
BuildArch: noarch
BuildRequires: python3-devel
# Needed for %%prep
BuildRequires: tomcli
%if %{with tests}
# Needed for %%check
BuildRequires: %{py3_dist pytest}
@ -38,6 +41,8 @@ BuildRequires: %{py3_dist pytest}
BuildRequires: pandoc
BuildRequires: make
Requires: yt-dlp+default = %{?epoch:%{epoch}:}%{version}-%{release}
# ffmpeg-free is now available in Fedora.
Recommends: /usr/bin/ffmpeg
Recommends: /usr/bin/ffprobe
@ -80,19 +85,21 @@ Fish command line completion support for %{name}.
%prep
%autosetup -N
%if %{defined fedora} && %{fedora} <= 41
%autopatch -M 999 -p1
%if %{defined fedora} && 0%{?fedora} <= 41
# Revert patch for compatibility with older websockets
%patch -P1000 -p1 -R
%autopatch 1000 -p1
%endif
%if %{defined fedora} && 0%{?fedora} <= 40
# Revert patch for compatibility with older requests
%autopatch 1001 -p1
%endif
# Remove unnecessary shebangs
find -type f ! -executable -name '*.py' -print -exec sed -i -e '1{\@^#!.*@d}' '{}' +
# Relax version constraints
tomcli-set pyproject.toml lists replace project.dependencies \
'(requests|urllib3|websockets)>=.*' '\1'
%generate_buildrequires
%pyproject_buildrequires -r
%pyproject_buildrequires -x default,secretstorage
%build
# Docs and shell completions
@ -108,7 +115,7 @@ make yt-dlp.1 completion-bash completion-zsh completion-fish
%check
%if %{with tests}
# See https://github.com/yt-dlp/yt-dlp/blob/master/devscripts/run_tests.sh
%pytest -k "not download"
%pytest -k "not download and not test_verify_cert[Websockets]"
%endif
%files -f %{pyproject_files}
@ -126,172 +133,7 @@ make yt-dlp.1 completion-bash completion-zsh completion-fish
%files fish-completion
%{fish_completions_dir}/%{name}.fish
%pyproject_extras_subpkg -n yt-dlp default secretstorage
%changelog
* Sat Sep 28 2024 Maxwell G <maxwell@gtmx.me> - 2024.09.27-1
- Update to 2024.09.27.
* Mon Aug 12 2024 Maxwell G <maxwell@gtmx.me> - 2024.08.06-1
- Update to 2024.08.06. Fixes rhbz#2303069.
* Sat Aug 03 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.08.01-1
- Update to 2024.08.01. Fixes rhbz#2302522
* Fri Jul 26 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.25-1
- Update to 2024.07.25. Fixes rhbz#2300087
* Wed Jul 24 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.16-1
- Update to 2024.07.16. Fixes rhbz#2298550
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2024.07.09-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Thu Jul 11 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.09-1
- Update to 2024.07.09. Fixes rhbz#2297344
* Mon Jul 08 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.07-1
- Update to 2024.07.07. Fixes rhbz#2296356
* Thu Jul 04 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.07.02-1
- Update to 2024.07.02. Fixes rhbz#2295769
* Fri Jun 07 2024 Python Maint <python-maint@redhat.com> - 2024.05.27-2
- Rebuilt for Python 3.13
* Wed May 29 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.05.27-1
- Update to 2024.05.27. Fixes rhbz#2283578.
* Mon May 27 2024 Mikel Olasagasti Uranga <mikel@olasagasti.info> - 2024.05.26-1
- Update to 2024.05.26. Fixes rhbz#2274266.
* Wed Apr 10 2024 Maxwell G <maxwell@gtmx.me> - 2024.04.09-1
- Update to 2024.04.09.
* Wed Mar 13 2024 Maxwell G <maxwell@gtmx.me> - 2024.03.10-1
- Update to 2024.03.10. Fixes rhbz#2268944.
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2023.12.30-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jan 3 2024 Maxwell G <maxwell@gtmx.me> - 2023.12.30-1
- Update to 2023.12.30. Fixes rhbz#2244200.
* Wed Oct 11 2023 Marcus Müller <marcus_fedora@baseband.digital> - 2023.10.07-1
- Update to 2023.10.07.
- Fixes rhbz#2243274
- Fixes rhbz#2240465
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2023.07.06-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jul 07 2023 Maxwell G <maxwell@gtmx.me> - 2023.07.06-1
- Update to 2023.07.06.
- Mitigates CVE-2023-35934 / GHSA-v8mc-9377-rwjj
* Wed Jul 05 2023 Maxwell G <maxwell@gtmx.me> - 2023.06.22-1
- Update to 2023.06.22. Fixes rhbz#2216612.
* Thu Jun 22 2023 Maxwell G <maxwell@gtmx.me> - 2023.06.21-1
- Update to 2023.06.21. Fixes rhbz#2216612.
* Thu Jun 15 2023 Python Maint <python-maint@redhat.com> - 2023.03.04-2
- Rebuilt for Python 3.12
* Mon Mar 06 2023 Maxwell G <maxwell@gtmx.me> - 2023.03.04-1
- Update to 2023.03.04. Fixes rhbz#2175395.
* Fri Feb 17 2023 Maxwell G <maxwell@gtmx.me> - 2023.02.17-1
- Update to 2023.02.17.
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2023.01.06-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Jan 10 2023 Maxwell G <gotmax@e.email> - 2023.01.06-1
- Update to 2023.01.06. Fixes rhbz#2157879.
* Mon Nov 14 2022 Maxwell G <gotmax@e.email> - 2022.11.11-1
- Update to 2022.11.11. Fixes rhbz#2142417.
* Sat Oct 08 2022 Maxwell G <gotmax@e.email> - 2022.10.04-1
- Update to 2022.10.04. Fixes rhbz#2132726.
* Fri Sep 02 2022 Maxwell G <gotmax@e.email> - 2022.09.01-1
- Update to 2022.09.01. Fixes rhbz#2123442.
* Fri Aug 19 2022 Maxwell G <gotmax@e.email> - 2022.08.19-1
- Update to 2022.08.19. Fixes rhbz#2118224.
* Tue Aug 09 2022 Maxwell G <gotmax@e.email> - 2022.08.08-1
- Update to 2022.08.08.
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2022.06.29-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon Jul 04 2022 Maxwell G <gotmax@e.email> - 2022.06.29-2
- Fix shell completions subpackages
* Mon Jul 04 2022 Maxwell G <gotmax@e.email> - 2022.06.29-1
- Update to 2022.06.29. Fixes rhbz#2102238.
* Thu Jun 23 2022 Maxwell G <gotmax@e.email> - 2022.06.22.1-1
- Update to 2022.06.22.1. Fixes rhbz#2100019.
* Fri Jun 17 2022 Maxwell G <gotmax@e.email> - 2022.05.18-3
- Fix gating configuration
* Thu Jun 16 2022 Python Maint <python-maint@redhat.com> - 2022.05.18-2
- Rebuilt for Python 3.11
* Tue May 24 2022 Maxwell G <gotmax@e.email> - 2022.05.18-1
- Update to 2022.05.18. Fixes rhbz#2088564.
* Fri Apr 08 2022 Maxwell G <gotmax@e.email> - 2022.04.08-1
- Update to 2022.04.08. Fixes rhbz#2073359.
* Sat Mar 12 2022 Artem Polishchuk <ego.cordatus@gmail.com> - 2022.03.08.1-2
- build: Make ffmpeg and ffprobe conditional deps for >= f36 only
* Thu Mar 10 2022 Maxwell G <gotmax@e.email> - 2022.03.08.1-1
- Update to 2022.03.08.1. Fixes rhbz#2061973.
* Mon Mar 07 2022 Maxwell G <gotmax@e.email> - 2022.02.04-2
- Add weak dependency on ffmpeg and ffprobe.
- Make shell-completion subpackages optional again.
* Fri Feb 04 2022 Maxwell G <gotmax@e.email> - 2022.2.4-1
- Update to 2022.2.4. Fixes rhbz#2050497.
* Mon Jan 24 2022 Maxwell G <gotmax@e.email> - 2022.01.21-1
- Update to 2022.01.21.
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2021.12.27-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Dec 27 2021 Maxwell G <gotmax@e.email> - 2021.12.27-1
- Update to 2021.12.27.
* Sun Dec 26 2021 Maxwell G <gotmax@e.email> - 2021.12.25-1
- Update to 2021.12.25.
* Wed Dec 01 2021 Maxwell G <gotmax@e.email> - 2021.12.01-1
- Update to 2021.12.01.
* Tue Nov 9 2021 Maxwell G <gotmax@e.email> - 2021.11.10.1-1
- Update to 2021.11.10.1.
* Tue Nov 9 2021 Maxwell G <gotmax@e.email> - 2021.10.22-2
- Skip installing unnecessary tox dependencies
- Fix shell-completion subpackages
- Only package README.md; don't generate extra README.txt
* Sat Oct 23 2021 Maxwell G <gotmax@e.email> - 2021.10.22-1
- Update to 2021.10.22
* Sun Oct 10 2021 Maxwell G <gotmax@e.email> - 2021.10.10-1
- Mark LICENSE with %%license instead of %%doc
- Update to 2021.10.10
- Fix non-executable-script rpmlint error
- Use `python3dist(NAME)` for dependencies
- Fix rpm-buildroot-usage rpmlint error
* Sat Oct 9 2021 Maxwell G <gotmax@e.email> - 2021.10.09-1
- Initial package
%autochangelog