Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Doc] Make doc code snippet testable [10/n] #37636

Merged
merged 60 commits into from
Jul 25, 2023
Merged
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
5984f1e
Rename `"model_state_dict"` to `"model"`
bveeramani Nov 22, 2022
8f58490
Revert "Rename `"model_state_dict"` to `"model"`"
bveeramani Nov 22, 2022
63432eb
Merge remote-tracking branch 'upstream/master'
bveeramani Dec 5, 2022
2c33947
Merge remote-tracking branch 'upstream/master'
bveeramani Dec 6, 2022
89694a0
Merge remote-tracking branch 'upstream/master'
bveeramani Dec 19, 2022
fe60ca3
Merge remote-tracking branch 'upstream/master'
bveeramani Dec 27, 2022
d45ae9a
Merge remote-tracking branch 'upstream/master'
bveeramani Jan 2, 2023
c703dfc
Merge remote-tracking branch 'upstream/master'
bveeramani Jan 6, 2023
81dd25c
Merge remote-tracking branch 'upstream/master'
bveeramani Jan 19, 2023
fba788e
Merge remote-tracking branch 'upstream/master'
bveeramani Jan 24, 2023
de05655
Update annotations.py
bveeramani Jan 26, 2023
fd2ff91
Revert "Update annotations.py"
bveeramani Jan 26, 2023
7c3ac36
Merge remote-tracking branch 'upstream/master'
bveeramani Feb 14, 2023
9c7b546
Merge remote-tracking branch 'upstream/master'
bveeramani Feb 28, 2023
9d7a15f
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 2, 2023
4f02efe
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 2, 2023
46f43d9
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 6, 2023
a644307
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 10, 2023
e5d0bf1
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 20, 2023
fe7286c
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 21, 2023
51b3a09
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 24, 2023
79f8be9
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 28, 2023
53bede6
Merge remote-tracking branch 'upstream/master'
bveeramani Mar 28, 2023
7cec6e3
Merge remote-tracking branch 'upstream/master'
bveeramani Apr 10, 2023
9407930
Merge remote-tracking branch 'upstream/master'
bveeramani Apr 17, 2023
67ae591
Merge remote-tracking branch 'upstream/master'
bveeramani Apr 18, 2023
93414b8
Merge remote-tracking branch 'upstream/master'
bveeramani May 1, 2023
fcfa9a5
Merge remote-tracking branch 'upstream/master'
bveeramani May 2, 2023
fbfe52d
Merge remote-tracking branch 'upstream/master'
bveeramani May 3, 2023
16132de
Merge remote-tracking branch 'upstream/master'
bveeramani May 10, 2023
4302db7
Merge remote-tracking branch 'upstream/master'
bveeramani May 12, 2023
ce56268
Merge remote-tracking branch 'upstream/master'
bveeramani May 15, 2023
7ac7203
Merge remote-tracking branch 'upstream/master'
bveeramani May 16, 2023
cd2d66d
Merge remote-tracking branch 'upstream/master'
bveeramani May 19, 2023
10fe686
Merge remote-tracking branch 'upstream/master'
bveeramani May 24, 2023
5959b7d
Merge remote-tracking branch 'upstream/master'
bveeramani May 25, 2023
3cd76b3
Merge remote-tracking branch 'upstream/master'
bveeramani May 26, 2023
7939f16
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 1, 2023
1ef4712
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 13, 2023
603bf64
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 14, 2023
73dd0fb
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 15, 2023
edd6fa6
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 21, 2023
07aefcf
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 22, 2023
ed021f1
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 26, 2023
f0d61f1
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 29, 2023
40f488f
Merge remote-tracking branch 'upstream/master'
bveeramani Jun 30, 2023
1742f5d
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 3, 2023
d5dc07a
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 5, 2023
b9cbe98
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 7, 2023
7050c96
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 11, 2023
6b658cf
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 11, 2023
a2a8887
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 14, 2023
193b9f4
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 17, 2023
e65c3d5
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 18, 2023
8be7eeb
Merge branch 'master' of https://github.com/ray-project/ray
bveeramani Jul 19, 2023
415ec40
Merge remote-tracking branch 'upstream/master'
bveeramani Jul 21, 2023
22463d8
[Doc] Make doc code snippet testable [10/n]
jjyao Jul 21, 2023
962ebca
Update traceback example
bveeramani Jul 24, 2023
c0e4f37
Merge branch 'master' into jjyao/storage
bveeramani Jul 24, 2023
dff7052
fix
jjyao Jul 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
166 changes: 119 additions & 47 deletions python/ray/_private/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,22 @@ def get_filesystem() -> ("pyarrow.fs.FileSystem", str):
storage filesystem.
Examples:
# Assume ray.init(storage="s3:/bucket/cluster_1/storage")
>>> fs, path = storage.get_filesystem() # doctest: +SKIP
>>> print(fs) # doctest: +SKIP
<pyarrow._fs.LocalFileSystem object at 0x7fd745dd9830>
>>> print(path) # doctest: +SKIP
cluster_1/storage
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
fs, path = storage.get_filesystem()
print(fs)
print(path)
.. testoutput::
<pyarrow._fs.LocalFileSystem object at ...>
/tmp/storage/cluster_1/storage
Returns:
Tuple of pyarrow filesystem instance and the path under which files should
Expand All @@ -63,9 +73,16 @@ def get_client(prefix: str) -> "KVClient":
data will be stored under. All writes will be scoped to this sub-dir.
Examples:
# Assume ray.init(storage="s3:/bucket/cluster_1/storage")
>>> client = storage.get_client("foo") # doctest: +SKIP
>>> client.put("foo", b"bar") # doctest: +SKIP
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
client = storage.get_client("foo")
client.put("foo", b"bar")
Returns:
KVClient.
Expand Down Expand Up @@ -107,9 +124,16 @@ def put(self, path: str, value: bytes) -> None:
"""Save a blob in persistent storage at the given path, if possible.
Examples:
# Writes "bar" to <storage_prefix>/my_app/path/foo.txt
>>> client = storage.get_client("my_app") # doctest: +SKIP
>>> client.put("path/foo.txt", b"bar") # doctest: +SKIP
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
client = storage.get_client("my_app")
client.put("path/foo.txt", b"bar")
Args:
path: Relative directory of the blobs.
Expand All @@ -130,12 +154,19 @@ def get(self, path: str) -> bytes:
"""Load a blob from persistent storage at the given path, if possible.
Examples:
# Loads value from <storage_prefix>/my_app/path/foo.txt
>>> client = storage.get_client("my_app") # doctest: +SKIP
>>> client.get("path/foo.txt") # doctest: +SKIP
b"bar"
>>> client.get("invalid") # doctest: +SKIP
None
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
client = storage.get_client("my_app")
client.put("path/foo.txt", b"bar")
assert client.get("path/foo.txt") == b"bar"
assert client.get("invalid") is None
Args:
path: Relative directory of the blobs.
Expand All @@ -158,10 +189,18 @@ def delete(self, path: str) -> bool:
"""Load the blob from persistent storage at the given path, if possible.
Examples:
# Deletes blob at <storage_prefix>/my_app/path/foo.txt
>>> client = storage.get_client("my_app") # doctest: +SKIP
>>> client.delete("path/foo.txt") # doctest: +SKIP
True
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
client = storage.get_client("my_app")
client.put("path/foo.txt", b"bar")
assert client.delete("path/foo.txt")
Args:
path: Relative directory of the blob.
Expand All @@ -184,10 +223,18 @@ def delete_dir(self, path: str) -> bool:
"""Delete a directory and its contents, recursively.
Examples:
# Deletes dir at <storage_prefix>/my_app/path/
>>> client = storage.get_client("my_app") # doctest: +SKIP
>>> client.delete_dir("path") # doctest: +SKIP
True
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
client = storage.get_client("my_app")
client.put("path/foo.txt", b"bar")
assert client.delete_dir("path")
Args:
path: Relative directory of the blob.
Expand All @@ -210,15 +257,26 @@ def get_info(self, path: str) -> Optional["pyarrow.fs.FileInfo"]:
"""Get info about the persistent blob at the given path, if possible.
Examples:
# Inspect blob at <storage_prefix>/my_app/path/foo.txt
>>> client = storage.get_client("my_app") # doctest: +SKIP
>>> client.get_info("path/foo.txt") # doctest: +SKIP
<FileInfo for '/tmp/storage/my_app/path/foo.txt': type=FileType.File>
.. testcode::
import ray
from ray._private import storage
ray.shutdown()
ray.init(storage="/tmp/storage/cluster_1/storage")
client = storage.get_client("my_app")
client.put("path/foo.txt", b"bar")
print(client.get_info("path/foo.txt"))
# Non-existent blob.
>>> client.get_info("path/does_not_exist.txt") # doctest: +SKIP
None
<FileInfo for '/tmp/storage/my_app/path/foo.txt': type=FileType.NotFound>
print(client.get_info("path/does_not_exist.txt"))
.. testoutput::
<FileInfo for '.../my_app/path/foo.txt': type=FileType.File, size=3>
None
Args:
path: Relative directory of the blob.
Expand All @@ -241,19 +299,33 @@ def list(
"""List blobs and sub-dirs in the given path, if possible.
Examples:
# List created blobs and dirs at <storage_prefix>/my_app/path
>>> client = storage.get_client("my_app") # doctest: +SKIP
>>> client.list("path") # doctest: +SKIP
[<FileInfo for '/tmp/storage/my_app/path/foo.txt' type=FileType.File>,
<FileInfo for '/tmp/storage/my_app/path/subdir' type=FileType.Directory>]
# Non-existent path.
>>> client.get_info("does_not_exist") # doctest: +SKIP
FileNotFoundError: ...
# Not a directory.
>>> storage.get_info("path/foo.txt") # doctest: +SKIP
NotADirectoryError: ...
>>> import ray
>>> from ray._private import storage
>>> ray.shutdown()
Normal usage.
>>> ray.init(storage="/tmp/storage/cluster_1/storage")
RayContext(...)
>>> client = storage.get_client("my_app")
>>> client.put("path/foo.txt", b"bar")
>>> client.list("path")
[<FileInfo for '.../my_app/path/foo.txt': type=FileType.File, size=3>]
Non-existent path.
>>> client.list("does_not_exist")
Traceback (most recent call last):
...
FileNotFoundError: ... No such file or directory
Not a directory.
>>> client.list("path/foo.txt")
Traceback (most recent call last):
...
NotADirectoryError: ... Not a directory
Args:
path: Relative directory to list from.
Expand Down