From 00ee44888e9e1d757ae18c3de74951c045f00ce7 Mon Sep 17 00:00:00 2001 From: FannyGaudin <150816089+FannyGaudin@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:39:50 +0200 Subject: [PATCH] fix(LAB-2960): set inputType and jsonInterface as optional (#1736) --- src/kili/presentation/client/project.py | 4 +-- src/kili/use_cases/project/project.py | 15 ++++++++---- tests/e2e/test_query_labels.py | 2 +- tests/integration/use_cases/test_project.py | 27 ++++++++++++++++++--- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/kili/presentation/client/project.py b/src/kili/presentation/client/project.py index 89b2069cb..4f013a244 100644 --- a/src/kili/presentation/client/project.py +++ b/src/kili/presentation/client/project.py @@ -37,10 +37,10 @@ class ProjectClientMethods(BaseClientMethods): # pylint: disable=too-many-arguments def create_project( self, - input_type: InputType, - json_interface: Dict, title: str, description: str = "", + input_type: Optional[InputType] = None, + json_interface: Optional[Dict] = None, project_id: Optional[ProjectId] = None, project_type: Optional[ProjectType] = None, tags: Optional[ListOrTuple[str]] = None, diff --git a/src/kili/use_cases/project/project.py b/src/kili/use_cases/project/project.py index cceaf9713..fb399ed86 100644 --- a/src/kili/use_cases/project/project.py +++ b/src/kili/use_cases/project/project.py @@ -24,24 +24,24 @@ class ProjectUseCases(BaseUseCases): # pylint: disable=too-many-arguments def create_project( self, - input_type: InputType, - json_interface: Dict, title: str, description: str, - project_id: Optional[ProjectId], project_type: Optional[ProjectType], compliance_tags: Optional[ListOrTuple[ComplianceTag]], + project_id: Optional[ProjectId] = None, + input_type: Optional[InputType] = None, + json_interface: Optional[Dict] = None, ) -> ProjectId: """Create or copy a project if project_id is set.""" if project_id is not None: project_copied = self._kili_api_gateway.get_project( - project_id=project_id, fields=["jsonInterface", "instructions"] + project_id=project_id, fields=["jsonInterface", "instructions", "inputType"] ) project_tag = self._kili_api_gateway.list_tags_by_project( project_id=project_id, fields=["id"] ) new_project_id = self._kili_api_gateway.create_project( - input_type=input_type, + input_type=project_copied["inputType"], json_interface=project_copied["jsonInterface"], title=title, description=description, @@ -62,6 +62,11 @@ def create_project( f"Tag {tag['id']} doesn't belong to your organization and was not copied." ) self._kili_api_gateway.check_tag(project_id=new_project_id, tag_id=tag["id"]) + elif input_type is None or json_interface is None: + raise ValueError( + """Arguments `input_type` and `json_interface` must be set + if no `project_id` is providen.""" + ) else: new_project_id = self._kili_api_gateway.create_project( input_type=input_type, diff --git a/tests/e2e/test_query_labels.py b/tests/e2e/test_query_labels.py index 56f2840eb..d55dcbfdd 100644 --- a/tests/e2e/test_query_labels.py +++ b/tests/e2e/test_query_labels.py @@ -9,7 +9,7 @@ @pytest.fixture(scope="module") def project_id(kili: Kili): project = kili.create_project( - "TEXT", + input_type="TEXT", json_interface={ "jobs": { "CLASSIFICATION_JOB": { diff --git a/tests/integration/use_cases/test_project.py b/tests/integration/use_cases/test_project.py index 62bb5b41c..052fad01c 100644 --- a/tests/integration/use_cases/test_project.py +++ b/tests/integration/use_cases/test_project.py @@ -48,6 +48,27 @@ def test_when_create_project_it_works(kili_api_gateway: KiliAPIGateway): assert project_id == "fake_project_id" +def test_when_create_project_without_inputType_or_jsonInterface_it_throw_an_error( + kili_api_gateway: KiliAPIGateway, +): + kili_api_gateway.create_project.return_value = "fake_project_id" + + # When + project_use_cases = ProjectUseCases(kili_api_gateway) + + # Then + with pytest.raises( + ValueError, + match="Arguments `input_type` and `json_interface` must be set\n if no `project_id` is providen.", + ): + project_use_cases.create_project( + title="test", + description="description", + project_type=None, + compliance_tags=None, + ) + + def test_when_create_project_with_project_id_it_works(kili_api_gateway: KiliAPIGateway): # Given tags = [ @@ -58,14 +79,13 @@ def test_when_create_project_with_project_id_it_works(kili_api_gateway: KiliAPIG kili_api_gateway.get_project.return_value = { "jsonInterface": interface, "instructions": "fake_instructions", + "inputType": "TEXT", } kili_api_gateway.list_tags_by_project.return_value = tags kili_api_gateway.list_tags_by_org.return_value = tags # When project_id = ProjectUseCases(kili_api_gateway).create_project( - input_type="TEXT", - json_interface=interface, title="test", description="description", project_id=ProjectId("fake_project_id"), @@ -91,6 +111,7 @@ def test_when_create_project_with_project_id_it_throw_an_error_if_tags_do_not_be kili_api_gateway.get_project.return_value = { "jsonInterface": interface, "instructions": "fake_instructions", + "inputType": "TEXT", } kili_api_gateway.list_tags_by_project.return_value = tags kili_api_gateway.list_tags_by_org.return_value = org_tags @@ -102,8 +123,6 @@ def test_when_create_project_with_project_id_it_throw_an_error_if_tags_do_not_be match="Tag tag1_id doesn't belong to your organization and was not copied.", ): project_use_cases.create_project( - input_type="TEXT", - json_interface=interface, title="test", description="description", project_id=ProjectId("fake_project_id"),