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 '