Просмотр исходного кода

[utils] `locked_file`: Fix for PyPy on Windows

pukkandan 2 лет назад
Родитель
Сommit
2cb1982043
3 измененных файлов с 14 добавлено и 6 удалено
  1. 6 3
      .github/workflows/core.yml
  2. 6 2
      .github/workflows/download.yml
  3. 2 1
      yt_dlp/utils.py

+ 6 - 3
.github/workflows/core.yml

@@ -10,12 +10,15 @@ jobs:
       matrix:
       matrix:
         os: [ubuntu-latest]
         os: [ubuntu-latest]
         # CPython 3.9 is in quick-test
         # 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]
         run-tests-ext: [sh]
         include:
         include:
-        # atleast one of the tests must be in windows
+        # atleast one of each CPython/PyPy tests must be in windows
         - os: windows-latest
         - 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
           run-tests-ext: bat
     steps:
     steps:
     - uses: actions/checkout@v2
     - uses: actions/checkout@v2

+ 6 - 2
.github/workflows/download.yml

@@ -9,11 +9,15 @@ jobs:
       fail-fast: true
       fail-fast: true
       matrix:
       matrix:
         os: [ubuntu-latest]
         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]
         run-tests-ext: [sh]
         include:
         include:
+        # atleast one of each CPython/PyPy tests must be in windows
         - os: windows-latest
         - 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
           run-tests-ext: bat
     steps:
     steps:
     - uses: actions/checkout@v2
     - uses: actions/checkout@v2

+ 2 - 1
yt_dlp/utils.py

@@ -2003,7 +2003,8 @@ if sys.platform == 'win32':
         if not LockFileEx(msvcrt.get_osfhandle(f.fileno()),
         if not LockFileEx(msvcrt.get_osfhandle(f.fileno()),
                           (0x2 if exclusive else 0x0) | (0x0 if block else 0x1),
                           (0x2 if exclusive else 0x0) | (0x0 if block else 0x1),
                           0, whole_low, whole_high, f._lock_file_overlapped_p):
                           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):
     def _unlock_file(f):
         assert f._lock_file_overlapped_p
         assert f._lock_file_overlapped_p