Add ENOTDIR handling to Config.from_file with silent=True
This commit is contained in:
parent
3a9d54f3da
commit
14c8008543
2 changed files with 18 additions and 1 deletions
|
|
@ -293,7 +293,7 @@ class Config(dict): # type: ignore[type-arg]
|
||||||
with open(filename, "r" if text else "rb") as f:
|
with open(filename, "r" if text else "rb") as f:
|
||||||
obj = load(f)
|
obj = load(f)
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
if silent and e.errno in (errno.ENOENT, errno.EISDIR):
|
if silent and e.errno in (errno.ENOENT, errno.EISDIR, errno.ENOTDIR):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
e.strerror = f"Unable to load configuration file ({e.strerror})"
|
e.strerror = f"Unable to load configuration file ({e.strerror})"
|
||||||
|
|
|
||||||
|
|
@ -248,3 +248,20 @@ def test_from_pyfile_weird_encoding(tmp_path, encoding):
|
||||||
app.config.from_pyfile(os.fspath(f))
|
app.config.from_pyfile(os.fspath(f))
|
||||||
value = app.config["TEST_VALUE"]
|
value = app.config["TEST_VALUE"]
|
||||||
assert value == "föö"
|
assert value == "föö"
|
||||||
|
|
||||||
|
|
||||||
|
def test_config_from_file_enotdir_silent(tmp_path):
|
||||||
|
"""Test that from_file with silent=True handles ENOTDIR error.
|
||||||
|
When a path component is a regular file instead of a directory,
|
||||||
|
from_file should return False instead of raising OSError.
|
||||||
|
"""
|
||||||
|
# Create a file where a directory is expected
|
||||||
|
config_file = tmp_path / "not_a_dir"
|
||||||
|
config_file.write_text("This is a file, not a directory")
|
||||||
|
|
||||||
|
# Try to load a config file through the non-directory path
|
||||||
|
app = flask.Flask(__name__)
|
||||||
|
result = app.config.from_file(
|
||||||
|
os.path.join(config_file, "config.json"), load=json.load, silent=True
|
||||||
|
)
|
||||||
|
assert result is False
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue