Skip to content

Commit 6f67b7d

Browse files
committed
fix/refactor: latest updates from Siemens internal project
1 parent c767b88 commit 6f67b7d

2 files changed

Lines changed: 40 additions & 60 deletions

File tree

sw360/sw360_api.py

Lines changed: 12 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# SPDX-License-Identifier: MIT
88
# -------------------------------------------------------------------------------
99

10-
"""Python interface to the SW360 platform"""
10+
"""Python interface to the Siemens SW360 platform"""
1111

1212
import json
1313
import os
@@ -413,18 +413,13 @@ def create_new_project(self, name, project_type, visibility,
413413
:rtype: JSON SW360 result object
414414
:raises SW360Error: if there is a negative HTTP response
415415
"""
416-
hdr = self.api_headers.copy()
417-
hdr["Content-Type"] = "application/hal+json"
418-
hdr["Accept"] = "application/hal+json"
419-
420416
for param in "name", "visibility", "version", "description":
421417
project_details[param] = locals()[param]
422418
project_details["projectType"] = project_type
423419

424-
project_json = json.dumps(project_details)
425420
url = self.url + "resource/api/projects"
426421
response = requests.post(
427-
url, project_json, headers=hdr
422+
url, json=project_details, headers=self.api_headers
428423
)
429424

430425
if response.ok:
@@ -446,15 +441,8 @@ def update_project(self, project, project_id):
446441
:raises SW360Error: if there is a negative HTTP response
447442
"""
448443
# 2019-04-03: error 405 - method not allowed
449-
hdr = self.api_headers.copy()
450-
hdr["Content-Type"] = "application/hal+json"
451-
hdr["Accept"] = "application/hal+json"
452-
453-
project_json = json.dumps(project)
454444
url = self.url + "resource/api/projects/" + project_id
455-
response = requests.patch(
456-
url, project_json, headers=hdr
457-
)
445+
response = requests.patch(url, json=project, headers=self.api_headers)
458446

459447
if response.ok:
460448
return response.json()
@@ -484,21 +472,15 @@ def update_project_releases(self, releases, project_id, add=False):
484472

485473
if add:
486474
old_releases = self.get_project_releases(project_id)
487-
if old_releases is not None:
475+
if (old_releases is not None and "_embedded" in old_releases
476+
and "sw360:releases" in old_releases["_embedded"]):
488477
old_releases = old_releases["_embedded"]["sw360:releases"]
489478
old_releases = [r["_links"]["self"]["href"] for r in old_releases]
490479
old_releases = [r.split("/")[-1] for r in old_releases]
491480
releases = old_releases + list(releases)
492481

493-
hdr = self.api_headers.copy()
494-
hdr["Content-Type"] = "application/hal+json"
495-
hdr["Accept"] = "application/hal+json"
496-
project_json = json.dumps(releases)
497-
498482
url = self.url + "resource/api/projects/" + project_id + "/releases"
499-
response = requests.post(
500-
url, project_json, headers=hdr,
501-
)
483+
response = requests.post(url, json=releases, headers=self.api_headers)
502484

503485
if response.ok:
504486
return True
@@ -670,18 +652,13 @@ def create_new_release(self, name, version, component_id, release_details={}):
670652
:raises SW360Error: if there is a negative HTTP response
671653
"""
672654

673-
hdr = self.api_headers.copy()
674-
hdr["Content-Type"] = "application/hal+json"
675-
hdr["Accept"] = "application/hal+json"
676-
677655
for param in "name", "version":
678656
release_details[param] = locals()[param]
679657
release_details["componentId"] = component_id
680658

681-
release_json = json.dumps(release_details)
682659
url = self.url + "resource/api/releases"
683660
response = requests.post(
684-
url, release_json, headers=hdr
661+
url, json=release_details, headers=self.api_headers
685662
)
686663
if response.ok:
687664
return response.json()
@@ -705,15 +682,8 @@ def update_release(self, release, release_id):
705682
if not release_id:
706683
raise SW360Error(message="No release id provided!")
707684

708-
hdr = self.api_headers.copy()
709-
hdr["Content-Type"] = "application/hal+json"
710-
hdr["Accept"] = "application/hal+json"
711-
712-
release_json = json.dumps(release)
713685
url = self.url + "resource/api/releases/" + release_id
714-
response = requests.patch(
715-
url, release_json, headers=hdr
716-
)
686+
response = requests.patch(url, json=release, headers=self.api_headers)
717687
if response.ok:
718688
return response.json()
719689

@@ -930,20 +900,14 @@ def create_new_component(self, name, description, component_type, homepage,
930900
:raises SW360Error: if there is a negative HTTP response
931901
"""
932902

933-
hdr = self.api_headers.copy()
934-
hdr["Content-Type"] = "application/hal+json"
935-
hdr["Accept"] = "application/hal+json"
936-
937903
url = self.url + "resource/api/components"
938904

939905
for param in "name", "description", "homepage":
940906
component_details[param] = locals()[param]
941907
component_details["componentType"] = component_type
942908

943-
component_json = json.dumps(component_details)
944-
945909
response = requests.post(
946-
url, component_json, headers=hdr
910+
url, json=component_details, headers=self.api_headers
947911
)
948912
if response.ok:
949913
return response.json()
@@ -967,14 +931,9 @@ def update_component(self, component, component_id):
967931
if not component_id:
968932
raise SW360Error(message="No component id provided!")
969933

970-
hdr = self.api_headers.copy()
971-
hdr["Content-Type"] = "application/hal+json"
972-
hdr["Accept"] = "application/hal+json"
973-
974-
component_json = json.dumps(component)
975934
url = self.url + "resource/api/components/" + component_id
976935
response = requests.patch(
977-
url, component_json, headers=hdr,
936+
url, json=component, headers=self.api_headers,
978937
)
979938

980939
if response.ok:
@@ -1079,14 +1038,9 @@ def create_new_vendor(self, vendor):
10791038
:raises SW360Error: if there is a negative HTTP response
10801039
"""
10811040

1082-
hdr = self.api_headers.copy()
1083-
hdr["Content-Type"] = "application/hal+json"
1084-
hdr["Accept"] = "application/hal+json"
1085-
1086-
vendor_json = json.dumps(vendor)
10871041
url = self.url + "resource/api/vendors"
10881042
response = requests.post(
1089-
url, vendor_json, headers=hdr
1043+
url, json=vendor, headers=self.api_headers
10901044
)
10911045
if response.ok:
10921046
return response.json()
@@ -1108,10 +1062,9 @@ def update_vendor(self, vendor, vendor_id):
11081062
if not vendor_id:
11091063
raise SW360Error(message="No vendor id provided!")
11101064

1111-
vendor_json = json.dumps(vendor)
11121065
url = self.url + "resource/api/vendors/" + vendor_id
11131066
response = requests.patch(
1114-
url, vendor_json, headers=self.api_headers
1067+
url, json=vendor, headers=self.api_headers
11151068
)
11161069
if response.ok:
11171070
return response.json()

tests/test_sw360_projects.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -------------------------------------------------------------------------------
2-
# (c) 2019-2020 Siemens AG
2+
# (c) 2019-2021 Siemens AG
33
# All Rights Reserved.
44
# Author: thomas.graf@siemens.com
55
#
@@ -577,6 +577,33 @@ def test_update_project_releases_no_id(self):
577577

578578
self.assertEqual("No project id provided!", context.exception.message)
579579

580+
@responses.activate
581+
def test_update_project_releases_fresh_prj(self):
582+
lib = self.get_logged_in_lib()
583+
responses.add(
584+
responses.GET,
585+
url=self.MYURL + "resource/api/projects/123/releases?transitive=false",
586+
json={},
587+
)
588+
responses.add(
589+
responses.POST,
590+
url=self.MYURL + "resource/api/projects/123/releases",
591+
status=202,
592+
)
593+
lib.update_project_releases({}, "123", add=True)
594+
595+
responses.add(
596+
responses.GET,
597+
url=self.MYURL + "resource/api/projects/124/releases?transitive=false",
598+
json={'_embedded': {'sw360:projects': []}},
599+
)
600+
responses.add(
601+
responses.POST,
602+
url=self.MYURL + "resource/api/projects/124/releases",
603+
status=202,
604+
)
605+
lib.update_project_releases({}, "124", add=True)
606+
580607
@responses.activate
581608
def test_update_project_releases(self):
582609
lib = self.get_logged_in_lib()

0 commit comments

Comments
 (0)