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
2 changes: 1 addition & 1 deletion sw360/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
68 changes: 41 additions & 27 deletions sw360/moderationrequests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]]:
Expand Down
2 changes: 1 addition & 1 deletion sw360/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
11 changes: 11 additions & 0 deletions sw360/sorting.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
2 changes: 1 addition & 1 deletion tests/test_sw360_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
16 changes: 10 additions & 6 deletions tests/test_sw360_moderationrequests.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -14,6 +14,7 @@
import responses

from sw360 import SW360
from sw360.sorting import ModerationSortColumn

sys.path.insert(1, "..")

Expand Down Expand Up @@ -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": [
Expand Down Expand Up @@ -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)
Expand All @@ -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": [
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 4 additions & 2 deletions tests/test_sw360_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
Loading