mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
This commit is contained in:
parent
cdb8388cad
commit
f8583acb53
3 changed files with 25 additions and 14 deletions
|
@ -4,6 +4,7 @@ import codecs
|
|||
import inspect
|
||||
import os
|
||||
import shutil
|
||||
import stat
|
||||
import sys
|
||||
import textwrap
|
||||
import tempfile
|
||||
|
@ -46,14 +47,13 @@ class TempDirMixin(object):
|
|||
|
||||
def tearDown(self):
|
||||
os.chdir(self.old_dir)
|
||||
while True:
|
||||
try:
|
||||
shutil.rmtree(self.temp_dir)
|
||||
except WindowsError:
|
||||
continue
|
||||
else:
|
||||
break
|
||||
shutil.rmtree(self.temp_dir, True)
|
||||
|
||||
def create_readonly_file(self, filename):
|
||||
file_path = os.path.join(self.temp_dir, filename)
|
||||
with open(file_path, 'w') as file:
|
||||
file.write(filename)
|
||||
os.chmod(file_path, stat.S_IREAD)
|
||||
|
||||
class Sig(object):
|
||||
|
||||
|
@ -1451,17 +1451,19 @@ class TestFileTypeR(TempDirMixin, ParserTestCase):
|
|||
file = open(os.path.join(self.temp_dir, file_name), 'w')
|
||||
file.write(file_name)
|
||||
file.close()
|
||||
self.create_readonly_file('readonly')
|
||||
|
||||
argument_signatures = [
|
||||
Sig('-x', type=argparse.FileType()),
|
||||
Sig('spam', type=argparse.FileType('r')),
|
||||
]
|
||||
failures = ['-x', '-x bar']
|
||||
failures = ['-x', '-x bar', 'non-existent-file.txt']
|
||||
successes = [
|
||||
('foo', NS(x=None, spam=RFile('foo'))),
|
||||
('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))),
|
||||
('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))),
|
||||
('-x - -', NS(x=sys.stdin, spam=sys.stdin)),
|
||||
('readonly', NS(x=None, spam=RFile('readonly'))),
|
||||
]
|
||||
|
||||
|
||||
|
@ -1510,11 +1512,16 @@ class WFile(object):
|
|||
class TestFileTypeW(TempDirMixin, ParserTestCase):
|
||||
"""Test the FileType option/argument type for writing files"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestFileTypeW, self).setUp()
|
||||
self.create_readonly_file('readonly')
|
||||
|
||||
argument_signatures = [
|
||||
Sig('-x', type=argparse.FileType('w')),
|
||||
Sig('spam', type=argparse.FileType('w')),
|
||||
]
|
||||
failures = ['-x', '-x bar']
|
||||
failures = ['-x', '-x bar', 'readonly']
|
||||
successes = [
|
||||
('foo', NS(x=None, spam=WFile('foo'))),
|
||||
('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue