From ee3c2ccd5ed76ec038ba948f84792e2bcec94f75 Mon Sep 17 00:00:00 2001 From: Gaurav Mishra Date: Wed, 19 Aug 2026 12:21:14 +0530 Subject: [PATCH] fix(projects): revert behaviour of get_projects Signed-off-by: Gaurav Mishra --- sw360/project.py | 29 ++++++++++++++++++++++++----- tests/test_sw360_projects.py | 20 +++++++++++++++----- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/sw360/project.py b/sw360/project.py index b8d92b4..6f56f45 100644 --- a/sw360/project.py +++ b/sw360/project.py @@ -127,7 +127,7 @@ def __get_projects_filtered( def get_projects( self, all_details: bool = False, page: int = -1, page_size: int = -1, sort: Optional[SortParam] = None - ) -> List[Dict[str, Any]]: + ) -> Optional[Dict[str, Any]]: """Get all projects API endpoint: GET /projects @@ -150,13 +150,25 @@ def get_projects( if all_details: params["allDetails"] = "true" - url_with_param = self._add_params(fullbase_url, params) if sort is None: sort = ProjectSortColumn.NAME.asc() - return self.__get_projects_filtered(url_with_param, page, page_size, - sort) + if self.is_above_version_18(): + params["luceneSearch"] = "true" + + url_with_param = self._add_params(fullbase_url, params) + + if page > -1 and page_size > -1: + url_with_param = self._add_pagination(url_with_param, page, + page_size, sort) + + if self.is_above_version_18() and page_size == -1: + resp = self.api_get_all(url_with_param, sort) + else: + resp = self.api_get(url_with_param) + + return resp def get_projects_by_type( self, project_type: str, page: int = -1, page_size: int = -1, @@ -206,7 +218,14 @@ def get_project_names(self) -> List[str]: if not all_projects: return resp - projects: List[Dict[str, Any]] = all_projects + if "_embedded" not in all_projects: + return resp + + if "sw360:projects" not in all_projects["_embedded"]: + return resp + + projects: List[Dict[str, Any]] = all_projects["_embedded"]["sw360:projects"] + if not projects: return resp diff --git a/tests/test_sw360_projects.py b/tests/test_sw360_projects.py index 61a7379..102b417 100644 --- a/tests/test_sw360_projects.py +++ b/tests/test_sw360_projects.py @@ -207,7 +207,9 @@ def test_get_projects(self) -> None: projects = lib.get_projects() self.assertIsNotNone(projects) if projects: # only for mypy - self.assertEqual("My Testproject", projects[0]["name"]) + self.assertTrue("_embedded" in projects) + self.assertTrue("sw360:projects" in projects["_embedded"]) + self.assertEqual("My Testproject", projects["_embedded"]["sw360:projects"][0]["name"]) @responses.activate def test_get_projects_v18_style(self) -> None: @@ -226,7 +228,9 @@ def test_get_projects_v18_style(self) -> None: projects = lib.get_projects() self.assertIsNotNone(projects) if projects: # only for mypy - self.assertEqual("My Testproject", projects[0]["name"]) + self.assertTrue("_embedded" in projects) + self.assertTrue("sw360:projects" in projects["_embedded"]) + self.assertEqual("My Testproject", projects["_embedded"]["sw360:projects"][0]["name"]) @responses.activate def test_get_projects_with_details(self) -> None: @@ -245,7 +249,9 @@ def test_get_projects_with_details(self) -> None: projects = lib.get_projects(all_details=True) self.assertIsNotNone(projects) if projects: # only for mypy - self.assertEqual("My Testproject", projects[0]["name"]) + self.assertTrue("_embedded" in projects) + self.assertTrue("sw360:projects" in projects["_embedded"]) + self.assertEqual("My Testproject", projects["_embedded"]["sw360:projects"][0]["name"]) @responses.activate def test_get_projects_with_paging(self) -> None: @@ -264,7 +270,9 @@ def test_get_projects_with_paging(self) -> None: projects = lib.get_projects(page=1, page_size=2) self.assertIsNotNone(projects) if projects: # only for mypy - self.assertEqual("My Testproject", projects[0]["name"]) + self.assertTrue("_embedded" in projects) + self.assertTrue("sw360:projects" in projects["_embedded"]) + self.assertEqual("My Testproject", projects["_embedded"]["sw360:projects"][0]["name"]) @responses.activate def test_get_projects_with_paging_and_details(self) -> None: @@ -283,7 +291,9 @@ def test_get_projects_with_paging_and_details(self) -> None: projects = lib.get_projects(all_details=True, page=3, page_size=4, sort=ProjectSortColumn.NAME.desc()) self.assertIsNotNone(projects) if projects: # only for mypy - self.assertEqual("My Testproject", projects[0]["name"]) + self.assertTrue("_embedded" in projects) + self.assertTrue("sw360:projects" in projects["_embedded"]) + self.assertEqual("My Testproject", projects["_embedded"]["sw360:projects"][0]["name"]) @responses.activate def test_get_projects_by_type(self) -> None: