Skip to content

Commit d4d3484

Browse files
committed
all methods now log and raise exceptions to the caller
1 parent 0f3394e commit d4d3484

File tree

16 files changed

+494
-331
lines changed

16 files changed

+494
-331
lines changed

socketdev/dependencies/__init__.py

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from urllib.parse import urlencode
33
import logging
44
from socketdev.tools import load_files
5+
from socketdev.exceptions import APIFailure
56

67
log = logging.getLogger("socketdev")
78

@@ -13,17 +14,20 @@ def __init__(self, api):
1314
self.api = api
1415

1516
def post(self, files: list, params: dict) -> dict:
16-
loaded_files = []
17-
loaded_files = load_files(files, loaded_files)
17+
loaded_files = load_files(files, [])
1818
path = "dependencies/upload?" + urlencode(params)
19-
response = self.api.do_request(path=path, files=loaded_files, method="POST")
20-
if response.status_code == 200:
21-
result = response.json()
22-
else:
23-
result = {}
24-
log.error(f"Error posting {files} to the Dependency API")
25-
log.error(response.text)
26-
return result
19+
try:
20+
response = self.api.do_request(path=path, files=loaded_files, method="POST")
21+
if response.status_code == 200:
22+
return response.json()
23+
except APIFailure as e:
24+
log.error(f"Socket SDK: API failure while posting dependencies {e}")
25+
raise
26+
except Exception as e:
27+
log.error(f"Socket SDK: Unexpected error while posting dependencies {e}")
28+
raise
29+
30+
return {}
2731

