Skip to content

Commit

Permalink
Add global repository version list command
Browse files Browse the repository at this point in the history
fixes #631
  • Loading branch information
mdellweg committed Mar 13, 2023
1 parent aa3cc7d commit b6908af
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 33 deletions.
48 changes: 30 additions & 18 deletions pulp-glue/pulp_glue/common/context.py
Expand Up @@ -151,6 +151,26 @@ def _patch_api_spec(self) -> None:
and parameter["schema"]["type"] == "string"
):
parameter["schema"] = {"type": "array", "items": {"type": "string"}}
if self.has_plugin(PluginRequirement("core", max="99.99.0")):
# https://github.com/pulp/pulpcore/issues/3634
for operation_id, (method, path) in self.api.operations.items():
if (
operation_id == "repository_versions_list"
or (
operation_id.startswith("repositories_")
and operation_id.endswith("_versions_list")
)
or (operation_id.startswith("publications_") and operation_id.endswith("_list"))
):
operation = api_spec["paths"][path][method]
for parameter in operation["parameters"]:
if (
parameter["name"] == "content__in"
and parameter["in"] == "query"
and "schema" in parameter
and parameter["schema"]["type"] == "string"
):
parameter["schema"] = {"type": "array", "items": {"type": "string"}}
if self.has_plugin(PluginRequirement("file", min="1.10.0", max="1.11.0")):
operation = api_spec["paths"]["{file_file_alternate_content_source_href}refresh/"][
"post"
Expand Down Expand Up @@ -496,6 +516,10 @@ def pulp_href(self, value: str) -> None:
self._entity_lookup = {"pulp_href": value}
self._entity = None

@property
def tangible(self) -> bool:
return bool(self._entity) or bool(self._entity_lookup)

def __init__(
self,
pulp_ctx: PulpContext,
Expand Down Expand Up @@ -770,14 +794,9 @@ class PulpDistributionContext(PulpEntityContext):


class PulpRepositoryVersionContext(PulpEntityContext):
"""
Base class for repository version specific contexts.
This class provides the basic CRUD commands and
ties its instances to the global PulpContext for api access.
"""

ENTITY = _("repository version")
ENTITIES = _("repository versions")
ID_PREFIX = "repository_versions"
repository_ctx: "PulpRepositoryContext"

def __init__(self, pulp_ctx: PulpContext, repository_ctx: "PulpRepositoryContext") -> None:
Expand All @@ -786,24 +805,21 @@ def __init__(self, pulp_ctx: PulpContext, repository_ctx: "PulpRepositoryContext

@property
def scope(self) -> Dict[str, Any]:
return {self.repository_ctx.HREF: self.repository_ctx.pulp_href}
if self.ID_PREFIX == "repository_versions":
return {}
else:
return {self.repository_ctx.HREF: self.repository_ctx.pulp_href}

def repair(self, href: Optional[str] = None) -> Any:
return self.call("repair", parameters={self.HREF: href or self.pulp_href}, body={})


class PulpRepositoryContext(PulpEntityContext):
"""
Base class for repository specific contexts.
This class provides the basic CRUD commands as well as synchronizing and
ties its instances to the global PulpContext for api access.
"""

ENTITY = _("repository")
ENTITIES = _("repositories")
HREF_PATTERN = r"repositories/(?P<plugin>[\w\-_]+)/(?P<resource_type>[\w\-_]+)/"
ID_PREFIX = "repositories"
VERSION_CONTEXT: ClassVar[Type[PulpRepositoryVersionContext]]
VERSION_CONTEXT: ClassVar[Type[PulpRepositoryVersionContext]] = PulpRepositoryVersionContext
NULLABLES = {"description", "retain_repo_versions"}

def get_version_context(self) -> PulpRepositoryVersionContext:
Expand Down Expand Up @@ -841,10 +857,6 @@ def modify(


class PulpContentContext(PulpEntityContext):
"""
Base class for content specific contexts
"""

ENTITY = _("content")
ENTITIES = _("content")
ID_PREFIX = "content"
Expand Down
33 changes: 18 additions & 15 deletions pulpcore/cli/common/generic.py
Expand Up @@ -1181,6 +1181,7 @@ def version_command(**kwargs: Any) -> click.Command:

kwargs.setdefault("name", "version")
decorators = kwargs.pop("decorators", [repository_href_option, repository_option])
list_only = kwargs.pop("list_only", False)

@pulp_group(**kwargs)
@pass_repository_context
Expand All @@ -1191,21 +1192,23 @@ def callback(
) -> None:
ctx.obj = repository_ctx.get_version_context()

callback.add_command(list_command(decorators=decorators))
callback.add_command(show_command(decorators=decorators + [version_option]))
callback.add_command(destroy_command(decorators=decorators + [version_option]))

@callback.command()
@repository_option
@version_option
@pass_repository_version_context
@pass_pulp_context
def repair(
pulp_ctx: PulpCLIContext,
repository_version_ctx: PulpRepositoryVersionContext,
) -> None:
result = repository_version_ctx.repair()
pulp_ctx.output_result(result)
callback.add_command(list_command(decorators=decorators + [content_in_option]))

if not list_only:
callback.add_command(show_command(decorators=decorators + [version_option]))
callback.add_command(destroy_command(decorators=decorators + [version_option]))

@callback.command()
@repository_option
@version_option
@pass_repository_version_context
@pass_pulp_context
def repair(
pulp_ctx: PulpCLIContext,
repository_version_ctx: PulpRepositoryVersionContext,
) -> None:
result = repository_version_ctx.repair()
pulp_ctx.output_result(result)

return callback

Expand Down
2 changes: 2 additions & 0 deletions pulpcore/cli/core/repository.py
Expand Up @@ -8,6 +8,7 @@
name_filter_options,
pass_pulp_context,
pulp_group,
version_command,
)

translation = get_translation(__name__)
Expand All @@ -30,3 +31,4 @@ def repository(ctx: click.Context, pulp_ctx: PulpCLIContext) -> None:
filter_options = name_filter_options

repository.add_command(list_command(decorators=filter_options))
repository.add_command(version_command(decorators=[], list_only=True))
2 changes: 2 additions & 0 deletions tests/scripts/pulp_file/test_repository.sh
Expand Up @@ -63,5 +63,7 @@ expect_succ pulp repository list --name-icontains "CLI_test_file"
test "$(echo "$OUTPUT" | jq -r '.|length')" = "1"
expect_succ pulp repository list --name-in "cli_test_file_repo"
test "$(echo "$OUTPUT" | jq -r '.|length')" = "1"
expect_succ pulp repository version list
expect_succ pulp repository version list --content "[]"

expect_succ pulp file repository destroy --repository "cli_test_file_repo"

0 comments on commit b6908af

Please sign in to comment.