mirror of
https://github.com/clearml/clearml-server
synced 2025-05-02 03:03:58 +00:00
Add support for moving objects to projects root
This commit is contained in:
parent
14ff639bb0
commit
9c41124b81
@ -297,6 +297,7 @@ class ProjectBLL:
|
||||
"""
|
||||
Move a batch of entities to `project` or a project named `project_name` (create if does not exist)
|
||||
"""
|
||||
if project_name or project:
|
||||
project = cls.find_or_create(
|
||||
user=user,
|
||||
company=company,
|
||||
@ -304,6 +305,7 @@ class ProjectBLL:
|
||||
project_name=project_name,
|
||||
description="",
|
||||
)
|
||||
|
||||
extra = (
|
||||
{"set__last_change": datetime.utcnow()}
|
||||
if hasattr(entity_cls, "last_change")
|
||||
|
@ -985,7 +985,7 @@ move {
|
||||
items { type: string }
|
||||
}
|
||||
project {
|
||||
description: "Target project ID. If not provided, `project_name` must be provided."
|
||||
description: "Target project ID. If not provided, `project_name` must be provided. Use null for the root project"
|
||||
type: string
|
||||
}
|
||||
project_name {
|
||||
|
@ -194,7 +194,7 @@ move {
|
||||
type: string
|
||||
}
|
||||
project {
|
||||
description: "Target project ID. If not provided, `project_name` must be provided."
|
||||
description: "Target project ID. If not provided, `project_name` must be provided. Use null for the root project"
|
||||
type: string
|
||||
}
|
||||
project_name {
|
||||
|
@ -1998,7 +1998,7 @@ move {
|
||||
items { type: string }
|
||||
}
|
||||
project {
|
||||
description: "Target project ID. If not provided, `project_name` must be provided."
|
||||
description: "Target project ID. If not provided, `project_name` must be provided. Use null for the root project"
|
||||
type: string
|
||||
}
|
||||
project_name {
|
||||
|
@ -608,7 +608,7 @@ def make_public(call: APICall, company_id, request: MakePublicRequest):
|
||||
|
||||
@endpoint("models.move", request_data_model=MoveRequest)
|
||||
def move(call: APICall, company_id: str, request: MoveRequest):
|
||||
if not (request.project or request.project_name):
|
||||
if not ("project" in call.data or request.project_name):
|
||||
raise errors.bad_request.MissingRequiredFields(
|
||||
"project or project_name is required"
|
||||
)
|
||||
|
@ -252,7 +252,7 @@ def get_task_data(call: APICall, company_id, request: GetTasksDataRequest):
|
||||
|
||||
@endpoint("reports.move")
|
||||
def move(call: APICall, company_id: str, request: MoveReportRequest):
|
||||
if not (request.project or request.project_name):
|
||||
if not ("project" in call.data or request.project_name):
|
||||
raise errors.bad_request.MissingRequiredFields(
|
||||
"project or project_name is required"
|
||||
)
|
||||
@ -263,10 +263,13 @@ def move(call: APICall, company_id: str, request: MoveReportRequest):
|
||||
user_id = call.identity.user
|
||||
project_name = request.project_name
|
||||
if not project_name:
|
||||
if request.project:
|
||||
project = Project.get_for_writing(
|
||||
company=company_id, id=request.project, _only=("name",)
|
||||
)
|
||||
project_name = project.name
|
||||
else:
|
||||
project_name = ""
|
||||
|
||||
project_id = _ensure_reports_project(
|
||||
company=company_id, user=user_id, name=project_name
|
||||
|
@ -1300,7 +1300,7 @@ def make_public(call: APICall, company_id, request: MakePublicRequest):
|
||||
|
||||
@endpoint("tasks.move", request_data_model=MoveRequest)
|
||||
def move(call: APICall, company_id: str, request: MoveRequest):
|
||||
if not (request.project or request.project_name):
|
||||
if not ("project" in call.data or request.project_name):
|
||||
raise errors.bad_request.MissingRequiredFields(
|
||||
"project or project_name is required"
|
||||
)
|
||||
|
@ -30,6 +30,11 @@ class TestMoveUnderProject(TestService):
|
||||
self.assertEqual(p2_name, projects[0].name)
|
||||
self.api.projects.delete(project=project2, force=True)
|
||||
|
||||
# move to the root project
|
||||
self.assertEqual(None, self.api.tasks.move(ids=[task], project=None).project_id)
|
||||
tasks = self.api.tasks.get_all_ex(id=[task]).tasks
|
||||
self.assertEqual(None, tasks[0].get("project"))
|
||||
|
||||
# model move into existing project referenced by name
|
||||
model = self._temp_model()
|
||||
self.api.models.move(ids=[model], project_name=self.entity_name)
|
||||
|
@ -76,6 +76,11 @@ class TestReports(TestService):
|
||||
).tasks
|
||||
self.assertTrue({task_id, task2_id}.issubset({t.id for t in tasks}))
|
||||
|
||||
project_id = self.api.reports.move(task=task2_id, project=None).project_id
|
||||
project = self.api.projects.get_all_ex(id=[project_id]).projects[0]
|
||||
self.assertEqual(project.get("parent"), None)
|
||||
self.assertEqual(project.name, ".reports")
|
||||
|
||||
def test_reports_search(self):
|
||||
report_task = self._temp_report(name="Rep1")
|
||||
non_report_task = self._temp_task(name="hello")
|
||||
|
Loading…
Reference in New Issue
Block a user