Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions sw360/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down Expand Up @@ -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

Expand Down
20 changes: 15 additions & 5 deletions tests/test_sw360_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand All @@ -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:
Expand All @@ -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:
Expand All @@ -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:
Expand Down
Loading