Merge pull request #3174 from icreatedanaccount/master
Allow mode='rt' on open_resource() helper
This commit is contained in:
commit
8ef56c8c6d
5 changed files with 24 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 -----------------------------------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue