capo-codeguru-security 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- capo_codeguru_security/__init__.py +74 -0
- capo_codeguru_security/_async.py +25 -0
- capo_codeguru_security/_auth/_identity.py +16 -0
- capo_codeguru_security/_auth/_providers.py +886 -0
- capo_codeguru_security/_auth/_signers.py +88 -0
- capo_codeguru_security/_auth/_sigv4.py +434 -0
- capo_codeguru_security/_auth/_zapros_handler.py +80 -0
- capo_codeguru_security/_iter.py +113 -0
- capo_codeguru_security/_operations/aws_code_guru_security/batch_get_findings.py +167 -0
- capo_codeguru_security/_operations/aws_code_guru_security/create_scan.py +183 -0
- capo_codeguru_security/_operations/aws_code_guru_security/create_upload_url.py +165 -0
- capo_codeguru_security/_operations/aws_code_guru_security/get_account_configuration.py +161 -0
- capo_codeguru_security/_operations/aws_code_guru_security/get_findings.py +191 -0
- capo_codeguru_security/_operations/aws_code_guru_security/get_metrics_summary.py +176 -0
- capo_codeguru_security/_operations/aws_code_guru_security/get_scan.py +173 -0
- capo_codeguru_security/_operations/aws_code_guru_security/list_findings_metrics.py +185 -0
- capo_codeguru_security/_operations/aws_code_guru_security/list_scans.py +167 -0
- capo_codeguru_security/_operations/aws_code_guru_security/list_tags_for_resource.py +173 -0
- capo_codeguru_security/_operations/aws_code_guru_security/tag_resource.py +173 -0
- capo_codeguru_security/_operations/aws_code_guru_security/untag_resource.py +171 -0
- capo_codeguru_security/_operations/aws_code_guru_security/update_account_configuration.py +172 -0
- capo_codeguru_security/_pagination.py +21 -0
- capo_codeguru_security/_protocol/__init__.py +1 -0
- capo_codeguru_security/_protocol/errors.py +93 -0
- capo_codeguru_security/_protocol/eventstream.py +238 -0
- capo_codeguru_security/_protocol/serialize.py +47 -0
- capo_codeguru_security/_protocol/xml.py +33 -0
- capo_codeguru_security/_rule_engine/__init__.py +0 -0
- capo_codeguru_security/_rule_engine/_aws_partition.py +160 -0
- capo_codeguru_security/_rule_engine/_endpoint_rule_set.py +137 -0
- capo_codeguru_security/_rule_engine/_endpoint_runtime.py +389 -0
- capo_codeguru_security/_services/_aws_config.py +160 -0
- capo_codeguru_security/_services/_pipeline.py +198 -0
- capo_codeguru_security/_services/async_code_guru_security.py +934 -0
- capo_codeguru_security/_services/code_guru_security.py +921 -0
- capo_codeguru_security/errors/__init__.py +33 -0
- capo_codeguru_security/errors/_base.py +94 -0
- capo_codeguru_security/errors/access_denied_exception.py +67 -0
- capo_codeguru_security/errors/conflict_exception.py +67 -0
- capo_codeguru_security/errors/internal_server_exception.py +53 -0
- capo_codeguru_security/errors/resource_not_found_exception.py +69 -0
- capo_codeguru_security/errors/throttling_exception.py +65 -0
- capo_codeguru_security/errors/validation_exception.py +98 -0
- capo_codeguru_security/py.typed +0 -0
- capo_codeguru_security/types/_prelude/blob.py +12 -0
- capo_codeguru_security/types/_prelude/timestamp.py +17 -0
- capo_codeguru_security/types/account_findings_metric.py +118 -0
- capo_codeguru_security/types/analysis_type.py +17 -0
- capo_codeguru_security/types/batch_get_findings_error.py +61 -0
- capo_codeguru_security/types/batch_get_findings_errors.py +35 -0
- capo_codeguru_security/types/batch_get_findings_request.py +47 -0
- capo_codeguru_security/types/batch_get_findings_response.py +61 -0
- capo_codeguru_security/types/categories_with_most_findings.py +37 -0
- capo_codeguru_security/types/category_with_finding_num.py +29 -0
- capo_codeguru_security/types/client_token.py +5 -0
- capo_codeguru_security/types/code_line.py +29 -0
- capo_codeguru_security/types/code_snippet.py +29 -0
- capo_codeguru_security/types/create_scan_request.py +101 -0
- capo_codeguru_security/types/create_scan_response.py +78 -0
- capo_codeguru_security/types/create_upload_url_request.py +31 -0
- capo_codeguru_security/types/create_upload_url_response.py +59 -0
- capo_codeguru_security/types/detector_tags.py +14 -0
- capo_codeguru_security/types/encryption_config.py +28 -0
- capo_codeguru_security/types/error_code.py +20 -0
- capo_codeguru_security/types/error_message.py +5 -0
- capo_codeguru_security/types/file_path.py +62 -0
- capo_codeguru_security/types/finding.py +207 -0
- capo_codeguru_security/types/finding_identifier.py +33 -0
- capo_codeguru_security/types/finding_identifiers.py +33 -0
- capo_codeguru_security/types/finding_metrics_value_per_severity.py +87 -0
- capo_codeguru_security/types/findings.py +29 -0
- capo_codeguru_security/types/findings_metric_list.py +35 -0
- capo_codeguru_security/types/get_account_configuration_request.py +18 -0
- capo_codeguru_security/types/get_account_configuration_response.py +45 -0
- capo_codeguru_security/types/get_findings_request.py +32 -0
- capo_codeguru_security/types/get_findings_response.py +43 -0
- capo_codeguru_security/types/get_metrics_summary_request.py +24 -0
- capo_codeguru_security/types/get_metrics_summary_response.py +42 -0
- capo_codeguru_security/types/get_scan_request.py +27 -0
- capo_codeguru_security/types/get_scan_response.py +132 -0
- capo_codeguru_security/types/header_key.py +5 -0
- capo_codeguru_security/types/header_value.py +5 -0
- capo_codeguru_security/types/kms_key_arn.py +5 -0
- capo_codeguru_security/types/list_findings_metrics_request.py +32 -0
- capo_codeguru_security/types/list_findings_metrics_response.py +49 -0
- capo_codeguru_security/types/list_scans_request.py +26 -0
- capo_codeguru_security/types/list_scans_response.py +43 -0
- capo_codeguru_security/types/list_tags_for_resource_request.py +24 -0
- capo_codeguru_security/types/list_tags_for_resource_response.py +34 -0
- capo_codeguru_security/types/metrics_summary.py +121 -0
- capo_codeguru_security/types/next_token.py +5 -0
- capo_codeguru_security/types/recommendation.py +29 -0
- capo_codeguru_security/types/reference_urls.py +14 -0
- capo_codeguru_security/types/related_vulnerabilities.py +14 -0
- capo_codeguru_security/types/remediation.py +63 -0
- capo_codeguru_security/types/request_header_map.py +29 -0
- capo_codeguru_security/types/resource.py +29 -0
- capo_codeguru_security/types/resource_id.py +32 -0
- capo_codeguru_security/types/s3_url.py +5 -0
- capo_codeguru_security/types/scan_name.py +5 -0
- capo_codeguru_security/types/scan_name_arn.py +5 -0
- capo_codeguru_security/types/scan_name_with_finding_num.py +29 -0
- capo_codeguru_security/types/scan_state.py +18 -0
- capo_codeguru_security/types/scan_summaries.py +29 -0
- capo_codeguru_security/types/scan_summary.py +99 -0
- capo_codeguru_security/types/scan_type.py +17 -0
- capo_codeguru_security/types/scans_with_most_open_critical_findings.py +37 -0
- capo_codeguru_security/types/scans_with_most_open_findings.py +37 -0
- capo_codeguru_security/types/severity.py +20 -0
- capo_codeguru_security/types/status.py +18 -0
- capo_codeguru_security/types/suggested_fix.py +29 -0
- capo_codeguru_security/types/suggested_fixes.py +31 -0
- capo_codeguru_security/types/tag_key.py +5 -0
- capo_codeguru_security/types/tag_key_list.py +17 -0
- capo_codeguru_security/types/tag_map.py +29 -0
- capo_codeguru_security/types/tag_resource_request.py +40 -0
- capo_codeguru_security/types/tag_resource_response.py +18 -0
- capo_codeguru_security/types/tag_value.py +5 -0
- capo_codeguru_security/types/untag_resource_request.py +27 -0
- capo_codeguru_security/types/untag_resource_response.py +18 -0
- capo_codeguru_security/types/update_account_configuration_request.py +45 -0
- capo_codeguru_security/types/update_account_configuration_response.py +45 -0
- capo_codeguru_security/types/uuid.py +5 -0
- capo_codeguru_security/types/validation_exception_field.py +33 -0
- capo_codeguru_security/types/validation_exception_field_list.py +37 -0
- capo_codeguru_security/types/validation_exception_reason.py +20 -0
- capo_codeguru_security/types/vulnerability.py +90 -0
- capo_codeguru_security-0.1.0.dist-info/METADATA +101 -0
- capo_codeguru_security-0.1.0.dist-info/RECORD +132 -0
- capo_codeguru_security-0.1.0.dist-info/WHEEL +5 -0
- capo_codeguru_security-0.1.0.dist-info/licenses/LICENSE +21 -0
- capo_codeguru_security-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#Status``."""
|
|
2
|
+
|
|
3
|
+
from typing import Literal, TypeAlias, cast
|
|
4
|
+
|
|
5
|
+
Status: TypeAlias = Literal[
|
|
6
|
+
"Closed",
|
|
7
|
+
"Open",
|
|
8
|
+
"All",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# --- restJson1 ser/de ---
|
|
13
|
+
def serialize_json(value: Status) -> str:
|
|
14
|
+
return value
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def deserialize_json(data: str) -> Status:
|
|
18
|
+
return cast(Status, data)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#SuggestedFix``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import NotRequired, TypedDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SuggestedFix(TypedDict, closed=True):
|
|
7
|
+
description: NotRequired["str"]
|
|
8
|
+
"""<p>A description of the suggested code fix and why it is being suggested. </p>"""
|
|
9
|
+
code: NotRequired["str"]
|
|
10
|
+
"""<p>The suggested code fix. If applicable, includes code patch to replace your source code. </p>"""
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# --- restJson1 ser/de ---
|
|
14
|
+
def serialize_json(value: SuggestedFix) -> dict:
|
|
15
|
+
out: dict = {}
|
|
16
|
+
if "description" in value:
|
|
17
|
+
out["description"] = value["description"]
|
|
18
|
+
if "code" in value:
|
|
19
|
+
out["code"] = value["code"]
|
|
20
|
+
return out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def deserialize_json(data: dict) -> SuggestedFix:
|
|
24
|
+
out: SuggestedFix = {} # type: ignore[typeddict-item]
|
|
25
|
+
if data.get("description") is not None:
|
|
26
|
+
out["description"] = data["description"]
|
|
27
|
+
if data.get("code") is not None:
|
|
28
|
+
out["code"] = data["code"]
|
|
29
|
+
return out
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#SuggestedFixes``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.suggested_fix
|
|
7
|
+
|
|
8
|
+
SuggestedFixes: TypeAlias = list[
|
|
9
|
+
"capo_codeguru_security.types.suggested_fix.SuggestedFix"
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# --- restJson1 ser/de ---
|
|
14
|
+
def serialize_json(value: SuggestedFixes) -> list:
|
|
15
|
+
import capo_codeguru_security.types.suggested_fix
|
|
16
|
+
|
|
17
|
+
out: list = []
|
|
18
|
+
for item in value:
|
|
19
|
+
out.append(capo_codeguru_security.types.suggested_fix.serialize_json(item))
|
|
20
|
+
return out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def deserialize_json(data: list) -> SuggestedFixes:
|
|
24
|
+
import capo_codeguru_security.types.suggested_fix
|
|
25
|
+
|
|
26
|
+
out: SuggestedFixes = []
|
|
27
|
+
for item in data:
|
|
28
|
+
if item is None:
|
|
29
|
+
continue
|
|
30
|
+
out.append(capo_codeguru_security.types.suggested_fix.deserialize_json(item))
|
|
31
|
+
return out
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#TagKeyList``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.tag_key
|
|
7
|
+
|
|
8
|
+
TagKeyList: TypeAlias = list["capo_codeguru_security.types.tag_key.TagKey"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# --- restJson1 ser/de ---
|
|
12
|
+
def serialize_json(value: TagKeyList) -> list:
|
|
13
|
+
return list(value)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def deserialize_json(data: list) -> TagKeyList:
|
|
17
|
+
return [item for item in data if item is not None]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#TagMap``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.tag_key
|
|
7
|
+
import capo_codeguru_security.types.tag_value
|
|
8
|
+
|
|
9
|
+
TagMap: TypeAlias = dict[
|
|
10
|
+
"capo_codeguru_security.types.tag_key.TagKey",
|
|
11
|
+
"capo_codeguru_security.types.tag_value.TagValue",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# --- restJson1 ser/de ---
|
|
16
|
+
def serialize_json(input_to_serialize: TagMap) -> dict:
|
|
17
|
+
out: dict = {}
|
|
18
|
+
for key, value in input_to_serialize.items():
|
|
19
|
+
out[key] = value
|
|
20
|
+
return out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def deserialize_json(data: dict) -> TagMap:
|
|
24
|
+
out: TagMap = {}
|
|
25
|
+
for key, value in data.items():
|
|
26
|
+
if value is None:
|
|
27
|
+
continue
|
|
28
|
+
out[key] = value
|
|
29
|
+
return out
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#TagResourceRequest``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from typing_extensions import TypedDict
|
|
6
|
+
|
|
7
|
+
from capo_codeguru_security.errors import DeserializationError
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
import capo_codeguru_security.types.scan_name_arn
|
|
11
|
+
import capo_codeguru_security.types.tag_map
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TagResourceRequest(TypedDict, closed=True):
|
|
15
|
+
resource_arn: "capo_codeguru_security.types.scan_name_arn.ScanNameArn"
|
|
16
|
+
"""<p>The ARN of the <code>ScanName</code> object. You can retrieve this ARN by calling <code>CreateScan</code>, <code>ListScans</code>, or <code>GetScan</code>.</p>"""
|
|
17
|
+
tags: "capo_codeguru_security.types.tag_map.TagMap"
|
|
18
|
+
"""<p>An array of key-value pairs used to tag an existing scan. A tag is a custom attribute label with two parts:</p> <ul> <li> <p>A tag key. For example, <code>CostCenter</code>, <code>Environment</code>, or <code>Secret</code>. Tag keys are case sensitive.</p> </li> <li> <p>An optional tag value field. For example, <code>111122223333</code>, <code>Production</code>, or a team name. Omitting the tag value is the same as using an empty string. Tag values are case sensitive.</p> </li> </ul>"""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# --- restJson1 ser/de ---
|
|
22
|
+
def serialize_json(value: TagResourceRequest) -> dict:
|
|
23
|
+
out: dict = {}
|
|
24
|
+
import capo_codeguru_security.types.tag_map
|
|
25
|
+
|
|
26
|
+
out["tags"] = capo_codeguru_security.types.tag_map.serialize_json(value["tags"])
|
|
27
|
+
return out
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def deserialize_json(data: dict) -> TagResourceRequest:
|
|
31
|
+
out: TagResourceRequest = {} # type: ignore[typeddict-item]
|
|
32
|
+
if data.get("tags") is not None:
|
|
33
|
+
import capo_codeguru_security.types.tag_map
|
|
34
|
+
|
|
35
|
+
out["tags"] = capo_codeguru_security.types.tag_map.deserialize_json(
|
|
36
|
+
data["tags"]
|
|
37
|
+
)
|
|
38
|
+
else:
|
|
39
|
+
raise DeserializationError("TagResourceRequest.tags required")
|
|
40
|
+
return out
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#TagResourceResponse``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import TypedDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TagResourceResponse(TypedDict, closed=True):
|
|
7
|
+
pass
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# --- restJson1 ser/de ---
|
|
11
|
+
def serialize_json(value: TagResourceResponse) -> dict:
|
|
12
|
+
out: dict = {}
|
|
13
|
+
return out
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def deserialize_json(data: dict) -> TagResourceResponse:
|
|
17
|
+
out: TagResourceResponse = {} # type: ignore[typeddict-item]
|
|
18
|
+
return out
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#UntagResourceRequest``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from typing_extensions import TypedDict
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
import capo_codeguru_security.types.scan_name_arn
|
|
9
|
+
import capo_codeguru_security.types.tag_key_list
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class UntagResourceRequest(TypedDict, closed=True):
|
|
13
|
+
resource_arn: "capo_codeguru_security.types.scan_name_arn.ScanNameArn"
|
|
14
|
+
"""<p>The ARN of the <code>ScanName</code> object. You can retrieve this ARN by calling <code>CreateScan</code>, <code>ListScans</code>, or <code>GetScan</code>.</p>"""
|
|
15
|
+
tag_keys: "capo_codeguru_security.types.tag_key_list.TagKeyList"
|
|
16
|
+
"""<p>A list of keys for each tag you want to remove from a scan.</p>"""
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# --- restJson1 ser/de ---
|
|
20
|
+
def serialize_json(value: UntagResourceRequest) -> dict:
|
|
21
|
+
out: dict = {}
|
|
22
|
+
return out
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def deserialize_json(data: dict) -> UntagResourceRequest:
|
|
26
|
+
out: UntagResourceRequest = {} # type: ignore[typeddict-item]
|
|
27
|
+
return out
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#UntagResourceResponse``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import TypedDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class UntagResourceResponse(TypedDict, closed=True):
|
|
7
|
+
pass
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# --- restJson1 ser/de ---
|
|
11
|
+
def serialize_json(value: UntagResourceResponse) -> dict:
|
|
12
|
+
out: dict = {}
|
|
13
|
+
return out
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def deserialize_json(data: dict) -> UntagResourceResponse:
|
|
17
|
+
out: UntagResourceResponse = {} # type: ignore[typeddict-item]
|
|
18
|
+
return out
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#UpdateAccountConfigurationRequest``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from typing_extensions import TypedDict
|
|
6
|
+
|
|
7
|
+
from capo_codeguru_security.errors import DeserializationError
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
import capo_codeguru_security.types.encryption_config
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class UpdateAccountConfigurationRequest(TypedDict, closed=True):
|
|
14
|
+
encryption_config: "capo_codeguru_security.types.encryption_config.EncryptionConfig"
|
|
15
|
+
"""<p>The customer-managed KMS key ARN you want to use for encryption. If not specified, CodeGuru Security will use an AWS-managed key for encryption. If you previously specified a customer-managed KMS key and want CodeGuru Security to use an AWS-managed key for encryption instead, pass nothing.</p>"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# --- restJson1 ser/de ---
|
|
19
|
+
def serialize_json(value: UpdateAccountConfigurationRequest) -> dict:
|
|
20
|
+
out: dict = {}
|
|
21
|
+
import capo_codeguru_security.types.encryption_config
|
|
22
|
+
|
|
23
|
+
out["encryptionConfig"] = (
|
|
24
|
+
capo_codeguru_security.types.encryption_config.serialize_json(
|
|
25
|
+
value["encryption_config"]
|
|
26
|
+
)
|
|
27
|
+
)
|
|
28
|
+
return out
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def deserialize_json(data: dict) -> UpdateAccountConfigurationRequest:
|
|
32
|
+
out: UpdateAccountConfigurationRequest = {} # type: ignore[typeddict-item]
|
|
33
|
+
if data.get("encryptionConfig") is not None:
|
|
34
|
+
import capo_codeguru_security.types.encryption_config
|
|
35
|
+
|
|
36
|
+
out["encryption_config"] = (
|
|
37
|
+
capo_codeguru_security.types.encryption_config.deserialize_json(
|
|
38
|
+
data["encryptionConfig"]
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
else:
|
|
42
|
+
raise DeserializationError(
|
|
43
|
+
"UpdateAccountConfigurationRequest.encryption_config required"
|
|
44
|
+
)
|
|
45
|
+
return out
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#UpdateAccountConfigurationResponse``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from typing_extensions import TypedDict
|
|
6
|
+
|
|
7
|
+
from capo_codeguru_security.errors import DeserializationError
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
import capo_codeguru_security.types.encryption_config
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class UpdateAccountConfigurationResponse(TypedDict, closed=True):
|
|
14
|
+
encryption_config: "capo_codeguru_security.types.encryption_config.EncryptionConfig"
|
|
15
|
+
"""<p>An <code>EncryptionConfig</code> object that contains the KMS key ARN that is used for encryption. If you did not specify a customer-managed KMS key in the request, returns empty. </p>"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# --- restJson1 ser/de ---
|
|
19
|
+
def serialize_json(value: UpdateAccountConfigurationResponse) -> dict:
|
|
20
|
+
out: dict = {}
|
|
21
|
+
import capo_codeguru_security.types.encryption_config
|
|
22
|
+
|
|
23
|
+
out["encryptionConfig"] = (
|
|
24
|
+
capo_codeguru_security.types.encryption_config.serialize_json(
|
|
25
|
+
value["encryption_config"]
|
|
26
|
+
)
|
|
27
|
+
)
|
|
28
|
+
return out
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def deserialize_json(data: dict) -> UpdateAccountConfigurationResponse:
|
|
32
|
+
out: UpdateAccountConfigurationResponse = {} # type: ignore[typeddict-item]
|
|
33
|
+
if data.get("encryptionConfig") is not None:
|
|
34
|
+
import capo_codeguru_security.types.encryption_config
|
|
35
|
+
|
|
36
|
+
out["encryption_config"] = (
|
|
37
|
+
capo_codeguru_security.types.encryption_config.deserialize_json(
|
|
38
|
+
data["encryptionConfig"]
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
else:
|
|
42
|
+
raise DeserializationError(
|
|
43
|
+
"UpdateAccountConfigurationResponse.encryption_config required"
|
|
44
|
+
)
|
|
45
|
+
return out
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#ValidationExceptionField``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import TypedDict
|
|
4
|
+
|
|
5
|
+
from capo_codeguru_security.errors import DeserializationError
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ValidationExceptionField(TypedDict, closed=True):
|
|
9
|
+
name: "str"
|
|
10
|
+
"""<p>The name of the exception.</p>"""
|
|
11
|
+
message: "str"
|
|
12
|
+
"""<p>Describes the exception.</p>"""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# --- restJson1 ser/de ---
|
|
16
|
+
def serialize_json(value: ValidationExceptionField) -> dict:
|
|
17
|
+
out: dict = {}
|
|
18
|
+
out["name"] = value["name"]
|
|
19
|
+
out["message"] = value["message"]
|
|
20
|
+
return out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def deserialize_json(data: dict) -> ValidationExceptionField:
|
|
24
|
+
out: ValidationExceptionField = {} # type: ignore[typeddict-item]
|
|
25
|
+
if data.get("name") is not None:
|
|
26
|
+
out["name"] = data["name"]
|
|
27
|
+
else:
|
|
28
|
+
raise DeserializationError("ValidationExceptionField.name required")
|
|
29
|
+
if data.get("message") is not None:
|
|
30
|
+
out["message"] = data["message"]
|
|
31
|
+
else:
|
|
32
|
+
raise DeserializationError("ValidationExceptionField.message required")
|
|
33
|
+
return out
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#ValidationExceptionFieldList``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.validation_exception_field
|
|
7
|
+
|
|
8
|
+
ValidationExceptionFieldList: TypeAlias = list[
|
|
9
|
+
"capo_codeguru_security.types.validation_exception_field.ValidationExceptionField"
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# --- restJson1 ser/de ---
|
|
14
|
+
def serialize_json(value: ValidationExceptionFieldList) -> list:
|
|
15
|
+
import capo_codeguru_security.types.validation_exception_field
|
|
16
|
+
|
|
17
|
+
out: list = []
|
|
18
|
+
for item in value:
|
|
19
|
+
out.append(
|
|
20
|
+
capo_codeguru_security.types.validation_exception_field.serialize_json(item)
|
|
21
|
+
)
|
|
22
|
+
return out
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def deserialize_json(data: list) -> ValidationExceptionFieldList:
|
|
26
|
+
import capo_codeguru_security.types.validation_exception_field
|
|
27
|
+
|
|
28
|
+
out: ValidationExceptionFieldList = []
|
|
29
|
+
for item in data:
|
|
30
|
+
if item is None:
|
|
31
|
+
continue
|
|
32
|
+
out.append(
|
|
33
|
+
capo_codeguru_security.types.validation_exception_field.deserialize_json(
|
|
34
|
+
item
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
return out
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#ValidationExceptionReason``."""
|
|
2
|
+
|
|
3
|
+
from typing import Literal, TypeAlias, cast
|
|
4
|
+
|
|
5
|
+
ValidationExceptionReason: TypeAlias = Literal[
|
|
6
|
+
"unknownOperation",
|
|
7
|
+
"cannotParse",
|
|
8
|
+
"fieldValidationFailed",
|
|
9
|
+
"other",
|
|
10
|
+
"lambdaCodeShaMisMatch",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# --- restJson1 ser/de ---
|
|
15
|
+
def serialize_json(value: ValidationExceptionReason) -> str:
|
|
16
|
+
return value
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def deserialize_json(data: str) -> ValidationExceptionReason:
|
|
20
|
+
return cast(ValidationExceptionReason, data)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#Vulnerability``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from typing_extensions import NotRequired, TypedDict
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
import capo_codeguru_security.types.file_path
|
|
9
|
+
import capo_codeguru_security.types.reference_urls
|
|
10
|
+
import capo_codeguru_security.types.related_vulnerabilities
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Vulnerability(TypedDict, closed=True):
|
|
14
|
+
reference_urls: NotRequired[
|
|
15
|
+
"capo_codeguru_security.types.reference_urls.ReferenceUrls"
|
|
16
|
+
]
|
|
17
|
+
"""<p>One or more URL addresses that contain details about a vulnerability.</p>"""
|
|
18
|
+
related_vulnerabilities: NotRequired[
|
|
19
|
+
"capo_codeguru_security.types.related_vulnerabilities.RelatedVulnerabilities"
|
|
20
|
+
]
|
|
21
|
+
"""<p>One or more vulnerabilities that are related to the vulnerability being described.</p>"""
|
|
22
|
+
id: NotRequired["str"]
|
|
23
|
+
"""<p>The identifier for the vulnerability.</p>"""
|
|
24
|
+
file_path: NotRequired["capo_codeguru_security.types.file_path.FilePath"]
|
|
25
|
+
"""<p> An object that describes the location of the detected security vulnerability in your code.</p>"""
|
|
26
|
+
item_count: NotRequired["int"]
|
|
27
|
+
"""<p>The number of times the vulnerability appears in your code.</p>"""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# --- restJson1 ser/de ---
|
|
31
|
+
def serialize_json(value: Vulnerability) -> dict:
|
|
32
|
+
out: dict = {}
|
|
33
|
+
if "reference_urls" in value:
|
|
34
|
+
import capo_codeguru_security.types.reference_urls
|
|
35
|
+
|
|
36
|
+
out["referenceUrls"] = (
|
|
37
|
+
capo_codeguru_security.types.reference_urls.serialize_json(
|
|
38
|
+
value["reference_urls"]
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
if "related_vulnerabilities" in value:
|
|
42
|
+
import capo_codeguru_security.types.related_vulnerabilities
|
|
43
|
+
|
|
44
|
+
out["relatedVulnerabilities"] = (
|
|
45
|
+
capo_codeguru_security.types.related_vulnerabilities.serialize_json(
|
|
46
|
+
value["related_vulnerabilities"]
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
if "id" in value:
|
|
50
|
+
out["id"] = value["id"]
|
|
51
|
+
if "file_path" in value:
|
|
52
|
+
import capo_codeguru_security.types.file_path
|
|
53
|
+
|
|
54
|
+
out["filePath"] = capo_codeguru_security.types.file_path.serialize_json(
|
|
55
|
+
value["file_path"]
|
|
56
|
+
)
|
|
57
|
+
if "item_count" in value:
|
|
58
|
+
out["itemCount"] = value["item_count"]
|
|
59
|
+
return out
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def deserialize_json(data: dict) -> Vulnerability:
|
|
63
|
+
out: Vulnerability = {} # type: ignore[typeddict-item]
|
|
64
|
+
if data.get("referenceUrls") is not None:
|
|
65
|
+
import capo_codeguru_security.types.reference_urls
|
|
66
|
+
|
|
67
|
+
out["reference_urls"] = (
|
|
68
|
+
capo_codeguru_security.types.reference_urls.deserialize_json(
|
|
69
|
+
data["referenceUrls"]
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
if data.get("relatedVulnerabilities") is not None:
|
|
73
|
+
import capo_codeguru_security.types.related_vulnerabilities
|
|
74
|
+
|
|
75
|
+
out["related_vulnerabilities"] = (
|
|
76
|
+
capo_codeguru_security.types.related_vulnerabilities.deserialize_json(
|
|
77
|
+
data["relatedVulnerabilities"]
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
if data.get("id") is not None:
|
|
81
|
+
out["id"] = data["id"]
|
|
82
|
+
if data.get("filePath") is not None:
|
|
83
|
+
import capo_codeguru_security.types.file_path
|
|
84
|
+
|
|
85
|
+
out["file_path"] = capo_codeguru_security.types.file_path.deserialize_json(
|
|
86
|
+
data["filePath"]
|
|
87
|
+
)
|
|
88
|
+
if data.get("itemCount") is not None:
|
|
89
|
+
out["item_count"] = data["itemCount"]
|
|
90
|
+
return out
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: capo-codeguru-security
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Python SDK for Codeguru Security.
|
|
5
|
+
Classifier: Development Status :: 4 - Beta
|
|
6
|
+
Classifier: Intended Audience :: Developers
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
16
|
+
Classifier: Typing :: Typed
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: zapros>=0.13.0
|
|
21
|
+
Provides-Extra: sso
|
|
22
|
+
Requires-Dist: capo-sso>=0.2.0; extra == "sso"
|
|
23
|
+
Requires-Dist: capo-sso-oidc>=0.2.0; extra == "sso"
|
|
24
|
+
Requires-Dist: capo-sts>=0.3.0; extra == "sso"
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# Getting Started
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
pip install capo-codeguru-security
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
from capo_codeguru_security import AsyncCodeGuruSecurityClient
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
async def main():
|
|
42
|
+
async with AsyncCodeGuruSecurityClient() as code_guru_security:
|
|
43
|
+
# Example: call the batch_get_findings operation
|
|
44
|
+
response = await code_guru_security.batch_get_findings()
|
|
45
|
+
print(response["findings"])
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Pagination
|
|
49
|
+
|
|
50
|
+
Some operations in this SDK support pagination. If the operation supports pagination it will have an `iter_` prefixed method that returns an async iterator.
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from capo_codeguru_security import AsyncCodeGuruSecurityClient
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
async def main():
|
|
57
|
+
async with AsyncCodeGuruSecurityClient() as code_guru_security:
|
|
58
|
+
# Example: paginate over get_findings
|
|
59
|
+
async for item in code_guru_security.iter_get_findings():
|
|
60
|
+
print(item)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Error Handling
|
|
64
|
+
|
|
65
|
+
The SDK raises exceptions for errors returned by the API. Catch them to handle failures gracefully.
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
from capo_codeguru_security import AsyncCodeGuruSecurityClient
|
|
69
|
+
from capo_codeguru_security.error import AccessDeniedException
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
async def main():
|
|
73
|
+
async with AsyncCodeGuruSecurityClient() as code_guru_security:
|
|
74
|
+
try:
|
|
75
|
+
await code_guru_security.batch_get_findings()
|
|
76
|
+
except AccessDeniedException as e:
|
|
77
|
+
print(f"Error: {e}")
|
|
78
|
+
print(e.data) # additional error data
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Retrying
|
|
82
|
+
|
|
83
|
+
The SDK retries failed operations automatically. Retry behaviour follows the Smithy specification: errors are retried based on their `is_retryable` and `is_throttling_error` attributes. Throttling errors use a longer base delay. Network-level failures (connection errors and timeouts) are also retried. Non-retryable errors, such as client errors without the `@retryable` trait, are raised immediately without further attempts.
|
|
84
|
+
|
|
85
|
+
The number of attempts defaults to 3 and can be changed at the client level via `retry_max_attempts`, or per call via `config_overrides`.
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
from capo_codeguru_security import AsyncCodeGuruSecurityClient
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
async def main():
|
|
92
|
+
async with AsyncCodeGuruSecurityClient() as code_guru_security:
|
|
93
|
+
# Default: 3 attempts for every operation
|
|
94
|
+
response = await code_guru_security.batch_get_findings()
|
|
95
|
+
|
|
96
|
+
# Override per operation
|
|
97
|
+
response = await code_guru_security.batch_get_findings(config_overrides={"retry_max_attempts": 5})
|
|
98
|
+
|
|
99
|
+
# Disable retries for this call
|
|
100
|
+
response = await code_guru_security.batch_get_findings(config_overrides={"retry_max_attempts": 1})
|
|
101
|
+
```
|