From 2cb19820430aa8f7fe8cef11203d9f98388ef8ab Mon Sep 17 00:00:00 2001 From: pukkandan Date: Mon, 13 Jun 2022 17:27:31 +0530 Subject: [PATCH] [utils] `locked_file`: Fix for PyPy on Windows --- .github/workflows/core.yml | 9 ++++++--- .github/workflows/download.yml | 8 ++++++-- yt_dlp/utils.py | 3 ++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 78a75cd1c..66e8ced53 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -10,12 +10,15 @@ jobs: matrix: os: [ubuntu-latest] # CPython 3.9 is in quick-test - python-version: ['3.6', '3.7', '3.10', 3.11-dev, pypy-3.6, pypy-3.7, pypy-3.8, pypy-3.9] + python-version: ['3.6', '3.7', '3.10', 3.11-dev, pypy-3.6, pypy-3.7, pypy-3.8] run-tests-ext: [sh] include: - # atleast one of the tests must be in windows + # atleast one of each CPython/PyPy tests must be in windows - os: windows-latest - python-version: 3.8 + python-version: '3.8' + run-tests-ext: bat + - os: windows-latest + python-version: pypy-3.9 run-tests-ext: bat steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/download.yml b/.github/workflows/download.yml index 3b696549a..ac48e5805 100644 --- a/.github/workflows/download.yml +++ b/.github/workflows/download.yml @@ -9,11 +9,15 @@ jobs: fail-fast: true matrix: os: [ubuntu-latest] - python-version: ['3.6', '3.7', '3.9', '3.10', 3.11-dev, pypy-3.6, pypy-3.7, pypy-3.8, pypy-3.9] + python-version: ['3.6', '3.7', '3.9', '3.10', 3.11-dev, pypy-3.6, pypy-3.7, pypy-3.8] run-tests-ext: [sh] include: + # atleast one of each CPython/PyPy tests must be in windows - os: windows-latest - python-version: 3.8 + python-version: '3.8' + run-tests-ext: bat + - os: windows-latest + python-version: pypy-3.9 run-tests-ext: bat steps: - uses: actions/checkout@v2 diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py index e6e6d2759..11ef7744c 100644 --- a/yt_dlp/utils.py +++ b/yt_dlp/utils.py @@ -2003,7 +2003,8 @@ if sys.platform == 'win32': if not LockFileEx(msvcrt.get_osfhandle(f.fileno()), (0x2 if exclusive else 0x0) | (0x0 if block else 0x1), 0, whole_low, whole_high, f._lock_file_overlapped_p): - raise BlockingIOError('Locking file failed: %r' % ctypes.FormatError()) + # NB: No argument form of "ctypes.FormatError" does not work on PyPy + raise BlockingIOError(f'Locking file failed: {ctypes.FormatError(ctypes.GetLastError())!r}') def _unlock_file(f): assert f._lock_file_overlapped_p