From a25e9f3c84a34d43f78a4e5a6f6c2e98e2a0ade3 Mon Sep 17 00:00:00 2001 From: dirkf Date: Tue, 25 Jul 2023 00:17:15 +0100 Subject: [PATCH] [compat] Use `compat_open()` --- devscripts/make_readme.py | 4 +++- test/helper.py | 6 +++--- test/test_InfoExtractor.py | 18 +++++++++--------- test/test_YoutubeDL.py | 7 ++++--- test/test_download.py | 6 +++--- test/test_swfinterp.py | 10 ++++++---- test/test_unicode_literals.py | 12 +++++++----- test/test_write_annotations.py | 5 ++--- test/test_youtube_signature.py | 9 ++++++--- youtube_dl/YoutubeDL.py | 19 +++++++------------ youtube_dl/cache.py | 8 +++++--- youtube_dl/extractor/common.py | 1 + youtube_dl/extractor/openload.py | 1 + youtube_dl/postprocessor/embedthumbnail.py | 2 ++ youtube_dl/postprocessor/ffmpeg.py | 8 ++++---- youtube_dl/update.py | 7 +++++-- 16 files changed, 68 insertions(+), 55 deletions(-) diff --git a/devscripts/make_readme.py b/devscripts/make_readme.py index 8fbce0796..c5d5dd4f1 100755 --- a/devscripts/make_readme.py +++ b/devscripts/make_readme.py @@ -4,6 +4,8 @@ import io import sys import re +from youtube_dl.compat import compat_open as open + README_FILE = 'README.md' helptext = sys.stdin.read() @@ -20,7 +22,7 @@ options = helptext[helptext.index(' General Options:') + 19:] options = re.sub(r'(?m)^ (\w.+)$', r'## \1', options) options = '# OPTIONS\n' + options + '\n' -with io.open(README_FILE, 'w', encoding='utf-8') as f: +with open(README_FILE, 'w', encoding='utf-8') as f: f.write(header) f.write(options) f.write(footer) diff --git a/test/helper.py b/test/helper.py index aa99001b2..fc55c6b46 100644 --- a/test/helper.py +++ b/test/helper.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals import errno -import io import hashlib import json import os.path @@ -14,6 +13,7 @@ import unittest import youtube_dl.extractor from youtube_dl import YoutubeDL from youtube_dl.compat import ( + compat_open as open, compat_os_name, compat_str, ) @@ -29,10 +29,10 @@ def get_params(override=None): "parameters.json") LOCAL_PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "local_parameters.json") - with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: + with open(PARAMETERS_FILE, encoding='utf-8') as pf: parameters = json.load(pf) if os.path.exists(LOCAL_PARAMETERS_FILE): - with io.open(LOCAL_PARAMETERS_FILE, encoding='utf-8') as pf: + with open(LOCAL_PARAMETERS_FILE, encoding='utf-8') as pf: parameters.update(json.load(pf)) if override: parameters.update(override) diff --git a/test/test_InfoExtractor.py b/test/test_InfoExtractor.py index 34773fbd0..3f96645de 100644 --- a/test/test_InfoExtractor.py +++ b/test/test_InfoExtractor.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals # Allow direct execution -import io import os import sys import unittest @@ -21,6 +20,7 @@ from test.helper import ( from youtube_dl.compat import ( compat_etree_fromstring, compat_http_server, + compat_open as open, ) from youtube_dl.extractor.common import InfoExtractor from youtube_dl.extractor import ( @@ -902,8 +902,8 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/ ] for m3u8_file, m3u8_url, expected_formats in _TEST_CASES: - with io.open('./test/testdata/m3u8/%s.m3u8' % m3u8_file, - mode='r', encoding='utf-8') as f: + with open('./test/testdata/m3u8/%s.m3u8' % m3u8_file, + mode='r', encoding='utf-8') as f: formats = self.ie._parse_m3u8_formats( f.read(), m3u8_url, ext='mp4') self.ie._sort_formats(formats) @@ -1127,8 +1127,8 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/ ] for mpd_file, mpd_url, mpd_base_url, expected_formats in _TEST_CASES: - with io.open('./test/testdata/mpd/%s.mpd' % mpd_file, - mode='r', encoding='utf-8') as f: + with open('./test/testdata/mpd/%s.mpd' % mpd_file, + mode='r', encoding='utf-8') as f: formats = self.ie._parse_mpd_formats( compat_etree_fromstring(f.read().encode('utf-8')), mpd_base_url=mpd_base_url, mpd_url=mpd_url) @@ -1154,8 +1154,8 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/ ] for f4m_file, f4m_url, expected_formats in _TEST_CASES: - with io.open('./test/testdata/f4m/%s.f4m' % f4m_file, - mode='r', encoding='utf-8') as f: + with open('./test/testdata/f4m/%s.f4m' % f4m_file, + mode='r', encoding='utf-8') as f: formats = self.ie._parse_f4m_formats( compat_etree_fromstring(f.read().encode('utf-8')), f4m_url, None) @@ -1202,8 +1202,8 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/ ] for xspf_file, xspf_url, expected_entries in _TEST_CASES: - with io.open('./test/testdata/xspf/%s.xspf' % xspf_file, - mode='r', encoding='utf-8') as f: + with open('./test/testdata/xspf/%s.xspf' % xspf_file, + mode='r', encoding='utf-8') as f: entries = self.ie._parse_xspf( compat_etree_fromstring(f.read().encode('utf-8')), xspf_file, xspf_url=xspf_url, xspf_base_url=xspf_url) diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 6cf555827..d994682b2 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -22,6 +22,7 @@ from youtube_dl.compat import ( compat_http_cookiejar_Cookie, compat_http_cookies_SimpleCookie, compat_kwargs, + compat_open as open, compat_str, compat_urllib_error, ) @@ -701,12 +702,12 @@ class TestYoutubeDL(unittest.TestCase): class SimplePP(PostProcessor): def run(self, info): - with open(audiofile, 'wt') as f: + with open(audiofile, 'w') as f: f.write('EXAMPLE') return [info['filepath']], info def run_pp(params, PP): - with open(filename, 'wt') as f: + with open(filename, 'w') as f: f.write('EXAMPLE') ydl = YoutubeDL(params) ydl.add_post_processor(PP()) @@ -725,7 +726,7 @@ class TestYoutubeDL(unittest.TestCase): class ModifierPP(PostProcessor): def run(self, info): - with open(info['filepath'], 'wt') as f: + with open(info['filepath'], 'w') as f: f.write('MODIFIED') return [], info diff --git a/test/test_download.py b/test/test_download.py index d50008307..e0bc8cb95 100644 --- a/test/test_download.py +++ b/test/test_download.py @@ -20,15 +20,15 @@ from test.helper import ( import hashlib -import io import json import socket import youtube_dl.YoutubeDL from youtube_dl.compat import ( compat_http_client, - compat_urllib_error, compat_HTTPError, + compat_open as open, + compat_urllib_error, ) from youtube_dl.utils import ( DownloadError, @@ -245,7 +245,7 @@ def generator(test_case, tname): self.assertTrue( os.path.exists(info_json_fn), 'Missing info file %s' % info_json_fn) - with io.open(info_json_fn, encoding='utf-8') as infof: + with open(info_json_fn, encoding='utf-8') as infof: info_dict = json.load(infof) expect_info_dict(self, info_dict, tc.get('info_dict', {})) finally: diff --git a/test/test_swfinterp.py b/test/test_swfinterp.py index 9f18055e6..7c282ee00 100644 --- a/test/test_swfinterp.py +++ b/test/test_swfinterp.py @@ -5,16 +5,18 @@ from __future__ import unicode_literals import os import sys import unittest -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +dirn = os.path.dirname + +sys.path.insert(0, dirn(dirn(os.path.abspath(__file__)))) import errno -import io import json import re import subprocess from youtube_dl.swfinterp import SWFInterpreter +from youtube_dl.compat import compat_open as open TEST_DIR = os.path.join( @@ -43,7 +45,7 @@ def _make_testfunc(testfile): '-static-link-runtime-shared-libraries', as_file]) except OSError as ose: if ose.errno == errno.ENOENT: - print('mxmlc not found! Skipping test.') + self.skipTest('mxmlc not found!') return raise @@ -51,7 +53,7 @@ def _make_testfunc(testfile): swf_content = swf_f.read() swfi = SWFInterpreter(swf_content) - with io.open(as_file, 'r', encoding='utf-8') as as_f: + with open(as_file, 'r', encoding='utf-8') as as_f: as_content = as_f.read() def _find_spec(key): diff --git a/test/test_unicode_literals.py b/test/test_unicode_literals.py index c7c2252f5..0c83f2a0c 100644 --- a/test/test_unicode_literals.py +++ b/test/test_unicode_literals.py @@ -2,14 +2,15 @@ from __future__ import unicode_literals # Allow direct execution import os +import re import sys import unittest -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -import io -import re +dirn = os.path.dirname -rootDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +rootDir = dirn(dirn(os.path.abspath(__file__))) + +sys.path.insert(0, rootDir) IGNORED_FILES = [ 'setup.py', # http://bugs.python.org/issue13943 @@ -24,6 +25,7 @@ IGNORED_DIRS = [ ] from test.helper import assertRegexpMatches +from youtube_dl.compat import compat_open as open class TestUnicodeLiterals(unittest.TestCase): @@ -41,7 +43,7 @@ class TestUnicodeLiterals(unittest.TestCase): continue fn = os.path.join(dirpath, basename) - with io.open(fn, encoding='utf-8') as inf: + with open(fn, encoding='utf-8') as inf: code = inf.read() if "'" not in code and '"' not in code: diff --git a/test/test_write_annotations.py b/test/test_write_annotations.py index 41abdfe3b..68e0a391d 100644 --- a/test/test_write_annotations.py +++ b/test/test_write_annotations.py @@ -11,12 +11,11 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from test.helper import get_params, try_rm -import io - import xml.etree.ElementTree import youtube_dl.YoutubeDL import youtube_dl.extractor +from youtube_dl.compat import compat_open as open class YoutubeDL(youtube_dl.YoutubeDL): @@ -51,7 +50,7 @@ class TestAnnotations(unittest.TestCase): ydl.download([TEST_ID]) self.assertTrue(os.path.exists(ANNOTATIONS_FILE)) annoxml = None - with io.open(ANNOTATIONS_FILE, 'r', encoding='utf-8') as annof: + with open(ANNOTATIONS_FILE, 'r', encoding='utf-8') as annof: annoxml = xml.etree.ElementTree.parse(annof) self.assertTrue(annoxml is not None, 'Failed to parse annotations XML') root = annoxml.getroot() diff --git a/test/test_youtube_signature.py b/test/test_youtube_signature.py index 5dcabaf95..f45dfec7c 100644 --- a/test/test_youtube_signature.py +++ b/test/test_youtube_signature.py @@ -8,11 +8,14 @@ import sys import unittest sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -import io import re import string -from youtube_dl.compat import compat_str, compat_urlretrieve +from youtube_dl.compat import ( + compat_open as open, + compat_str, + compat_urlretrieve, +) from test.helper import FakeYDL from youtube_dl.extractor import YoutubeIE @@ -208,7 +211,7 @@ def t_factory(name, sig_func, url_pattern): if not os.path.exists(fn): compat_urlretrieve(url, fn) - with io.open(fn, encoding='utf-8') as testf: + with open(fn, encoding='utf-8') as testf: jscode = testf.read() self.assertEqual(sig_func(jscode, sig_input), expected_sig) diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 98d080f43..6a12f91e4 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -4,11 +4,9 @@ from __future__ import absolute_import, unicode_literals import collections -import contextlib import copy import datetime import errno -import fileinput import io import itertools import json @@ -45,6 +43,7 @@ from .compat import ( compat_kwargs, compat_map as map, compat_numeric_types, + compat_open as open, compat_os_name, compat_str, compat_tokenize_tokenize, @@ -1977,7 +1976,7 @@ class YoutubeDL(object): else: try: self.to_screen('[info] Writing video description to: ' + descfn) - with io.open(encodeFilename(descfn), 'w', encoding='utf-8') as descfile: + with open(encodeFilename(descfn), 'w', encoding='utf-8') as descfile: descfile.write(info_dict['description']) except (OSError, IOError): self.report_error('Cannot write description file ' + descfn) @@ -1992,7 +1991,7 @@ class YoutubeDL(object): else: try: self.to_screen('[info] Writing video annotations to: ' + annofn) - with io.open(encodeFilename(annofn), 'w', encoding='utf-8') as annofile: + with open(encodeFilename(annofn), 'w', encoding='utf-8') as annofile: annofile.write(info_dict['annotations']) except (KeyError, TypeError): self.report_warning('There are no annotations to write.') @@ -2019,7 +2018,7 @@ class YoutubeDL(object): try: # Use newline='' to prevent conversion of newline characters # See https://github.com/ytdl-org/youtube-dl/issues/10268 - with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile: + with open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile: subfile.write(sub_info['data']) except (OSError, IOError): self.report_error('Cannot write subtitles file ' + sub_filename) @@ -2028,7 +2027,7 @@ class YoutubeDL(object): try: sub_data = ie._request_webpage( sub_info['url'], info_dict['id'], note=False).read() - with io.open(encodeFilename(sub_filename), 'wb') as subfile: + with open(encodeFilename(sub_filename), 'wb') as subfile: subfile.write(sub_data) except (ExtractorError, IOError, OSError, ValueError) as err: self.report_warning('Unable to download subtitle for "%s": %s' % @@ -2232,12 +2231,8 @@ class YoutubeDL(object): return self._download_retcode def download_with_info_file(self, info_filename): - with contextlib.closing(fileinput.FileInput( - [info_filename], mode='r', - openhook=fileinput.hook_encoded('utf-8'))) as f: - # FileInput doesn't have a read method, we can't call json.load - # TODO: let's use io.open(), then - info = self.filter_requested_info(json.loads('\n'.join(f))) + with open(info_filename, encoding='utf-8') as f: + info = self.filter_requested_info(json.load(f)) try: self.process_ie_result(info, download=True) except DownloadError: diff --git a/youtube_dl/cache.py b/youtube_dl/cache.py index 4822439d0..54123da0e 100644 --- a/youtube_dl/cache.py +++ b/youtube_dl/cache.py @@ -1,14 +1,16 @@ from __future__ import unicode_literals import errno -import io import json import os import re import shutil import traceback -from .compat import compat_getenv +from .compat import ( + compat_getenv, + compat_open as open, +) from .utils import ( error_to_compat_str, expand_path, @@ -83,7 +85,7 @@ class Cache(object): cache_fn = self._get_cache_fn(section, key, dtype) try: try: - with io.open(cache_fn, 'r', encoding='utf-8') as cachef: + with open(cache_fn, 'r', encoding='utf-8') as cachef: return self._validate(json.load(cachef), min_ver) except ValueError: try: diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 7f416d312..0eca9f844 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -25,6 +25,7 @@ from ..compat import ( compat_integer_types, compat_http_client, compat_map as map, + compat_open as open, compat_os_name, compat_str, compat_urllib_error, diff --git a/youtube_dl/extractor/openload.py b/youtube_dl/extractor/openload.py index b05d60435..45b1add73 100644 --- a/youtube_dl/extractor/openload.py +++ b/youtube_dl/extractor/openload.py @@ -7,6 +7,7 @@ import subprocess import tempfile from ..compat import ( + compat_open as open, compat_urlparse, compat_kwargs, ) diff --git a/youtube_dl/postprocessor/embedthumbnail.py b/youtube_dl/postprocessor/embedthumbnail.py index 5e7b6e2df..b6c60e127 100644 --- a/youtube_dl/postprocessor/embedthumbnail.py +++ b/youtube_dl/postprocessor/embedthumbnail.py @@ -18,6 +18,8 @@ from ..utils import ( shell_quote, ) +from ..compat import compat_open as open + class EmbedThumbnailPPError(PostProcessingError): pass diff --git a/youtube_dl/postprocessor/ffmpeg.py b/youtube_dl/postprocessor/ffmpeg.py index 8c29c8d59..801160e6c 100644 --- a/youtube_dl/postprocessor/ffmpeg.py +++ b/youtube_dl/postprocessor/ffmpeg.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -import io import os import subprocess import time @@ -9,6 +8,7 @@ import re from .common import AudioConversionError, PostProcessor +from ..compat import compat_open as open from ..utils import ( encodeArgument, encodeFilename, @@ -493,7 +493,7 @@ class FFmpegMetadataPP(FFmpegPostProcessor): chapters = info.get('chapters', []) if chapters: metadata_filename = replace_extension(filename, 'meta') - with io.open(metadata_filename, 'wt', encoding='utf-8') as f: + with open(metadata_filename, 'w', encoding='utf-8') as f: def ffmpeg_escape(text): return re.sub(r'(=|;|#|\\|\n)', r'\\\1', text) @@ -636,7 +636,7 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): with open(dfxp_file, 'rb') as f: srt_data = dfxp2srt(f.read()) - with io.open(srt_file, 'wt', encoding='utf-8') as f: + with open(srt_file, 'w', encoding='utf-8') as f: f.write(srt_data) old_file = srt_file @@ -652,7 +652,7 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): self.run_ffmpeg(old_file, new_file, ['-f', new_format]) - with io.open(new_file, 'rt', encoding='utf-8') as f: + with open(new_file, 'r', encoding='utf-8') as f: subs[lang] = { 'ext': new_ext, 'data': f.read(), diff --git a/youtube_dl/update.py b/youtube_dl/update.py index 84c964617..b5f26e4a9 100644 --- a/youtube_dl/update.py +++ b/youtube_dl/update.py @@ -9,7 +9,10 @@ import subprocess import sys from zipimport import zipimporter -from .compat import compat_realpath +from .compat import ( + compat_open as open, + compat_realpath, +) from .utils import encode_compat_str from .version import __version__ @@ -127,7 +130,7 @@ def update_self(to_screen, verbose, opener): try: bat = os.path.join(directory, 'youtube-dl-updater.bat') - with io.open(bat, 'w') as batfile: + with open(bat, 'w') as batfile: batfile.write(''' @echo off echo Waiting for file handle to be closed ...