Skip to content

Commit 4cefdcd

Browse files
committed
Merge branch 'master' of https://github.com/sw360/sw360python
2 parents 8bceb35 + 884d6a8 commit 4cefdcd

File tree

8 files changed

+93
-82
lines changed

8 files changed

+93
-82
lines changed

sw360/base.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import requests
1313

14+
from urllib.parse import urlencode
15+
1416
from .sw360error import SW360Error
1517

1618

@@ -217,16 +219,17 @@ def _update_external_ids(self, current_data: Dict[str, Any], ext_id_name: str, e
217219
update = False
218220

219221
return (old_value, ext_id_data, update)
220-
221-
def _add_param(self, url: str, param: str) -> str:
222+
223+
def _add_params(self, url: str, params: Dict[str, str]) -> str:
222224
"""Add the given parameter to the given url"""
225+
226+
query_string = urlencode(params)
227+
223228
if "?" in url:
224-
url = url + "&"
229+
return f"{url}&{query_string}"
225230
else:
226-
url = url + "?"
227-
228-
return url + param
229-
231+
return f"{url}?{query_string}"
232+
230233
@classmethod
231234
def get_id_from_href(cls, href: str) -> str:
232235
""""Extracts the identifier from the href and returns it

sw360/components.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,25 @@ def get_all_components(self, fields: str = "", page: int = -1, page_size: int =
3737
:rtype: list of JSON component objects
3838
:raises SW360Error: if there is a negative HTTP response
3939
"""
40-
41-
url = self.url + "resource/api/components"
40+
41+
fullbase_url = self.url + "resource/api/components"
42+
params = {}
4243

4344
if all_details:
44-
url = self._add_param(url, "allDetails=true")
45+
params["allDetails"] = "true"
4546

4647
if fields:
47-
url = self._add_param(url, "fields=" + fields)
48+
params["fields"] = fields
4849

4950
if page > -1:
50-
url = self._add_param(url, "page=" + str(page))
51-
url = self._add_param(url, "page_entries=" + str(page_size))
51+
params["page"] = str(page)
52+
params["page_entries"] = str(page_size)
5253

5354
if sort:
54-
# ensure HTML encoding
55-
sort = sort.replace(",", "%2C")
56-
url = self._add_param(url, "sort=" + sort)
55+
params["sort"] = sort
5756

58-
resp = self.api_get(url)
57+
full_url = self._add_params(fullbase_url, params)
58+
resp = self.api_get(full_url)
5959
if not resp:
6060
return []
6161

@@ -94,18 +94,18 @@ def get_components_by_type(
9494
:raises SW360Error: if there is a negative HTTP response
9595
"""
9696

97-
url = self.url + "resource/api/components?type=" + component_type
97+
fullbase_url = self.url + "resource/api/components"
98+
params = {"type": component_type}
9899

99100
if page > -1:
100-
url = self._add_param(url, "page=" + str(page))
101-
url = self._add_param(url, "page_entries=" + str(page_size))
101+
params["page"] = str(page)
102+
params["page_entries"] = str(page_size)
102103

103104
if sort:
104-
# ensure HTML encoding
105-
sort = sort.replace(",", "%2C")
106-
url = self._add_param(url, "sort=" + sort)
105+
params["sort"] = sort
107106

108-
resp = self.api_get(url)
107+
full_url = self._add_params(fullbase_url, params)
108+
resp = self.api_get(full_url)
109109

110110
if resp and ("_embedded" in resp) and ("sw360:components" in resp["_embedded"]):
111111
return resp["_embedded"]["sw360:components"]
@@ -165,17 +165,18 @@ def get_component_by_name(
165165
:raises SW360Error: if there is a negative HTTP response
166166
"""
167167

168-
url = self.url + "resource/api/components?name=" + component_name
168+
fullbase_url = self.url + "resource/api/components"
169+
params = {"name": component_name}
170+
169171
if page > -1:
170-
url = self._add_param(url, "page=" + str(page))
171-
url = self._add_param(url, "page_entries=" + str(page_size))
172+
params["page"] = str(page)
173+
params["page_entries"] = str(page_size)
172174

173175
if sort:
174-
# ensure HTML encoding
175-
sort = sort.replace(",", "%2C")
176-
url = self._add_param(url, "sort=" + sort)
176+
params["sort"] = sort
177177

178-
resp = self.api_get(url)
178+
full_url = self._add_params(fullbase_url, params)
179+
resp = self.api_get(full_url)
179180
return resp
180181

181182
def get_components_by_external_id(self, ext_id_name: str, ext_id_value: str = "") -> List[Dict[str, Any]]:

sw360/moderationrequests.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,17 @@ def get_all_moderation_requests(self, page: int = -1, page_size: int = -1,
3030
:raises SW360Error: if there is a negative HTTP response
3131
"""
3232

33-
full_url = self.url + "resource/api/moderationrequest"
33+
fullbase_url = self.url + "resource/api/moderationrequest"
34+
params = {}
35+
3436
if page > -1:
35-
full_url = self._add_param(full_url, "page=" + str(page))
36-
full_url = self._add_param(full_url, "page_entries=" + str(page_size))
37+
params["page"] = str(page)
38+
params["page_entries"] = str(page_size)
3739

3840
if sort:
39-
# ensure HTML encoding
40-
sort = sort.replace(",", "%2C")
41-
full_url = self._add_param(full_url, "sort=" + sort)
41+
params["sort"] = sort
4242

43+
full_url = self._add_params(fullbase_url, params)
4344
resp = self.api_get(full_url)
4445
return resp
4546

@@ -63,22 +64,23 @@ def get_moderation_requests_by_state(self, state: str, all_details: bool = False
6364
:raises SW360Error: if there is a negative HTTP response
6465
"""
6566

66-
full_url = self.url + "resource/api/moderationrequest/byState?state=" + state
67+
fullbase_url = self.url + "resource/api/moderationrequest/byState"
68+
params = {"state": state}
69+
6770
if all_details:
68-
full_url = self._add_param(full_url, "allDetails=true")
71+
params["allDetails"] = "true"
6972

7073
if page > -1:
71-
full_url = self._add_param(full_url, "page=" + str(page))
72-
full_url = self._add_param(full_url, "page_entries=" + str(page_size))
74+
params["page"] = str(page)
75+
params["page_entries"] = str(page_size)
7376

7477
if sort:
75-
# ensure HTML encoding
76-
sort = sort.replace(",", "%2C")
77-
full_url = self._add_param(full_url, "sort=" + sort)
78+
params["sort"] = sort
7879

80+
full_url = self._add_params(fullbase_url, params)
7981
resp = self.api_get(full_url)
8082
return resp
81-
83+
8284
def get_moderation_request(self, mr_id: str) -> Optional[Dict[str, Any]]:
8385
"""Get information of about a moderation request
8486

sw360/packages.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -------------------------------------------------------------------------------
2-
# Copyright (c) 2024 Siemens
2+
# Copyright (c) 2024-2025 Siemens
33
# All Rights Reserved.
44
55
#
@@ -65,26 +65,29 @@ def get_all_packages(self, name: str = "", version: str = "", purl: str = "",
6565
:rtype: list of JSON package objects
6666
:raises SW360Error: if there is a negative HTTP response
6767
"""
68-
full_url = self.url + "resource/api/packages"
68+
fullbase_url = self.url + "resource/api/packages"
69+
params = {}
70+
6971
if all_details:
70-
full_url = self._add_param(full_url, "allDetails=true")
72+
params["allDetails"] = "true"
7173

7274
if name:
73-
full_url = self._add_param(full_url, "name=" + name)
75+
params["name"] = name
76+
7477
if version:
75-
full_url = self._add_param(full_url, "version=" + version)
78+
params["version"] = version
79+
7680
if purl:
77-
full_url = self._add_param(full_url, "purl=" + purl)
81+
params["purl"] = purl
7882

7983
if page > -1:
80-
full_url = self._add_param(full_url, "page=" + str(page))
81-
full_url = self._add_param(full_url, "page_entries=" + str(page_size))
84+
params["page"] = str(page)
85+
params["page_entries"] = str(page_size)
8286

8387
if sort:
84-
# ensure HTML encoding
85-
sort = sort.replace(",", "%2C")
86-
full_url = self._add_param(full_url, "sort=" + sort)
88+
params["sort"] = sort
8789

90+
full_url = self._add_params(fullbase_url, params)
8891
resp = self.api_get(full_url)
8992

9093
if page == -1 and resp and ("_embedded" in resp) and ("sw360:packages" in resp["_embedded"]):
@@ -110,18 +113,17 @@ def get_packages_by_packagemanager(self, manager: str, page: int = -1,
110113
:rtype: list of JSON package objects
111114
:raises SW360Error: if there is a negative HTTP response
112115
"""
113-
full_url = self.url + "resource/api/packages"
114-
full_url = self._add_param(full_url, "packageManager=" + str(manager))
116+
fullbase_url = self.url + "resource/api/packages"
117+
params = {"packageManager": manager}
115118

116119
if page > -1:
117-
full_url = self._add_param(full_url, "page=" + str(page))
118-
full_url = self._add_param(full_url, "page_entries=" + str(page_size))
120+
params["page"] = str(page)
121+
params["page_entries"] = str(page_size)
119122

120123
if sort:
121-
# ensure HTML encoding
122-
sort = sort.replace(",", "%2C")
123-
full_url = self._add_param(full_url, "sort=" + sort)
124+
params["sort"] = sort
124125

126+
full_url = self._add_params(fullbase_url, params)
125127
resp = self.api_get(full_url)
126128

127129
if page == -1 and resp and ("_embedded" in resp) and ("sw360:packages" in resp["_embedded"]):

sw360/project.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,20 @@ def get_projects(self, all_details: bool = False, page: int = -1,
8383
:raises SW360Error: if there is a negative HTTP response
8484
"""
8585

86-
full_url = self.url + "resource/api/projects"
86+
fullbase_url = self.url + "resource/api/projects"
87+
params = {}
88+
8789
if all_details:
88-
full_url = self._add_param(full_url, "allDetails=true")
90+
params["allDetails"] = "true"
8991

9092
if page > -1:
91-
full_url = self._add_param(full_url, "page=" + str(page))
92-
full_url = self._add_param(full_url, "page_entries=" + str(page_size))
93+
params["page"] = str(page)
94+
params["page_entries"] = str(page_size)
9395

9496
if sort:
95-
# ensure HTML encoding
96-
sort = sort.replace(",", "%2C")
97-
full_url = self._add_param(full_url, "sort=" + sort)
97+
params["sort"] = sort
9898

99+
full_url = self._add_params(fullbase_url, params)
99100
resp = self.api_get(full_url)
100101
return resp
101102

sw360/releases.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,24 +85,26 @@ def get_all_releases(self, fields: str = "", all_details: bool = False,
8585
:rtype: list of JSON release objects
8686
:raises SW360Error: if there is a negative HTTP response
8787
"""
88-
full_url = self.url + "resource/api/releases"
88+
fullbase_url = self.url + "resource/api/releases"
89+
params = {}
90+
8991
if all_details:
90-
full_url = self._add_param(full_url, "allDetails=true")
92+
params["allDetails"] = "true"
9193

9294
if isNewClearingWithSourceAvailable:
93-
full_url = self._add_param(full_url, "isNewClearingWithSourceAvailable=true")
95+
params["isNewClearingWithSourceAvailable"] = "true"
9496

9597
if fields:
96-
full_url = self._add_param(full_url, "fields=" + fields)
98+
params["fields"] = fields
9799

98100
if page > -1:
99-
full_url = self._add_param(full_url, "page=" + str(page))
100-
full_url = self._add_param(full_url, "page_entries=" + str(page_size))
101+
params["page"] = str(page)
102+
params["page_entries"] = str(page_size)
101103

102104
if sort:
103-
# ensure HTML encoding
104-
sort = sort.replace(",", "%2C")
105-
full_url = self._add_param(full_url, "sort=" + sort)
105+
params["sort"] = sort
106+
107+
full_url = self._add_params(fullbase_url, params)
106108

107109
resp = self.api_get(full_url)
108110

sw360/vendor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def create_new_vendor(self, vendor: Dict[str, Any]) -> Dict[str, Any]:
5252
5353
API endpoint: POST /vendors
5454
55-
:param vendor: the new vedor data
55+
:param vendor: the new vendor data
5656
:type vendor: JSON vendor object
5757
:raises SW360Error: if there is a negative HTTP response
5858
"""

tests/test_sw360_packages.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def test_get_packages_by_packagemanager_with_details(self) -> None:
202202
adding_headers={"Authorization": "Token " + self.MYTOKEN},
203203
)
204204

205-
packages = lib.get_packages_by_packagemanager("nuget", page=1, page_size=5, sort="name%2Cdesc")
205+
packages = lib.get_packages_by_packagemanager("nuget", page=1, page_size=5, sort="name,desc")
206206
self.assertIsNotNone(packages)
207207
self.assertTrue(len(packages) > 0)
208208
pkgs = packages["_embedded"]["sw360:packages"]
@@ -410,4 +410,4 @@ def test_delete_package_failed(self) -> None:
410410

411411
if __name__ == "__main__":
412412
APP = Sw360TestPackages()
413-
APP.test_get_packages_by_packagemanager()
413+
APP.test_get_packages_by_packagemanager_with_details()

0 commit comments

Comments
 (0)