Skip to content

Commit

Permalink
api: open: Raise ValueError if rev is used in wrong mode.
Browse files Browse the repository at this point in the history
Closes iterative#7405

Co-authored-by: Peter Rowlands (변기호) <[email protected]>
  • Loading branch information
daavoo and pmrowla committed Jun 15, 2022
1 parent 15e10a1 commit 1663b97
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
4 changes: 4 additions & 0 deletions dvc/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ def open( # noqa, pylint: disable=redefined-builtin
mode (str, optional): Specifies the mode in which the file is opened.
Defaults to "r" (read).
Mirrors the namesake parameter in builtin `open()`_.
Only reading `mode` is supported.
encoding(str, optional): `Codec`_ used to decode the file contents.
Defaults to None.
This should only be used in text mode.
Expand All @@ -104,6 +105,7 @@ def open( # noqa, pylint: disable=redefined-builtin
Raises:
AttributeError: If this method is not used as a context manager.
ValueError: If non-read `mode` is used.
Examples:
Expand Down Expand Up @@ -178,6 +180,8 @@ def open( # noqa, pylint: disable=redefined-builtin
https://docs.python.org/3/glossary.html#term-file-object
"""
if "r" not in mode:
raise ValueError("Only reading `mode` is supported.")

args = (path,)
kwargs = {
Expand Down
21 changes: 21 additions & 0 deletions tests/unit/test_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import pytest

from dvc import api


def test_open_raises_error_if_no_context(tmp_dir, dvc):
tmp_dir.dvc_gen("foo", "foo-text")

with pytest.raises(
AttributeError, match="should be used in a with statement."
):
fd = api.open("foo")
fd.read()


def test_open_rev_raises_error_on_wrong_mode(tmp_dir, dvc):
tmp_dir.dvc_gen("foo", "foo-text")

with pytest.raises(ValueError, match="Only reading `mode` is supported."):
with api.open("foo", mode="w"):
pass

0 comments on commit 1663b97

Please sign in to comment.