Skip to content

Commit

Permalink
feat(api): plan (#2909)
Browse files Browse the repository at this point in the history
  • Loading branch information
m-alisafaee committed May 19, 2022
1 parent 36263eb commit e6cb2d3
Show file tree
Hide file tree
Showing 15 changed files with 702 additions and 190 deletions.
9 changes: 8 additions & 1 deletion docs/reference/api.rst
Expand Up @@ -32,9 +32,16 @@ Renku Python API

.. automodule:: renku.ui.api.models.dataset

.. _api-plan:

``Plan, CompositePlan``
-----------------------

.. automodule:: renku.ui.api.models.plan

.. _api-run:

``Inputs, Outputs, and Parameters``
-----------------------------------

.. automodule:: renku.ui.api.models.run
.. automodule:: renku.ui.api.models.parameter
4 changes: 1 addition & 3 deletions renku/command/workflow.py
Expand Up @@ -131,9 +131,7 @@ def _remove_workflow(name: str, force: bool, plan_gateway: IPlanGateway):
communication.confirm(prompt_text, abort=True, warning=True)

plan = plan or workflows[name]
plan.unfreeze()
plan.invalidated_at = local_now()
plan.freeze()
plan.delete()


def remove_workflow_command():
Expand Down
6 changes: 6 additions & 0 deletions renku/domain_model/workflow/parameter.py
Expand Up @@ -179,6 +179,12 @@ def generate_id(plan_id: str, position: Optional[int] = None, postfix: str = Non
plan_id, parameter_type="parameters", position=position, postfix=postfix
)

def __repr__(self):
return (
f"<Parameter '{self.name}': {self.actual_value} (default: {self.default_value}, prefix: {self.prefix}, "
f"position: {self.position})>"
)

def _get_default_name(self) -> str:
return self._generate_name(base="parameter")

Expand Down
23 changes: 17 additions & 6 deletions renku/domain_model/workflow/plan.py
Expand Up @@ -86,7 +86,7 @@ def validate_name(name: str):
"""Check a name for invalid characters."""
if not re.match("[a-zA-Z0-9-_]+", name):
raise errors.ParameterError(
f"Name {name} contains illegal characters. Only characters, numbers, _ and - are allowed."
f"Name {name} contains illegal characters. Only English letters, numbers, _ and - are allowed."
)

def assign_new_id(self) -> str:
Expand Down Expand Up @@ -183,6 +183,16 @@ def __init__(
duplicates_string = ", ".join(duplicates)
raise errors.ParameterError(f"Duplicate input, output or parameter names found: {duplicates_string}")

@property
def keywords_csv(self) -> str:
"""Comma-separated list of keywords associated with workflow."""
return ", ".join(self.keywords)

@property
def deleted(self) -> bool:
"""True if plan is deleted."""
return self.invalidated_at is not None

def is_similar_to(self, other: "Plan") -> bool:
"""Return true if plan has the same inputs/outputs/arguments as another plan."""

Expand Down Expand Up @@ -288,11 +298,6 @@ def is_derivation(self) -> bool:
"""Return if an ``Plan`` has correct derived_from."""
return self.derived_from is not None and self.id != self.derived_from

@property
def keywords_csv(self):
"""Comma-separated list of keywords associated with workflow."""
return ", ".join(self.keywords)

def to_argv(self, with_streams: bool = False) -> List[Any]:
"""Convert a Plan into argv list."""
arguments = itertools.chain(self.inputs, self.outputs, self.parameters)
Expand Down Expand Up @@ -336,6 +341,12 @@ def copy(self):
"""
return copy.deepcopy(self)

def delete(self, when: datetime = local_now()):
"""Mark a plan as deleted."""
self.unfreeze()
self.invalidated_at = when
self.freeze()


class PlanDetailsJson(marshmallow.Schema):
"""Serialize a plan to a response object."""
Expand Down
5 changes: 3 additions & 2 deletions renku/ui/api/__init__.py
Expand Up @@ -18,7 +18,8 @@
"""Renku API."""

from renku.ui.api.models.dataset import Dataset
from renku.ui.api.models.parameter import Input, Link, Mapping, Output, Parameter
from renku.ui.api.models.plan import CompositePlan, Plan
from renku.ui.api.models.project import Project
from renku.ui.api.models.run import Input, Output, Parameter

__all__ = ("Dataset", "Input", "Output", "Parameter", "Project")
__all__ = ("CompositePlan", "Dataset", "Input", "Link", "Mapping", "Output", "Parameter", "Plan", "Project")
10 changes: 5 additions & 5 deletions renku/ui/api/models/dataset.py
Expand Up @@ -41,7 +41,7 @@

from operator import attrgetter
from pathlib import Path
from typing import Optional
from typing import List, Optional

from renku.command.command_builder.database_dispatcher import DatabaseDispatcher
from renku.domain_model import dataset as core_dataset
Expand Down Expand Up @@ -73,14 +73,14 @@ def __init__(self):
self._files = []

@classmethod
def _from_dataset(cls, dataset: core_dataset.Dataset):
def _from_dataset(cls, dataset: core_dataset.Dataset) -> "Dataset":
"""Create an instance from Dataset metadata.
Args:
dataset(core_dataset.Dataset): The core dataset to wrap.
Returns:
An API ``Dataset`` wrapping a core dataset.
Dataset: An API ``Dataset`` wrapping a core dataset.
"""
self = cls()
self._dataset = dataset
Expand All @@ -90,14 +90,14 @@ def _from_dataset(cls, dataset: core_dataset.Dataset):

@staticmethod
@ensure_project_context
def list(project):
def list(project) -> List["Dataset"]:
"""List all datasets in a project.
Args:
project: The current project
Returns:
A list of all datasets in the supplied project.
List["Dataset"]: A list of all datasets in the supplied project.
"""
client = project.client
if not client or not client.has_graph_files():
Expand Down

0 comments on commit e6cb2d3

Please sign in to comment.