Support querying by children_type in projects.get_all_ex

This commit is contained in:
allegroai
2023-03-23 19:07:42 +02:00
parent 74200a24bd
commit 6664c6237e
8 changed files with 197 additions and 106 deletions

View File

@@ -36,27 +36,56 @@ class TestSubProjects(TestService):
def test_query_children(self):
test_root_name = "TestQueryChildren"
test_root = self._temp_project(name=test_root_name)
child_with_tag = self._temp_project(
name=f"{test_root_name}/Project1/WithTag", system_tags=["test"]
dataset_project = self._temp_project(
name=f"{test_root_name}/Project1/Dataset", system_tags=["dataset"]
)
child_without_tag = self._temp_project(name=f"{test_root_name}/Project2/WithoutTag")
projects = self.api.projects.get_all_ex(parent=[test_root], shallow_search=True).projects
self.assertEqual({p.basename for p in projects}, {"Project1", "Project2"})
self._temp_task(
name="dataset task",
type="data_processing",
system_tags=["dataset"],
project=dataset_project,
)
self._temp_task(name="regular task", project=dataset_project)
pipeline_project = self._temp_project(
name=f"{test_root_name}/Project2/Pipeline", system_tags=["pipeline"]
)
self._temp_task(
name="pipeline task",
type="controller",
system_tags=["pipeline"],
project=pipeline_project,
)
self._temp_task(name="regular task", project=pipeline_project)
report_project = self._temp_project(name=f"{test_root_name}/Project3")
self._temp_report(name="test report", project=report_project)
self._temp_task(name="regular task", project=report_project)
projects = self.api.projects.get_all_ex(
parent=[test_root], children_condition={"system_tags": ["test"]}, shallow_search=True
parent=[test_root], shallow_search=True, include_stats=True
).projects
self.assertEqual({p.basename for p in projects}, {"Project1"})
projects = self.api.projects.get_all_ex(
parent=[projects[0].id], children_condition={"system_tags": ["test"]}, shallow_search=True
).projects
self.assertEqual(projects[0].id, child_with_tag)
self.assertEqual(
{p.basename for p in projects}, {f"Project{idx+1}" for idx in range(3)}
)
for p in projects:
self.assertEqual(
p.stats.active.total_tasks,
2
if p.basename in ("Project1", "Project2")
else 1
)
projects = self.api.projects.get_all_ex(
parent=[test_root], children_condition={"system_tags": ["not existent"]}, shallow_search=True
).projects
self.assertEqual(len(projects), 0)
for i, type_ in enumerate(("dataset", "pipeline", "report")):
projects = self.api.projects.get_all_ex(
parent=[test_root],
children_type=type_,
shallow_search=True,
include_stats=True,
).projects
self.assertEqual({p.basename for p in projects}, {f"Project{i+1}"})
p = projects[0]
self.assertEqual(
p.stats.active.total_tasks, 1
)
def test_project_aggregations(self):
"""This test requires user with user_auth_only... credentials in db"""
@@ -323,12 +352,21 @@ class TestSubProjects(TestService):
**kwargs,
)
def _temp_task(self, client=None, **kwargs):
def _temp_report(self, name, **kwargs):
return self.create_temp(
"reports",
name=name,
object_name="task",
delete_params=self.delete_params,
**kwargs,
)
def _temp_task(self, client=None, name=None, type=None, **kwargs):
return self.create_temp(
"tasks",
delete_params=self.delete_params,
type="testing",
name=db_id(),
type=type or "testing",
name=name or db_id(),
input=dict(view=dict()),
client=client,
**kwargs,

View File

@@ -50,7 +50,9 @@ class TestTasksResetDelete(TestService):
self.assertEqual(res.urls.artifact_urls, [])
task = self.new_task()
(_, published_model_urls), (model, draft_model_urls) = self.create_task_models(task)
(_, published_model_urls), (model, draft_model_urls) = self.create_task_models(
task
)
artifact_urls = self.send_artifacts(task)
event_urls = self.send_debug_image_events(task)
event_urls.update(self.send_plot_events(task))
@@ -74,7 +76,12 @@ class TestTasksResetDelete(TestService):
self.api.tasks.reset(task=task, force=True)
# test urls
task, (published_model_urls, draft_model_urls), artifact_urls, event_urls = self.create_task_with_data()
(
task,
(published_model_urls, draft_model_urls),
artifact_urls,
event_urls,
) = self.create_task_with_data()
res = self.api.tasks.reset(task=task, force=True, return_file_urls=True)
self.assertEqual(set(res.urls.model_urls), draft_model_urls)
self.assertEqual(set(res.urls.event_urls), event_urls)
@@ -101,13 +108,18 @@ class TestTasksResetDelete(TestService):
# with delete_contents flag
project = self.new_project()
task, (published_model_urls, draft_model_urls), artifact_urls, event_urls = self.create_task_with_data(
project=project
)
(
task,
(published_model_urls, draft_model_urls),
artifact_urls,
event_urls,
) = self.create_task_with_data(project=project)
res = self.api.projects.delete(
project=project, force=True, delete_contents=True
)
self.assertEqual(set(res.urls.model_urls), published_model_urls | draft_model_urls)
self.assertEqual(
set(res.urls.model_urls), published_model_urls | draft_model_urls
)
self.assertEqual(res.deleted, 1)
self.assertEqual(res.disassociated_tasks, 0)
self.assertEqual(res.deleted_tasks, 1)
@@ -121,7 +133,9 @@ class TestTasksResetDelete(TestService):
self, **kwargs
) -> Tuple[str, Tuple[Set[str], Set[str]], Set[str], Set[str]]:
task = self.new_task(**kwargs)
(_, published_model_urls), (model, draft_model_urls) = self.create_task_models(task, **kwargs)
(_, published_model_urls), (model, draft_model_urls) = self.create_task_models(
task, **kwargs
)
artifact_urls = self.send_artifacts(task)
event_urls = self.send_debug_image_events(task)
event_urls.update(self.send_plot_events(task))
@@ -172,7 +186,7 @@ class TestTasksResetDelete(TestService):
),
self.create_event(
model, "plot", 0, plot_str=f'{{"source": "{url2}"}}', model_event=True
)
),
]
self.send_batch(events)
return {url1, url2}
@@ -181,7 +195,10 @@ class TestTasksResetDelete(TestService):
url_pattern = "url_{num}.txt"
events = [
self.create_event(
task, "training_debug_image", iteration, url=url_pattern.format(num=iteration)
task,
"training_debug_image",
iteration,
url=url_pattern.format(num=iteration),
)
for iteration in range(5)
]