Skip to content

Commit

Permalink
Add cache list command
Browse files Browse the repository at this point in the history
This introduces a new cache sub-command that lists all available
caches.

Relates-to: python-poetry#1162
  • Loading branch information
abn committed Mar 2, 2020
1 parent c8d136b commit 449aea1
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 1 deletion.
12 changes: 12 additions & 0 deletions docs/docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -452,3 +452,15 @@ The `env` command regroups sub commands to interact with the virtualenvs
associated with a specific project.

See [Managing environments](./managing-environments.md) for more information about these commands.

## cache

The `cache` command regroups sub commands to interact with Poetry's cache.

### cache list

The `cache list` command lists Poetry's available caches.

```bash
poetry cache list
```
4 changes: 3 additions & 1 deletion poetry/console/commands/cache/cache.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from poetry.console.commands.cache.list import CacheListCommand

from ..command import Command
from .clear import CacheClearCommand

Expand All @@ -7,7 +9,7 @@ class CacheCommand(Command):
name = "cache"
description = "Interact with Poetry's cache"

commands = [CacheClearCommand()]
commands = [CacheClearCommand(), CacheListCommand()]

def handle(self):
return self.call("help", self._config.name)
21 changes: 21 additions & 0 deletions poetry/console/commands/cache/list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import os

from ..command import Command


class CacheListCommand(Command):

name = "list"
description = "List Poetry's caches."

def handle(self):
from poetry.locations import REPOSITORY_CACHE_DIR

if os.path.exists(str(REPOSITORY_CACHE_DIR)):
caches = list(sorted(REPOSITORY_CACHE_DIR.iterdir()))
if caches:
for cache in caches:
self.line("<info>{}</>".format(cache.name))
return 0

self.line("<warning>No caches found</>")
58 changes: 58 additions & 0 deletions tests/console/commands/test_cache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import uuid

import pytest

from cleo.testers import CommandTester


@pytest.fixture
def repository_cache_dir(monkeypatch, tmpdir):
import poetry.locations
from poetry.utils._compat import Path

path = Path(tmpdir)
monkeypatch.setattr(poetry.locations, "REPOSITORY_CACHE_DIR", path)
return path


@pytest.fixture
def repository_one():
return f"01_{uuid.uuid4()}"


@pytest.fixture
def repository_two():
return f"02_{uuid.uuid4()}"


@pytest.fixture
def mock_caches(repository_cache_dir, repository_one, repository_two):
(repository_cache_dir / repository_one).mkdir()
(repository_cache_dir / repository_two).mkdir()


def test_cache_list(app, mock_caches, repository_one, repository_two):
command = app.find("cache list")
tester = CommandTester(command)

tester.execute()

expected = f"""\
{repository_one}
{repository_two}
"""

assert expected == tester.io.fetch_output()


def test_cache_list_empty(app, repository_cache_dir):
command = app.find("cache list")
tester = CommandTester(command)

tester.execute()

expected = f"""\
No caches found
"""

assert expected == tester.io.fetch_output()

0 comments on commit 449aea1

Please sign in to comment.