mirror of
https://github.com/clearml/clearml-server
synced 2025-04-23 07:34:37 +00:00
Add pipelines.delete_runs endpoint
This commit is contained in:
parent
db021f2863
commit
a83a932e84
apiserver
apierrors
apimodels
schema/services
tests/automated
@ -53,6 +53,9 @@
|
||||
# Reports
|
||||
150: ["operation_supported_on_reports_only", "passed task is not report"]
|
||||
|
||||
# Pipelines
|
||||
160: ["cannot_remove_all_runs", "at least one pipeline run should be left"]
|
||||
|
||||
# Models
|
||||
200: ["model_error", "general task error"]
|
||||
201: ["invalid_model_id", "invalid model id"]
|
||||
|
@ -1,4 +1,5 @@
|
||||
from jsonmodels import models, fields
|
||||
from jsonmodels.validators import Length
|
||||
|
||||
from apiserver.apimodels import ListField
|
||||
|
||||
@ -8,6 +9,11 @@ class Arg(models.Base):
|
||||
value = fields.StringField(required=True)
|
||||
|
||||
|
||||
class DeleteRunsRequest(models.Base):
|
||||
project = fields.StringField(required=True)
|
||||
ids = ListField([str], required=True, validators=[Length(1)])
|
||||
|
||||
|
||||
class StartPipelineRequest(models.Base):
|
||||
task = fields.StringField(required=True)
|
||||
queue = fields.StringField(required=True)
|
||||
|
@ -1,7 +1,42 @@
|
||||
_description: "Provides a management API for pipelines in the system."
|
||||
_definitions {
|
||||
include "_common.conf"
|
||||
}
|
||||
delete_runs {
|
||||
"999.0": ${_definitions.batch_operation} {
|
||||
description: Delete pipeline runs
|
||||
request {
|
||||
required: [ids, project]
|
||||
properties {
|
||||
ids.description: "IDs of the pipeline runs to delete. Should be the ids of pipeline controller tasks"
|
||||
project {
|
||||
description: "Pipeline project ids. When deleting at least one run should be left"
|
||||
type: string
|
||||
}
|
||||
}
|
||||
}
|
||||
response {
|
||||
properties {
|
||||
succeeded.items.properties.deleted {
|
||||
description: "Indicates whether the task was deleted"
|
||||
type: boolean
|
||||
}
|
||||
succeeded.items.properties.updated_children {
|
||||
description: "Number of child tasks whose parent property was updated"
|
||||
type: integer
|
||||
}
|
||||
succeeded.items.properties.updated_models {
|
||||
description: "Number of models whose task property was updated"
|
||||
type: integer
|
||||
}
|
||||
succeeded.items.properties.deleted_models {
|
||||
description: "Number of deleted output models"
|
||||
type: integer
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
start_pipeline {
|
||||
"2.17" {
|
||||
description: "Start a pipeline"
|
||||
|
@ -1,9 +1,34 @@
|
||||
from typing import Tuple
|
||||
|
||||
from apiserver.apierrors import errors
|
||||
from apiserver.tests.automated import TestService
|
||||
|
||||
|
||||
class TestPipelines(TestService):
|
||||
def test_delete_runs(self):
|
||||
queue = self.api.queues.get_default().id
|
||||
task_name = "pipelines test"
|
||||
project, task = self._temp_project_and_task(name=task_name)
|
||||
args = [{"name": "hello", "value": "test"}]
|
||||
pipeline_tasks = [
|
||||
self.api.pipelines.start_pipeline(
|
||||
task=task, queue=queue, args=args
|
||||
).pipeline
|
||||
for _ in range(2)
|
||||
]
|
||||
tasks = self.api.tasks.get_all_ex(project=project).tasks
|
||||
self.assertEqual({task, *pipeline_tasks}, {t.id for t in tasks})
|
||||
|
||||
# cannot delete all runs
|
||||
with self.api.raises(errors.bad_request.CannotRemoveAllRuns):
|
||||
self.api.pipelines.delete_runs(project=project, ids=[task, *pipeline_tasks])
|
||||
|
||||
# successful deletion
|
||||
res = self.api.pipelines.delete_runs(project=project, ids=pipeline_tasks)
|
||||
self.assertEqual({r.id for r in res.succeeded}, set(pipeline_tasks))
|
||||
tasks = self.api.tasks.get_all_ex(project=project).tasks
|
||||
self.assertEqual([task], [t.id for t in tasks])
|
||||
|
||||
def test_start_pipeline(self):
|
||||
queue = self.api.queues.get_default().id
|
||||
task_name = "pipelines test"
|
||||
@ -42,7 +67,7 @@ class TestPipelines(TestService):
|
||||
self.create_temp(
|
||||
"tasks",
|
||||
name=name,
|
||||
type="testing",
|
||||
type="controller",
|
||||
project=project,
|
||||
system_tags=["pipeline"],
|
||||
),
|
||||
|
Loading…
Reference in New Issue
Block a user