Merge pull request #3174 from icreatedanaccount/master

Allow mode='rt' on open_resource() helper
This commit is contained in:
David Lord 2019-05-17 13:32:40 -07:00 committed by GitHub
commit 8ef56c8c6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 2 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

@ -18,6 +18,7 @@ extensions = [
"sphinx.ext.intersphinx",
"sphinxcontrib.log_cabinet",
"pallets_sphinx_themes",
"sphinx_issues",
]
intersphinx_mapping = {
"python": ("https://docs.python.org/3/", None),
@ -29,6 +30,7 @@ intersphinx_mapping = {
"wtforms": ("https://wtforms.readthedocs.io/en/stable/", None),
"blinker": ("https://pythonhosted.org/blinker/", None),
}
issues_github_path = "pallets/flask"
# HTML -----------------------------------------------------------------

View file

@ -1,3 +1,4 @@
Sphinx~=1.8.0
Pallets-Sphinx-Themes~=1.1.0
sphinxcontrib-log-cabinet~=1.0.0
sphinx-issues~=1.2.0

View file

@ -1053,10 +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 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

@ -1014,6 +1014,7 @@ class TestSafeJoin(object):
print(flask.safe_join(*args))
class TestHelpers(object):
@pytest.mark.parametrize(
"debug, expected_flag, expected_default_flag",
@ -1060,3 +1061,17 @@ class TestHelpers(object):
assert rv.status_code == 200
assert rv.data == b"Hello"
assert rv.mimetype == "text/html"
@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", "r+"))
def test_open_resource_exceptions(self, mode):
app = flask.Flask(__name__)
with pytest.raises(ValueError):
app.open_resource("static/index.html", mode)