Skip to content

Commit ca8d8ea

Browse files
committed
WIP
1 parent 96c64f6 commit ca8d8ea

File tree

3 files changed

+36
-85
lines changed

3 files changed

+36
-85
lines changed

pulp-glue/src/pulp_glue/python/context.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,23 @@ def preprocess_entity(self, body: EntityDefinition, partial: bool = False) -> En
7373
if "repository" not in body and "publication" in body:
7474
body["repository"] = None
7575

76-
version = body.pop("version", None)
77-
if version is not None:
78-
repository_href = body.pop("repository")
79-
body["repository_version"] = f"{repository_href}versions/{version}/"
76+
if self.pulp_ctx.has_plugin(PluginRequirement("python", specifier=">=3.21.0")):
77+
version = body.pop("version", None)
78+
if version is not None:
79+
if repository_href := body.pop("repository", None):
80+
body["repository_version"] = f"{repository_href}versions/{version}/"
81+
body["repository"] = None
82+
else:
83+
current_entity = getattr(self, "entity", {})
84+
if repository_href := current_entity.get("repository"):
85+
body["repository_version"] = f"{repository_href}versions/{version}/"
86+
body["repository"] = None
87+
elif repository_version_href := current_entity.get("repository_version"):
88+
repository_href = repository_version_href.partition("versions")[0]
89+
body["repository_version"] = f"{repository_href}versions/{version}/"
90+
elif "repository" in body:
91+
body["repository_version"] = None
92+
8093
return body
8194

8295

Lines changed: 5 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
import typing as t
2-
31
import click
42

5-
from pulp_glue.common.context import (
6-
EntityDefinition,
7-
EntityFieldDefinition,
8-
PluginRequirement,
9-
PulpEntityContext,
10-
)
3+
from pulp_glue.common.context import PluginRequirement
114
from pulp_glue.common.i18n import get_translation
125
from pulp_glue.python.context import (
136
PulpPythonDistributionContext,
@@ -27,13 +20,13 @@
2720
label_command,
2821
list_command,
2922
name_option,
30-
pass_entity_context,
3123
pass_pulp_context,
3224
pulp_group,
3325
pulp_labels_option,
3426
pulp_option,
3527
resource_option,
3628
show_command,
29+
update_command,
3730
)
3831

3932
translation = get_translation(__package__)
@@ -110,77 +103,8 @@ def distribution(ctx: click.Context, pulp_ctx: PulpCLIContext, /, distribution_t
110103
distribution.add_command(list_command(decorators=distribution_filter_options))
111104
distribution.add_command(show_command(decorators=lookup_options))
112105
distribution.add_command(create_command(decorators=create_options))
106+
distribution.add_command(
107+
update_command(decorators=lookup_options + update_options + [click.option("--base-path")])
108+
)
113109
distribution.add_command(destroy_command(decorators=lookup_options))
114110
distribution.add_command(label_command(decorators=nested_lookup_options))
115-
116-
117-
def apply_decorators(decorators_list: list[t.Callable[..., t.Any]]) -> t.Callable[..., t.Any]:
118-
def decorator(func: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]:
119-
for d in decorators_list:
120-
func = d(func)
121-
return func
122-
123-
return decorator
124-
125-
126-
@distribution.command()
127-
@apply_decorators(lookup_options + update_options + [click.option("--base-path")])
128-
@pass_entity_context
129-
def update(
130-
distribution_ctx: PulpEntityContext,
131-
/,
132-
publication: str | None,
133-
repository: EntityFieldDefinition,
134-
version: int | None,
135-
content_guard: EntityFieldDefinition,
136-
allow_uploads: bool | None,
137-
remote: EntityFieldDefinition,
138-
pulp_labels: dict[str, str] | None,
139-
base_path: str | None,
140-
) -> None:
141-
"""
142-
Update a Python distribution.
143-
"""
144-
assert isinstance(distribution_ctx, PulpPythonDistributionContext)
145-
146-
dist_body: EntityDefinition = distribution_ctx.entity
147-
body: EntityDefinition = dict()
148-
149-
if publication is not None:
150-
body["publication"] = publication
151-
if content_guard is not None:
152-
body["content_guard"] = content_guard
153-
if allow_uploads is not None:
154-
body["allow_uploads"] = allow_uploads
155-
if remote is not None:
156-
body["remote"] = remote
157-
if pulp_labels is not None:
158-
body["pulp_labels"] = pulp_labels
159-
if base_path is not None:
160-
body["base_path"] = base_path
161-
162-
if repository is not None and isinstance(repository, PulpPythonRepositoryContext):
163-
repo = repository.entity
164-
if version is not None:
165-
if dist_body.get("repository"):
166-
distribution_ctx.update(body={"repository": ""}, non_blocking=True)
167-
body["repository_version"] = f"{repo['versions_href']}{version}/"
168-
else:
169-
if dist_body.get("repository_version"):
170-
distribution_ctx.update(body={"repository_version": ""}, non_blocking=True)
171-
body["repository"] = repo["pulp_href"]
172-
elif version is not None:
173-
if dist_body.get("repository"):
174-
distribution_ctx.update(body={"repository": ""}, non_blocking=True)
175-
body["repository_version"] = f"{dist_body['repository']}versions/{version}/"
176-
elif dist_body.get("repository_version"):
177-
repository_href = dist_body["repository_version"].partition("versions")[0]
178-
body["repository_version"] = f"{repository_href}versions/{version}/"
179-
else:
180-
raise click.ClickException(
181-
_(
182-
"Distribution doesn't have a repository set, "
183-
"please specify the repository to use with --repository"
184-
)
185-
)
186-
distribution_ctx.update(body=body)

tests/scripts/pulp_python/test_distribution.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,18 @@ expect_succ pulp python distribution show --distribution "cli_test_python_distro
6464
echo "$OUTPUT" | jq -e '.repository_version | contains("/versions/1/")'
6565
echo "$OUTPUT" | jq -e '.repository == null'
6666

67+
expect_succ pulp python distribution update \
68+
--distribution "cli_test_python_distro_repo_version" \
69+
--version 0
70+
expect_succ pulp python distribution show --distribution "cli_test_python_distro_repo_version"
71+
echo "$OUTPUT" | jq -e '.repository_version | contains("/versions/0/")'
72+
echo "$OUTPUT" | jq -e '.repository == null'
73+
74+
expect_succ pulp python distribution update \
75+
--distribution "cli_test_python_distro_repo_version" \
76+
--repository "cli_test_python_distribution_repository"
77+
expect_succ pulp python distribution show --distribution "cli_test_python_distro_repo_version"
78+
echo "$OUTPUT" | jq -e '.repository_version == null'
79+
echo "$OUTPUT" | jq -e '.repository != null'
80+
6781
expect_succ pulp python distribution destroy --distribution "cli_test_python_distro_repo_version"

0 commit comments

Comments
 (0)