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

feat: list available vyper versions CLI #148

Merged
merged 4 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ List installed versions using:
ape vyper vvm list
```

To list the available Vyper versions, do:

```shell
ape vyper vvm list --available
```

Install more versions using the command:

```shell
Expand Down
30 changes: 26 additions & 4 deletions ape_vyper/_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@
import ape
import click
from ape.cli.options import ape_cli_context, project_option
from vvm import get_installed_vyper_versions, get_vvm_install_folder, install_vyper # type: ignore
from vvm import ( # type: ignore
get_installable_vyper_versions,
get_installed_vyper_versions,
get_vvm_install_folder,
install_vyper,
)


@click.group
Expand Down Expand Up @@ -36,12 +41,29 @@ def vvm():


@vvm.command("list", short_help="List vyper installed versions")
def _list():
@click.option("--available", is_flag=True, help="Show available vyper versions")
def _list(available: bool):
if available:
if available_versions := get_installable_vyper_versions():
# First, show the installed.
_list_installed()

# Show available.
click.echo("\nAvailable vyper versions:")
for version in available_versions:
click.echo(f"{version}")

else:
_list_installed(allow_pager=True)


def _list_installed(allow_pager: bool = False):
versions = get_installed_vyper_versions()
if len(versions) > 10:
if allow_pager and len(versions) > 10:
click.echo_via_pager(versions)
else:
for version in get_installed_vyper_versions():
click.echo("Installed vyper versions:")
for version in versions:
click.echo(version)


Expand Down
14 changes: 13 additions & 1 deletion tests/functional/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import pytest
from ape.utils import create_tempdir
from packaging.version import Version

from ape_vyper._cli import cli

Expand Down Expand Up @@ -49,9 +50,20 @@ def test_compile():
assert "zero_four_in_subdir.vy" in output


def test_vvm_list(cli_runner):
def test_vvm_list(mocker, cli_runner):
mock_installed = mocker.patch("ape_vyper._cli.get_installed_vyper_versions")
mock_installed.return_value = ["0.3.3"]
result = cli_runner.invoke(cli, ["vvm", "list"])
assert result.exit_code == 0
assert "Installed vyper versions:\n0.3.3" in result.stdout


def test_vvm_list_available(mocker, cli_runner):
mock_available = mocker.patch("ape_vyper._cli.get_installable_vyper_versions")
mock_available.return_value = [Version("0.3.3")]
result = cli_runner.invoke(cli, ["vvm", "list", "--available"])
assert result.exit_code == 0
assert "Available vyper versions:\n0.3.3" in result.stdout


def test_vvm_install(cli_runner):
Expand Down
Loading