Skip to content

Commit 145c380

Browse files
authored
feat: add R related variants for custom sessions (#1219)
1 parent 82b72b9 commit 145c380

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

components/renku_data_services/session/core.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,15 @@ def validate_unsaved_build_parameters(
6666

6767
platforms = __validate_build_parameters_platforms(environment.platforms)
6868

69+
builder_variant, frontend_variant = __validate_builder_frontend_combination(
70+
environment.builder_variant, environment.frontend_variant
71+
)
72+
6973
return models.UnsavedBuildParameters(
7074
repository=environment.repository,
7175
platforms=platforms,
72-
builder_variant=environment.builder_variant,
73-
frontend_variant=environment.frontend_variant,
76+
builder_variant=builder_variant,
77+
frontend_variant=frontend_variant,
7478
repository_revision=environment.repository_revision if environment.repository_revision else None,
7579
context_dir=environment.context_dir if environment.context_dir else None,
7680
)
@@ -97,11 +101,20 @@ def validate_build_parameters_patch(environment: apispec.BuildParametersPatch) -
97101
if environment.platforms is not None:
98102
platforms = __validate_build_parameters_platforms(environment.platforms)
99103

104+
builder_variant: str | None = None
105+
frontend_variant: str | None = None
106+
if environment.builder_variant is not None and environment.frontend_variant is not None:
107+
builder_variant, frontend_variant = __validate_builder_frontend_combination(
108+
environment.builder_variant, environment.frontend_variant
109+
)
110+
else:
111+
builder_variant, frontend_variant = environment.builder_variant, environment.frontend_variant
112+
100113
return models.BuildParametersPatch(
101114
repository=environment.repository,
102115
platforms=platforms,
103-
builder_variant=environment.builder_variant,
104-
frontend_variant=environment.frontend_variant,
116+
builder_variant=builder_variant,
117+
frontend_variant=frontend_variant,
105118
repository_revision=environment.repository_revision,
106119
context_dir=environment.context_dir,
107120
)
@@ -374,3 +387,14 @@ def __validate_build_parameters_platforms(platforms: list[apispec.BuildPlatform]
374387
)
375388
)
376389
return [models.Platform(item) for item in platforms_str_list]
390+
391+
392+
def __validate_builder_frontend_combination(builder_variant: str, frontend_variant: str) -> tuple[str, str]:
393+
"""Validate the combination of builder and frontend variants."""
394+
combo = (models.BuilderVariant(builder_variant), models.FrontendVariant(frontend_variant))
395+
if combo not in models.VALID_BUILDER_FRONTEND_COMBINATIONS:
396+
raise errors.ValidationError(
397+
message=f"Invalid combination: builder '{builder_variant}' is not compatible with"
398+
"frontend '{frontend_variant}'"
399+
)
400+
return builder_variant, frontend_variant

components/renku_data_services/session/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class BuilderVariant(StrEnum):
5151
"""The type of environment builder."""
5252

5353
python = "python"
54+
r = "r"
5455

5556

5657
class FrontendVariant(StrEnum):
@@ -59,6 +60,15 @@ class FrontendVariant(StrEnum):
5960
vscodium = "vscodium"
6061
jupyterlab = "jupyterlab"
6162
ttyd = "ttyd"
63+
rstudio = "rstudio"
64+
65+
66+
VALID_BUILDER_FRONTEND_COMBINATIONS: typing.Final[set[tuple[BuilderVariant, FrontendVariant]]] = {
67+
(BuilderVariant.r, FrontendVariant.rstudio),
68+
(BuilderVariant.python, FrontendVariant.vscodium),
69+
(BuilderVariant.python, FrontendVariant.jupyterlab),
70+
(BuilderVariant.python, FrontendVariant.ttyd),
71+
}
6272

6373

6474
@dataclass(kw_only=True, frozen=True, eq=True)

0 commit comments

Comments
 (0)