diff --git a/sw360/components.py b/sw360/components.py index 77ab08d..f29d181 100644 --- a/sw360/components.py +++ b/sw360/components.py @@ -44,7 +44,7 @@ def __get_components_filtered( full_url = self._add_params(url, {"luceneSearch": "true"}) if page > -1 and page_size > -1: - full_url = self._add_pagination(url, page, page_size, sort) + full_url = self._add_pagination(full_url, page, page_size, sort) if page_size == -1: resp = self.api_get_all(full_url, sort) diff --git a/sw360/moderationrequests.py b/sw360/moderationrequests.py index 4027d9d..79c2aa7 100644 --- a/sw360/moderationrequests.py +++ b/sw360/moderationrequests.py @@ -12,55 +12,66 @@ from sw360.sw360error import SW360Error from .base import BaseMixin +from .sorting import ModerationSortColumn, SortParam class ModerationRequestMixin(BaseMixin): - def get_all_moderation_requests(self, page: int = -1, page_size: int = -1, - sort: str = "") -> Optional[Dict[str, Any]]: + def get_all_moderation_requests( + self, page: int = -1, page_size: int = -1, + sort: Optional[SortParam] = None + ) -> Optional[Dict[str, Any]]: """Get information of about all moderation requests API endpoint: GET /moderationrequest :param page: page to retrieve :type page: int - :param page_size: page size to use + :param page_size: page size to use, `-1` to get all :type page_size: int - :param sort: sort order for the packages ("name,desc"; "name,asc") - :type sort: str + :param sort: sort order for the components (Sort by request date if + `None`) + :type sort: SortParam :return: list of moderation requests :rtype: list of JSON moderation requests objects :raises SW360Error: if there is a negative HTTP response """ fullbase_url = self.url + "resource/api/moderationrequest" - params = {} + params = {"luceneSearch": "true"} - if page > -1: - params["page"] = str(page) - params["page_entries"] = str(page_size) - - if sort: - params["sort"] = sort + if sort is None: + sort = ModerationSortColumn.REQUEST_DATE.desc() full_url = self._add_params(fullbase_url, params) - resp = self.api_get(full_url) + if page > -1 and page_size > -1: + full_url = self._add_pagination(full_url, page, page_size, sort) + + if page_size == -1: + resp = self.api_get_all(full_url, sort) + else: + resp = self.api_get(full_url) + return resp - def get_moderation_requests_by_state(self, state: str, all_details: bool = False, - page: int = -1, page_size: int = -1, - sort: str = "") -> Optional[Dict[str, Any]]: + def get_moderation_requests_by_state( + self, state: str, all_details: bool = False, page: int = -1, + page_size: int = -1, sort: Optional[SortParam] = None + ) -> Optional[Dict[str, Any]]: """Get information of about all moderation requests API endpoint: GET /moderationrequest/byState - :param all_details: retrieve all package details (optional)) + :param state: State of the moderation request. One of "open", "closed" + :type state: string + :param all_details: retrieve all moderation details (optional) :type all_details: bool :param page: page to retrieve :type page: int - :param page_size: page size to use + :param page_size: page size to use, `-1` to get all :type page_size: int - :param sort: sort order for the packages ("name,desc"; "name,asc") - :type sort: str + :param sort: sort order for the components (Sort by request date if + `None`) + :type sort: SortParam :return: list of moderation requests :rtype: list of JSON moderation requests objects :raises SW360Error: if there is a negative HTTP response @@ -74,15 +85,18 @@ def get_moderation_requests_by_state(self, state: str, all_details: bool = False if all_details: params["allDetails"] = "true" - if page > -1: - params["page"] = str(page) - params["page_entries"] = str(page_size) - - if sort: - params["sort"] = sort + if sort is None: + sort = ModerationSortColumn.REQUEST_DATE.desc() full_url = self._add_params(fullbase_url, params) - resp = self.api_get(full_url) + if page > -1 and page_size > -1: + full_url = self._add_pagination(full_url, page, page_size, sort) + + if page_size == -1: + resp = self.api_get_all(full_url, sort) + else: + resp = self.api_get(full_url) + return resp def get_moderation_request(self, mr_id: str) -> Optional[Dict[str, Any]]: diff --git a/sw360/project.py b/sw360/project.py index 49355ce..155b795 100644 --- a/sw360/project.py +++ b/sw360/project.py @@ -99,7 +99,7 @@ def __get_projects_filtered( full_url = self._add_params(url, {"luceneSearch": "true"}) if page > -1 and page_size > -1: - full_url = self._add_pagination(url, page, page_size, sort) + full_url = self._add_pagination(full_url, page, page_size, sort) if page_size == -1: resp = self.api_get_all(full_url, sort) diff --git a/sw360/sorting.py b/sw360/sorting.py index 3d442cb..be81272 100644 --- a/sw360/sorting.py +++ b/sw360/sorting.py @@ -59,3 +59,14 @@ class LicenseSortColumn(BaseSortMixin, Enum): SCORE = "score" FULL_NAME = "fullName" SHORT_NAME = "shortName" + + +class ModerationSortColumn(BaseSortMixin, Enum): + SCORE = "score" + DOCUMENT_NAME = "documentName" + DOCUMENT_TYPE = "documentType" + COMPONENT_TYPE = "componentType" + MODERATION_STATE = "moderationState" + REQUEST_DATE = "requestDate" + REQUESTING_USER = "requestingUser" + REQUESTING_USER_DEPARTMENT = "requestingUserDepartment" diff --git a/tests/test_sw360_components.py b/tests/test_sw360_components.py index e36c36f..4895919 100644 --- a/tests/test_sw360_components.py +++ b/tests/test_sw360_components.py @@ -128,7 +128,7 @@ def test_get_all_components_with_fields_and_paging(self) -> None: self.assertTrue(actual) responses.add( method=responses.GET, - url=self.MYURL + "resource/api/components?fields=ownerCountry&page=1&page_entries=2&sort=name,asc", # noqa + url=self.MYURL + "resource/api/components?fields=ownerCountry&luceneSearch=true&page=1&page_entries=2&sort=name,asc", # noqa body='{"_embedded": {"sw360:components": [{"name": "Tethys.Logging", "ownerCountry": "DE", "componentType": "OSS", "externalIds": {"package-url": "pkg:nuget/Tethys.Logging"}}]}}', # noqa status=200, content_type="application/json", diff --git a/tests/test_sw360_moderationrequests.py b/tests/test_sw360_moderationrequests.py index b53f472..2b8e487 100644 --- a/tests/test_sw360_moderationrequests.py +++ b/tests/test_sw360_moderationrequests.py @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------- -# Copyright (c) 2024 Siemens +# Copyright (c) 2024-2026 Siemens # All Rights Reserved. -# Author: thomas.graf@siemens.com +# Author: thomas.graf@siemens.com, mishra.gaurav@siemens.com # # Licensed under the MIT license. # SPDX-License-Identifier: MIT @@ -14,6 +14,7 @@ import responses from sw360 import SW360 +from sw360.sorting import ModerationSortColumn sys.path.insert(1, "..") @@ -50,7 +51,8 @@ def test_get_all_moderation_requests(self) -> None: responses.add( method=responses.GET, - url=self.MYURL + "resource/api/moderationrequest?page=2&page_entries=8&sort=timestamp%2Cdesc", + url=self.MYURL + + "resource/api/moderationrequest?luceneSearch=true&page=2&page_entries=8&sort=requestDate%2Cdesc", body='''{ "_embedded": { "sw360:moderationRequests": [ @@ -104,7 +106,7 @@ def test_get_all_moderation_requests(self) -> None: adding_headers={"Authorization": "Token " + self.MYTOKEN}, ) - mrs = lib.get_all_moderation_requests(page=2, page_size=8, sort="timestamp,desc") + mrs = lib.get_all_moderation_requests(page=2, page_size=8, sort=ModerationSortColumn.REQUEST_DATE.desc()) self.assertIsNotNone(mrs) if mrs: self.assertTrue(len(mrs) > 0) @@ -120,7 +122,8 @@ def test_get_moderation_requests_by_state(self) -> None: responses.add( method=responses.GET, - url=self.MYURL + "resource/api/moderationrequest/byState?state=open&allDetails=true&page=2&page_entries=8&sort=timestamp%2Cdesc", # noqa + url=self.MYURL + + "resource/api/moderationrequest/byState?state=open&allDetails=true&page=2&page_entries=8&sort=requestDate%2Cdesc", # noqa body='''{ "_embedded": { "sw360:moderationRequests": [ @@ -174,7 +177,8 @@ def test_get_moderation_requests_by_state(self) -> None: adding_headers={"Authorization": "Token " + self.MYTOKEN}, ) - mrs = lib.get_moderation_requests_by_state("open", True, page=2, page_size=8, sort="timestamp,desc") + mrs = lib.get_moderation_requests_by_state("open", True, page=2, page_size=8, + sort=ModerationSortColumn.REQUEST_DATE.desc()) self.assertIsNotNone(mrs) if mrs: self.assertTrue(len(mrs) > 0) diff --git a/tests/test_sw360_projects.py b/tests/test_sw360_projects.py index 9846ee0..ce0b3d4 100644 --- a/tests/test_sw360_projects.py +++ b/tests/test_sw360_projects.py @@ -225,7 +225,8 @@ def test_get_projects_with_paging(self) -> None: responses.add( responses.GET, - url=self.MYURL + "resource/api/projects?page=1&page_entries=2&sort=name,asc", + url=self.MYURL + + "resource/api/projects?luceneSearch=true&page=1&page_entries=2&sort=name,asc", body='{"_embedded": {"sw360:projects": [{"name": "My Testproject"}]}}', status=200, content_type="application/json", @@ -243,7 +244,8 @@ def test_get_projects_with_paging_and_details(self) -> None: responses.add( responses.GET, - url=self.MYURL + "resource/api/projects?allDetails=true&page=3&page_entries=4&sort=name%2Cdesc", # noqa + url=self.MYURL + + "resource/api/projects?allDetails=true&luceneSearch=true&page=3&page_entries=4&sort=name%2Cdesc", # noqa body='{"_embedded": {"sw360:projects": [{"name": "My Testproject"}]}}', status=200, content_type="application/json",