2832
def get(
2933
self,
@@ -33,11 +37,15 @@ def get(
3337
path = "dependencies/search"
3438
payload = {"limit": limit, "offset": offset}
3539
payload_str = json.dumps(payload)
36-
response = self.api.do_request(path=path, method="POST", payload=payload_str)
37-
if response.status_code == 200:
38-
result = response.json()
39-
else:
40-
result = {}
41-
log.error("Unable to retrieve Dependencies")
42-
log.error(response.text)
43-
return result
40+
try:
41+
response = self.api.do_request(path=path, method="POST", payload=payload_str)
42+
if response.status_code == 200:
43+
return response.json()
44+
except APIFailure as e:
45+
log.error(f"Socket SDK: API failure while retrieving dependencies {e}")
46+
raise
47+
except Exception as e:
48+
log.error(f"Socket SDK: Unexpected error while retrieving dependencies {e}")
49+
raise
50+
51+
return {}

socketdev/export/__init__.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from dataclasses import dataclass, asdict
33
from typing import Optional
44
import logging
5+
from socketdev.exceptions import APIFailure
56

67
log = logging.getLogger("socketdev")
78

@@ -40,14 +41,17 @@ def cdx_bom(
4041
path = f"orgs/{org_slug}/export/cdx/{id}"
4142
if query_params:
4243
path += query_params.to_query_params()
43-
response = self.api.do_request(path=path)
44+
try:
45+
response = self.api.do_request(path=path)
46+
if response.status_code == 200:
47+
return response.json()
48+
except APIFailure as e:
49+
log.error(f"Socket SDK: API failure while exporting CDX BOM {e}")
50+
raise
51+
except Exception as e:
52+
log.error(f"Socket SDK: Unexpected error while exporting CDX BOM {e}")
53+
raise
4454

45-
if response.status_code == 200:
46-
return response.json()
47-
# TODO: Add typed response when types are defined
48-
49-
log.error(f"Error exporting CDX BOM: {response.status_code}")
50-
print(response.text)
5155
return {}
5256

5357
def spdx_bom(
@@ -64,12 +68,15 @@ def spdx_bom(
6468
path = f"orgs/{org_slug}/export/spdx/{id}"
6569
if query_params:
6670
path += query_params.to_query_params()
67-
response = self.api.do_request(path=path)
68-
69-
if response.status_code == 200:
70-
return response.json()
71-
# TODO: Add typed response when types are defined
71+
try:
72+
response = self.api.do_request(path=path)
73+
if response.status_code == 200:
74+
return response.json()
75+
except APIFailure as e:
76+
log.error(f"Socket SDK: API failure while exporting SPDX BOM {e}")
77+
raise
78+
except Exception as e:
79+
log.error(f"Socket SDK: Unexpected error while exporting SPDX BOM {e}")
80+
raise
7281

73-
log.error(f"Error exporting SPDX BOM: {response.status_code}")
74-
print(response.text)
7582
return {}

socketdev/fullscans/__init__.py

Lines changed: 99 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from enum import Enum
44
from typing import Any, Dict, List, Optional, Union
55
from dataclasses import dataclass, asdict, field
6-
6+
from socketdev.exceptions import APIFailure
77

88
from ..utils import IntegrationType, Utils
99

@@ -710,137 +710,137 @@ def create_params_string(self, params: dict) -> str:
710710
def get(self, org_slug: str, params: dict, use_types: bool = False) -> Union[dict, GetFullScanMetadataResponse]:
711711
params_arg = self.create_params_string(params)
712712
path = "orgs/" + org_slug + "/full-scans" + str(params_arg)
713-
response = self.api.do_request(path=path)
714-
715-
if response.status_code == 200:
716-
result = response.json()
717-
if use_types:
718-
return GetFullScanMetadataResponse.from_dict({"success": True, "status": 200, "data": result})
719-
return result
720-
721-
error_message = response.json().get("error", {}).get("message", "Unknown error")
722-
log.error(f"Error getting full scan metadata: {response.status_code}, message: {error_message}")
723-
if use_types:
724-
return GetFullScanMetadataResponse.from_dict(
725-
{"success": False, "status": response.status_code, "message": error_message}
726-
)
713+
try:
714+
response = self.api.do_request(path=path)
715+
if response.status_code == 200:
716+
result = response.json()
717+
if use_types:
718+
return GetFullScanMetadataResponse.from_dict({"success": True, "status": 200, "data": result})
719+
return result
720+
except APIFailure as e:
721+
log.error(f"Socket SDK: API failure while getting full scan metadata {e}")
722+
raise
723+
except Exception as e:
724+
log.error(f"Socket SDK: Unexpected error while getting full scan metadata {e}")
725+
raise
726+
727727
return {}
728728

729729
def post(self, files: list, params: FullScanParams, use_types: bool = False) -> Union[dict, CreateFullScanResponse]:
730730
Utils.validate_integration_type(params.integration_type if params.integration_type else "api")
731731
org_slug = str(params.org_slug)
732732
params_dict = params.to_dict()
733733
params_dict.pop("org_slug")
734-
735734
params_arg = self.create_params_string(params_dict)
736-
737735
path = "orgs/" + org_slug + "/full-scans" + str(params_arg)
738736

739-
response = self.api.do_request(path=path, method="POST", files=files)
740-
741-
if response.status_code == 201:
742-
result = response.json()
743-
if use_types:
744-
return CreateFullScanResponse.from_dict({"success": True, "status": 201, "data": result})
745-
return result
737+
try:
738+
response = self.api.do_request(path=path, method="POST", files=files)
739+
if response.status_code == 201:
740+
result = response.json()
741+
if use_types:
742+
return CreateFullScanResponse.from_dict({"success": True, "status": 201, "data": result})
743+
return result
744+
except APIFailure as e:
745+
log.error(f"Socket SDK: API failure while posting full scan {e}")
746+
raise
747+
except Exception as e:
748+
log.error(f"Socket SDK: Unexpected error while posting full scan {e}")
749+
raise
746750

747-
error_message = response.json().get("error", {}).get("message", "Unknown error")
748-
log.error(f"Error posting {files} to the Fullscans API: {response.status_code}, message: {error_message}")
749-
if use_types:
750-
return CreateFullScanResponse.from_dict(
751-
{"success": False, "status": response.status_code, "message": error_message}
752-
)
753751
return {}
754752

755753
def delete(self, org_slug: str, full_scan_id: str) -> dict:
756754
path = "orgs/" + org_slug + "/full-scans/" + full_scan_id
755+
try:
756+
response = self.api.do_request(path=path, method="DELETE")
757+
if response.status_code == 200:
758+
return response.json()
759+
except APIFailure as e:
760+
log.error(f"Socket SDK: API failure while deleting full scan {e}")
761+
raise
762+
except Exception as e:
763+
log.error(f"Socket SDK: Unexpected error while deleting full scan {e}")
764+
raise
757765

758-
response = self.api.do_request(path=path, method="DELETE")
759-
760-
if response.status_code == 200:
761-
result = response.json()
762-
return result
763-
764-
error_message = response.json().get("error", {}).get("message", "Unknown error")
765-
log.error(f"Error deleting full scan: {response.status_code}, message: {error_message}")
766766
return {}
767767

768768
def stream_diff(
769769
self, org_slug: str, before: str, after: str, use_types: bool = False
770770
) -> Union[dict, StreamDiffResponse]:
771771
path = f"orgs/{org_slug}/full-scans/diff?before={before}&after={after}"
772+
try:
773+
response = self.api.do_request(path=path, method="GET")
774+
if response.status_code == 200:
775+
result = response.json()
776+
if use_types:
777+
return StreamDiffResponse.from_dict({"success": True, "status": 200, "data": result})
778+
return result
779+
except APIFailure as e:
780+
log.error(f"Socket SDK: API failure while streaming diff {e}")
781+
raise
782+
except Exception as e:
783+
log.error(f"Socket SDK: Unexpected error while streaming diff {e}")
784+
raise
772785

773-
response = self.api.do_request(path=path, method="GET")
774-
775-
if response.status_code == 200:
776-
result = response.json()
777-
if use_types:
778-
return StreamDiffResponse.from_dict({"success": True, "status": 200, "data": result})
779-
return result
780-
781-
error_message = response.json().get("error", {}).get("message", "Unknown error")
782-
log.error(f"Error streaming diff: {response.status_code}, message: {error_message}")
783-
if use_types:
784-
return StreamDiffResponse.from_dict(
785-
{"success": False, "status": response.status_code, "message": error_message}
786-
)
787786
return {}
788787

789788
def stream(self, org_slug: str, full_scan_id: str, use_types: bool = False) -> Union[dict, FullScanStreamResponse]:
790789
path = "orgs/" + org_slug + "/full-scans/" + full_scan_id
791-
response = self.api.do_request(path=path, method="GET")
792-
793-
if response.status_code == 200:
794-
try:
795-
stream_str = []
796-
artifacts = {}
797-
result = response.text
798-
result = result.strip('"').strip()
799-
for line in result.split("\n"):
800-
if line != '"' and line != "" and line is not None:
801-
item = json.loads(line)
802-
stream_str.append(item)
803-
for val in stream_str:
804-
artifacts[val["id"]] = val
805-
806-
if use_types:
807-
return FullScanStreamResponse.from_dict({"success": True, "status": 200, "artifacts": artifacts})
808-
return artifacts
790+
try:
791+
response = self.api.do_request(path=path, method="GET")
792+
if response.status_code == 200:
793+
try:
794+
stream_str = []
795+
artifacts = {}
796+
result = response.text.strip('"').strip()
797+
for line in result.split("\n"):
798+
if line != '"' and line != "" and line is not None:
799+
item = json.loads(line)
800+
stream_str.append(item)
801+
for val in stream_str:
802+
artifacts[val["id"]] = val
803+
804+
if use_types:
805+
return FullScanStreamResponse.from_dict(
806+
{"success": True, "status": 200, "artifacts": artifacts}
807+
)
808+
return artifacts
809+
810+
except Exception as e:
811+
error_message = f"Error parsing stream response: {str(e)}"
812+
log.error(error_message)
813+
if use_types:
814+
return FullScanStreamResponse.from_dict(
815+
{"success": False, "status": response.status_code, "message": error_message}
816+
)
817+
return {}
818+
819+
except APIFailure as e:
820+
log.error(f"Socket SDK: API failure while streaming full scan {e}")
821+
raise
822+
except Exception as e:
823+
log.error(f"Socket SDK: Unexpected error while streaming full scan {e}")
824+
raise
809825

810-
except Exception as e:
811-
error_message = f"Error parsing stream response: {str(e)}"
812-
log.error(error_message)
813-
if use_types:
814-
return FullScanStreamResponse.from_dict(
815-
{"success": False, "status": response.status_code, "message": error_message}
816-
)
817-
return {}
818-
819-
error_message = response.json().get("error", {}).get("message", "Unknown error")
820-
log.error(f"Error streaming full scan: {response.status_code}, message: {error_message}")
821-
if use_types:
822-
return FullScanStreamResponse.from_dict(
823-
{"success": False, "status": response.status_code, "message": error_message}
824-
)
825826
return {}
826827

827828
def metadata(
828829
self, org_slug: str, full_scan_id: str, use_types: bool = False
829830
) -> Union[dict, GetFullScanMetadataResponse]:
830831
path = "orgs/" + org_slug + "/full-scans/" + full_scan_id + "/metadata"
832+
try:
833+
response = self.api.do_request(path=path, method="GET")
834+
if response.status_code == 200:
835+
result = response.json()
836+
if use_types:
837+
return GetFullScanMetadataResponse.from_dict({"success": True, "status": 200, "data": result})
838+
return result
839+
except APIFailure as e:
840+
log.error(f"Socket SDK: API failure while getting metadata {e}")
841+
raise
842+
except Exception as e:
843+
log.error(f"Socket SDK: Unexpected error while getting metadata {e}")
844+
raise
831845

832-
response = self.api.do_request(path=path, method="GET")
833-
834-
if response.status_code == 200:
835-
result = response.json()
836-
if use_types:
837-
return GetFullScanMetadataResponse.from_dict({"success": True, "status": 200, "data": result})
838-
return result
839-
840-
error_message = response.json().get("error", {}).get("message", "Unknown error")
841-
log.error(f"Error getting metadata: {response.status_code}, message: {error_message}")
842-
if use_types:
843-
return GetFullScanMetadataResponse.from_dict(
844-
{"success": False, "status": response.status_code, "message": error_message}
845-
)
846846
return {}

0 commit comments

Comments
 (0)