From 6f703a564c97b034eb0e98419595b7fa32d3562a Mon Sep 17 00:00:00 2001 From: David Lord Date: Fri, 17 May 2019 13:20:31 -0700 Subject: [PATCH] clean up open_resource and tests --- CHANGES.rst | 2 ++ flask/helpers.py | 8 ++++---- tests/test_helpers.py | 24 +++++++----------------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a383f3f4..930fd7e8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -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 diff --git a/flask/helpers.py b/flask/helpers.py index 78f4b37c..c5e85a02 100644 --- a/flask/helpers.py +++ b/flask/helpers.py @@ -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) diff --git a/tests/test_helpers.py b/tests/test_helpers.py index e7730da0..cddc7517 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -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 '

Hello World!

' in str(f.read()) - @pytest.mark.parametrize('mode', [ - 'w', - 'x', - 'a', - 'b', - 't', - '+' - ]) + with app.open_resource("static/index.html", mode) as f: + assert "

Hello World!

" 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)