Skip to content

Commit

Permalink
feat(cli): set up repository list and get commands (#76)
Browse files Browse the repository at this point in the history
Fixes #31
  • Loading branch information
afuetterer committed May 26, 2024
1 parent 59f7d58 commit 44987e6
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/re3data/_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
import sys
import typing

from rich import print

import re3data

logger = logging.getLogger(__name__)

try:
Expand All @@ -19,6 +23,8 @@
CONTEXT_SETTINGS = {"help_option_names": ["-h", "--help"]}

app = typer.Typer(no_args_is_help=True, context_settings=CONTEXT_SETTINGS)
repositories_app = typer.Typer(no_args_is_help=True)
app.add_typer(repositories_app, name="repository")


def _version_callback(show_version: bool) -> None:
Expand All @@ -43,3 +49,17 @@ def callback(
] = False,
) -> None:
"""python-re3data."""


@repositories_app.command("list")
def list_repositories() -> None:
"""List the metadata of all repositories in the re3data API."""
response = re3data.repositories.list()
print(response)


@repositories_app.command("get")
def get_repository(repository_id: str) -> None:
"""Get the metadata of a specific repository."""
response = re3data.repositories.get(repository_id)
print(response)
42 changes: 42 additions & 0 deletions tests/integration/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# SPDX-FileCopyrightText: 2024 Heinz-Alexander Fütterer
#
# SPDX-License-Identifier: MIT
from __future__ import annotations

import sys
from importlib import reload
from typing import TYPE_CHECKING
from unittest.mock import patch

import pytest
Expand All @@ -12,6 +14,9 @@
from re3data import __version__
from re3data._cli import app

if TYPE_CHECKING:
from respx import Route

runner = CliRunner()

HELP_OPTION_NAMES = ("-h", "--help")
Expand Down Expand Up @@ -50,3 +55,40 @@ def test_typer_missing_message(caplog: pytest.LogCaptureFixture) -> None:
assert exc_info.type == SystemExit
assert exc_info.value.code == 1
assert "Please run 'pip install python-re3data[cli]'" in caplog.text


def test_repository_no_args_displays_help() -> None:
result = runner.invoke(app, ["repository"])
assert result.exit_code == 0
assert "Usage" in result.output
assert "Options" in result.output


def test_repository_list(mock_repository_list_route: Route) -> None:
result = runner.invoke(app, ["repository", "list"])
assert result.exit_code == 0
assert "<list>" in result.output
assert "<repository>" in result.output
assert "<id>" in result.output


def test_repository_get_without_repository_id(mock_repository_list_route: Route) -> None:
result = runner.invoke(app, ["repository", "get"])
assert result.exit_code == 2
assert "Missing argument" in result.output


@pytest.mark.default_cassette("repository.yaml")
@pytest.mark.vcr()
def test_repository_get_with_repository_id(zenodo_id: str) -> None:
result = runner.invoke(app, ["repository", "get", zenodo_id])
assert result.exit_code == 0
assert "<r3d:repository>" in result.output
assert "<r3d:re3data.orgIdentifier>r3d100010468" in result.output


@pytest.mark.default_cassette("repository.yaml")
@pytest.mark.vcr()
def test_repository_get_with_invalid_repository_id() -> None:
result = runner.invoke(app, ["repository", "get", "XXX"])
assert result.exit_code == 1

0 comments on commit 44987e6

Please sign in to comment.