Skip to content

Commit

Permalink
✨ (cli) Add key iteration command
Browse files Browse the repository at this point in the history
  • Loading branch information
simonwoerpel committed Mar 6, 2024
1 parent dcb05f9 commit 6f20b10
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
11 changes: 11 additions & 0 deletions anystore/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,17 @@ def cli_put(
S.put(key, value)


@cli.command("keys")
def cli_keys(
prefix: Annotated[Optional[str], typer.Argument(..., help="Key prefix")] = None,
o: Annotated[str, typer.Option("-o", help="Output uri")] = "-",
):
with ErrorHandler():
S = get_store(uri=state["uri"], use_pickle=state["pickle"])
keys = "\n".join(S.iterate_keys(prefix))
smart_write(o, keys.encode())


@cli.command("io")
def cli_io(
i: Annotated[str, typer.Option("-i", help="Input uri")] = "-",
Expand Down
20 changes: 17 additions & 3 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
from moto import mock_aws
from typer.testing import CliRunner

from anystore.cli import cli
from anystore import __version__
from anystore.cli import cli
from tests.conftest import setup_s3


runner = CliRunner()


@mock_aws
def test_cli(tmp_path, fixtures_path):
setup_s3()
res = runner.invoke(cli, "--help")
assert res.exit_code == 0

Expand All @@ -17,8 +21,18 @@ def test_cli(tmp_path, fixtures_path):
assert res.exit_code == 0
assert res.stdout == "bar"

res = runner.invoke(cli, ["--store", "s3://foo/bar", "put", "foo", "bar"])
assert res.exit_code == 1
res = runner.invoke(cli, ["--store", str(tmp_path), "put", "test", "test"])
res = runner.invoke(cli, ["--store", str(tmp_path), "keys"])
assert res.exit_code == 0
assert len(res.stdout.split()) == 2
res = runner.invoke(cli, ["--store", str(tmp_path), "keys", "foo"])
assert res.exit_code == 0
assert len(res.stdout.split()) == 1

res = runner.invoke(cli, ["--store", "s3://anystore", "put", "foo", "bar"])
res = runner.invoke(cli, ["--store", "s3://anystore", "get", "foo"])
assert res.exit_code == 0
assert res.stdout == "bar"

res = runner.invoke(cli, ["io", "-i", str(fixtures_path / "lorem.txt")])
assert res.exit_code == 0
Expand Down
4 changes: 2 additions & 2 deletions tests/test_store.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
from moto import mock_aws
from anystore.exceptions import DoesNotExist
import pytest

from anystore.exceptions import DoesNotExist
from anystore.store import Store, get_store
from anystore.store.base import BaseStore
from tests.conftest import setup_s3
Expand Down

0 comments on commit 6f20b10

Please sign in to comment.