clean up open_resource and tests

This commit is contained in:
David Lord 2019-05-17 13:20:31 -07:00
parent ad709be46e
commit 6f703a564c
No known key found for this signature in database
GPG key ID: 7A1C87E3F5BC42A8
3 changed files with 13 additions and 21 deletions

View file

@ -20,6 +20,8 @@ Unreleased
(`#3059`_)
- :func:`send_file` supports :class:`~io.BytesIO` partial content.
(`#2957`_)
- :func:`open_resource` accepts the "rt" file mode. This still does
the same thing as "r". (:issue:`3163`)
.. _#2935: https://github.com/pallets/flask/issues/2935
.. _#2957: https://github.com/pallets/flask/issues/2957

View file

@ -1053,12 +1053,12 @@ class _PackageBoundObject(object):
:param resource: the name of the resource. To access resources within
subfolders use forward slashes as separator.
:param mode: resource file opening mode, default is 'rb'.
:param mode: Open file in this mode. Only reading is supported,
valid values are "r" (or "rt") and "rb".
"""
if mode == 'rt':
mode = 'r'
if mode not in ("r", "rb"):
if mode not in {"r", "rt", "rb"}:
raise ValueError("Resources can only be opened for reading")
return open(os.path.join(self.root_path, resource), mode)

View file

@ -1062,26 +1062,16 @@ class TestHelpers(object):
assert rv.data == b"Hello"
assert rv.mimetype == "text/html"
@pytest.mark.parametrize('mode', [
'r',
'rb',
'rt'
])
@pytest.mark.parametrize("mode", ("r", "rb", "rt"))
def test_open_resource(self, mode):
app = flask.Flask(__name__)
with app.open_resource('static/index.html', mode) as f:
assert '<h1>Hello World!</h1>' in str(f.read())
@pytest.mark.parametrize('mode', [
'w',
'x',
'a',
'b',
't',
'+'
])
with app.open_resource("static/index.html", mode) as f:
assert "<h1>Hello World!</h1>" in str(f.read())
@pytest.mark.parametrize("mode", ("w", "x", "a", "r+"))
def test_open_resource_exceptions(self, mode):
app = flask.Flask(__name__)
with pytest.raises(ValueError):
app.open_resource('static/index.html', mode)
with pytest.raises(ValueError):
app.open_resource("static/index.html", mode)