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,31 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#CreateUploadUrlRequest``."""
|
|
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
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CreateUploadUrlRequest(TypedDict, closed=True):
|
|
14
|
+
scan_name: "capo_codeguru_security.types.scan_name.ScanName"
|
|
15
|
+
"""<p>The name of the scan that will use the uploaded resource. CodeGuru Security uses the unique scan name to track revisions across multiple scans of the same resource. Use this <code>scanName</code> when you call <code>CreateScan</code> on the code resource you upload to this URL.</p>"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# --- restJson1 ser/de ---
|
|
19
|
+
def serialize_json(value: CreateUploadUrlRequest) -> dict:
|
|
20
|
+
out: dict = {}
|
|
21
|
+
out["scanName"] = value["scan_name"]
|
|
22
|
+
return out
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def deserialize_json(data: dict) -> CreateUploadUrlRequest:
|
|
26
|
+
out: CreateUploadUrlRequest = {} # type: ignore[typeddict-item]
|
|
27
|
+
if data.get("scanName") is not None:
|
|
28
|
+
out["scan_name"] = data["scanName"]
|
|
29
|
+
else:
|
|
30
|
+
raise DeserializationError("CreateUploadUrlRequest.scan_name required")
|
|
31
|
+
return out
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#CreateUploadUrlResponse``."""
|
|
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.request_header_map
|
|
11
|
+
import capo_codeguru_security.types.s3_url
|
|
12
|
+
import capo_codeguru_security.types.uuid
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CreateUploadUrlResponse(TypedDict, closed=True):
|
|
16
|
+
s3_url: "capo_codeguru_security.types.s3_url.S3Url"
|
|
17
|
+
"""<p>A pre-signed S3 URL. You can upload the code file you want to scan with the required <code>requestHeaders</code> using any HTTP client.</p>"""
|
|
18
|
+
request_headers: "capo_codeguru_security.types.request_header_map.RequestHeaderMap"
|
|
19
|
+
"""<p>A set of key-value pairs that contain the required headers when uploading your resource.</p>"""
|
|
20
|
+
code_artifact_id: "capo_codeguru_security.types.uuid.Uuid"
|
|
21
|
+
"""<p>The identifier for the uploaded code resource. Pass this to <code>CreateScan</code> to use the uploaded resources.</p>"""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# --- restJson1 ser/de ---
|
|
25
|
+
def serialize_json(value: CreateUploadUrlResponse) -> dict:
|
|
26
|
+
out: dict = {}
|
|
27
|
+
out["s3Url"] = value["s3_url"]
|
|
28
|
+
import capo_codeguru_security.types.request_header_map
|
|
29
|
+
|
|
30
|
+
out["requestHeaders"] = (
|
|
31
|
+
capo_codeguru_security.types.request_header_map.serialize_json(
|
|
32
|
+
value["request_headers"]
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
out["codeArtifactId"] = value["code_artifact_id"]
|
|
36
|
+
return out
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def deserialize_json(data: dict) -> CreateUploadUrlResponse:
|
|
40
|
+
out: CreateUploadUrlResponse = {} # type: ignore[typeddict-item]
|
|
41
|
+
if data.get("s3Url") is not None:
|
|
42
|
+
out["s3_url"] = data["s3Url"]
|
|
43
|
+
else:
|
|
44
|
+
raise DeserializationError("CreateUploadUrlResponse.s3_url required")
|
|
45
|
+
if data.get("requestHeaders") is not None:
|
|
46
|
+
import capo_codeguru_security.types.request_header_map
|
|
47
|
+
|
|
48
|
+
out["request_headers"] = (
|
|
49
|
+
capo_codeguru_security.types.request_header_map.deserialize_json(
|
|
50
|
+
data["requestHeaders"]
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
else:
|
|
54
|
+
raise DeserializationError("CreateUploadUrlResponse.request_headers required")
|
|
55
|
+
if data.get("codeArtifactId") is not None:
|
|
56
|
+
out["code_artifact_id"] = data["codeArtifactId"]
|
|
57
|
+
else:
|
|
58
|
+
raise DeserializationError("CreateUploadUrlResponse.code_artifact_id required")
|
|
59
|
+
return out
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#DetectorTags``."""
|
|
2
|
+
|
|
3
|
+
from typing import TypeAlias
|
|
4
|
+
|
|
5
|
+
DetectorTags: TypeAlias = list["str"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# --- restJson1 ser/de ---
|
|
9
|
+
def serialize_json(value: DetectorTags) -> list:
|
|
10
|
+
return list(value)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def deserialize_json(data: list) -> DetectorTags:
|
|
14
|
+
return [item for item in data if item is not None]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#EncryptionConfig``."""
|
|
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.kms_key_arn
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class EncryptionConfig(TypedDict, closed=True):
|
|
12
|
+
kms_key_arn: NotRequired["capo_codeguru_security.types.kms_key_arn.KmsKeyArn"]
|
|
13
|
+
"""<p>The KMS key ARN that is used for encryption. If an AWS-managed key is used for encryption, returns empty.</p>"""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# --- restJson1 ser/de ---
|
|
17
|
+
def serialize_json(value: EncryptionConfig) -> dict:
|
|
18
|
+
out: dict = {}
|
|
19
|
+
if "kms_key_arn" in value:
|
|
20
|
+
out["kmsKeyArn"] = value["kms_key_arn"]
|
|
21
|
+
return out
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def deserialize_json(data: dict) -> EncryptionConfig:
|
|
25
|
+
out: EncryptionConfig = {} # type: ignore[typeddict-item]
|
|
26
|
+
if data.get("kmsKeyArn") is not None:
|
|
27
|
+
out["kms_key_arn"] = data["kmsKeyArn"]
|
|
28
|
+
return out
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#ErrorCode``."""
|
|
2
|
+
|
|
3
|
+
from typing import Literal, TypeAlias, cast
|
|
4
|
+
|
|
5
|
+
ErrorCode: TypeAlias = Literal[
|
|
6
|
+
"DUPLICATE_IDENTIFIER",
|
|
7
|
+
"ITEM_DOES_NOT_EXIST",
|
|
8
|
+
"INTERNAL_ERROR",
|
|
9
|
+
"INVALID_FINDING_ID",
|
|
10
|
+
"INVALID_SCAN_NAME",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# --- restJson1 ser/de ---
|
|
15
|
+
def serialize_json(value: ErrorCode) -> str:
|
|
16
|
+
return value
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def deserialize_json(data: str) -> ErrorCode:
|
|
20
|
+
return cast(ErrorCode, data)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#FilePath``."""
|
|
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.code_snippet
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FilePath(TypedDict, closed=True):
|
|
12
|
+
name: NotRequired["str"]
|
|
13
|
+
"""<p>The name of the file.</p>"""
|
|
14
|
+
path: NotRequired["str"]
|
|
15
|
+
"""<p>The path to the resource with the security vulnerability.</p>"""
|
|
16
|
+
start_line: NotRequired["int"]
|
|
17
|
+
"""<p>The first line number of the code snippet where the security vulnerability appears in your code.</p>"""
|
|
18
|
+
end_line: NotRequired["int"]
|
|
19
|
+
"""<p>The last line number of the code snippet where the security vulnerability appears in your code.</p>"""
|
|
20
|
+
code_snippet: NotRequired["capo_codeguru_security.types.code_snippet.CodeSnippet"]
|
|
21
|
+
"""<p>A list of <code>CodeLine</code> objects that describe where the security vulnerability appears in your code.</p>"""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# --- restJson1 ser/de ---
|
|
25
|
+
def serialize_json(value: FilePath) -> dict:
|
|
26
|
+
out: dict = {}
|
|
27
|
+
if "name" in value:
|
|
28
|
+
out["name"] = value["name"]
|
|
29
|
+
if "path" in value:
|
|
30
|
+
out["path"] = value["path"]
|
|
31
|
+
if "start_line" in value:
|
|
32
|
+
out["startLine"] = value["start_line"]
|
|
33
|
+
if "end_line" in value:
|
|
34
|
+
out["endLine"] = value["end_line"]
|
|
35
|
+
if "code_snippet" in value:
|
|
36
|
+
import capo_codeguru_security.types.code_snippet
|
|
37
|
+
|
|
38
|
+
out["codeSnippet"] = capo_codeguru_security.types.code_snippet.serialize_json(
|
|
39
|
+
value["code_snippet"]
|
|
40
|
+
)
|
|
41
|
+
return out
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def deserialize_json(data: dict) -> FilePath:
|
|
45
|
+
out: FilePath = {} # type: ignore[typeddict-item]
|
|
46
|
+
if data.get("name") is not None:
|
|
47
|
+
out["name"] = data["name"]
|
|
48
|
+
if data.get("path") is not None:
|
|
49
|
+
out["path"] = data["path"]
|
|
50
|
+
if data.get("startLine") is not None:
|
|
51
|
+
out["start_line"] = data["startLine"]
|
|
52
|
+
if data.get("endLine") is not None:
|
|
53
|
+
out["end_line"] = data["endLine"]
|
|
54
|
+
if data.get("codeSnippet") is not None:
|
|
55
|
+
import capo_codeguru_security.types.code_snippet
|
|
56
|
+
|
|
57
|
+
out["code_snippet"] = (
|
|
58
|
+
capo_codeguru_security.types.code_snippet.deserialize_json(
|
|
59
|
+
data["codeSnippet"]
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
return out
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#Finding``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from typing_extensions import NotRequired, TypedDict
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
import datetime
|
|
9
|
+
|
|
10
|
+
import capo_codeguru_security.types.detector_tags
|
|
11
|
+
import capo_codeguru_security.types.remediation
|
|
12
|
+
import capo_codeguru_security.types.resource
|
|
13
|
+
import capo_codeguru_security.types.severity
|
|
14
|
+
import capo_codeguru_security.types.status
|
|
15
|
+
import capo_codeguru_security.types.vulnerability
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Finding(TypedDict, closed=True):
|
|
19
|
+
created_at: NotRequired["datetime.datetime"]
|
|
20
|
+
"""<p>The time when the finding was created.</p>"""
|
|
21
|
+
description: NotRequired["str"]
|
|
22
|
+
"""<p>A description of the finding.</p>"""
|
|
23
|
+
generator_id: NotRequired["str"]
|
|
24
|
+
"""<p>The identifier for the component that generated a finding such as AmazonCodeGuruSecurity.</p>"""
|
|
25
|
+
id: NotRequired["str"]
|
|
26
|
+
"""<p>The identifier for a finding.</p>"""
|
|
27
|
+
updated_at: NotRequired["datetime.datetime"]
|
|
28
|
+
"""<p>The time when the finding was last updated. Findings are updated when you remediate them or when the finding code location changes. </p>"""
|
|
29
|
+
type: NotRequired["str"]
|
|
30
|
+
"""<p>The type of finding. </p>"""
|
|
31
|
+
status: NotRequired["capo_codeguru_security.types.status.Status"]
|
|
32
|
+
"""<p>The status of the finding. A finding status can be open or closed. </p>"""
|
|
33
|
+
resource: NotRequired["capo_codeguru_security.types.resource.Resource"]
|
|
34
|
+
"""<p>The resource where Amazon CodeGuru Security detected a finding.</p>"""
|
|
35
|
+
vulnerability: NotRequired[
|
|
36
|
+
"capo_codeguru_security.types.vulnerability.Vulnerability"
|
|
37
|
+
]
|
|
38
|
+
"""<p>An object that describes the detected security vulnerability.</p>"""
|
|
39
|
+
severity: NotRequired["capo_codeguru_security.types.severity.Severity"]
|
|
40
|
+
r"""<p>The severity of the finding. Severity can be critical, high, medium, low, or informational. For information on severity levels, see <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/findings-overview.html#severity-distribution\">Finding severity</a> in the <i>Amazon CodeGuru Security User Guide</i>.</p>"""
|
|
41
|
+
remediation: NotRequired["capo_codeguru_security.types.remediation.Remediation"]
|
|
42
|
+
"""<p>An object that contains the details about how to remediate a finding.</p>"""
|
|
43
|
+
title: NotRequired["str"]
|
|
44
|
+
"""<p>The title of the finding.</p>"""
|
|
45
|
+
detector_tags: NotRequired[
|
|
46
|
+
"capo_codeguru_security.types.detector_tags.DetectorTags"
|
|
47
|
+
]
|
|
48
|
+
"""<p>One or more tags or categorizations that are associated with a detector. These tags are defined by type, programming language, or other classification such as maintainability or consistency.</p>"""
|
|
49
|
+
detector_id: NotRequired["str"]
|
|
50
|
+
"""<p>The identifier for the detector that detected the finding in your code. A detector is a defined rule based on industry standards and AWS best practices. </p>"""
|
|
51
|
+
detector_name: NotRequired["str"]
|
|
52
|
+
"""<p>The name of the detector that identified the security vulnerability in your code. </p>"""
|
|
53
|
+
rule_id: NotRequired["str"]
|
|
54
|
+
"""<p>The identifier for the rule that generated the finding.</p>"""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# --- restJson1 ser/de ---
|
|
58
|
+
def serialize_json(value: Finding) -> dict:
|
|
59
|
+
out: dict = {}
|
|
60
|
+
if "created_at" in value:
|
|
61
|
+
import capo_codeguru_security.types._prelude.timestamp
|
|
62
|
+
|
|
63
|
+
out["createdAt"] = (
|
|
64
|
+
capo_codeguru_security.types._prelude.timestamp.serialize_json(
|
|
65
|
+
value["created_at"]
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
if "description" in value:
|
|
69
|
+
out["description"] = value["description"]
|
|
70
|
+
if "generator_id" in value:
|
|
71
|
+
out["generatorId"] = value["generator_id"]
|
|
72
|
+
if "id" in value:
|
|
73
|
+
out["id"] = value["id"]
|
|
74
|
+
if "updated_at" in value:
|
|
75
|
+
import capo_codeguru_security.types._prelude.timestamp
|
|
76
|
+
|
|
77
|
+
out["updatedAt"] = (
|
|
78
|
+
capo_codeguru_security.types._prelude.timestamp.serialize_json(
|
|
79
|
+
value["updated_at"]
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
if "type" in value:
|
|
83
|
+
out["type"] = value["type"]
|
|
84
|
+
if "status" in value:
|
|
85
|
+
import capo_codeguru_security.types.status
|
|
86
|
+
|
|
87
|
+
out["status"] = capo_codeguru_security.types.status.serialize_json(
|
|
88
|
+
value["status"]
|
|
89
|
+
)
|
|
90
|
+
if "resource" in value:
|
|
91
|
+
import capo_codeguru_security.types.resource
|
|
92
|
+
|
|
93
|
+
out["resource"] = capo_codeguru_security.types.resource.serialize_json(
|
|
94
|
+
value["resource"]
|
|
95
|
+
)
|
|
96
|
+
if "vulnerability" in value:
|
|
97
|
+
import capo_codeguru_security.types.vulnerability
|
|
98
|
+
|
|
99
|
+
out["vulnerability"] = (
|
|
100
|
+
capo_codeguru_security.types.vulnerability.serialize_json(
|
|
101
|
+
value["vulnerability"]
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
if "severity" in value:
|
|
105
|
+
import capo_codeguru_security.types.severity
|
|
106
|
+
|
|
107
|
+
out["severity"] = capo_codeguru_security.types.severity.serialize_json(
|
|
108
|
+
value["severity"]
|
|
109
|
+
)
|
|
110
|
+
if "remediation" in value:
|
|
111
|
+
import capo_codeguru_security.types.remediation
|
|
112
|
+
|
|
113
|
+
out["remediation"] = capo_codeguru_security.types.remediation.serialize_json(
|
|
114
|
+
value["remediation"]
|
|
115
|
+
)
|
|
116
|
+
if "title" in value:
|
|
117
|
+
out["title"] = value["title"]
|
|
118
|
+
if "detector_tags" in value:
|
|
119
|
+
import capo_codeguru_security.types.detector_tags
|
|
120
|
+
|
|
121
|
+
out["detectorTags"] = capo_codeguru_security.types.detector_tags.serialize_json(
|
|
122
|
+
value["detector_tags"]
|
|
123
|
+
)
|
|
124
|
+
if "detector_id" in value:
|
|
125
|
+
out["detectorId"] = value["detector_id"]
|
|
126
|
+
if "detector_name" in value:
|
|
127
|
+
out["detectorName"] = value["detector_name"]
|
|
128
|
+
if "rule_id" in value:
|
|
129
|
+
out["ruleId"] = value["rule_id"]
|
|
130
|
+
return out
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def deserialize_json(data: dict) -> Finding:
|
|
134
|
+
out: Finding = {} # type: ignore[typeddict-item]
|
|
135
|
+
if data.get("createdAt") is not None:
|
|
136
|
+
import capo_codeguru_security.types._prelude.timestamp
|
|
137
|
+
|
|
138
|
+
out["created_at"] = (
|
|
139
|
+
capo_codeguru_security.types._prelude.timestamp.deserialize_json(
|
|
140
|
+
data["createdAt"]
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
if data.get("description") is not None:
|
|
144
|
+
out["description"] = data["description"]
|
|
145
|
+
if data.get("generatorId") is not None:
|
|
146
|
+
out["generator_id"] = data["generatorId"]
|
|
147
|
+
if data.get("id") is not None:
|
|
148
|
+
out["id"] = data["id"]
|
|
149
|
+
if data.get("updatedAt") is not None:
|
|
150
|
+
import capo_codeguru_security.types._prelude.timestamp
|
|
151
|
+
|
|
152
|
+
out["updated_at"] = (
|
|
153
|
+
capo_codeguru_security.types._prelude.timestamp.deserialize_json(
|
|
154
|
+
data["updatedAt"]
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
if data.get("type") is not None:
|
|
158
|
+
out["type"] = data["type"]
|
|
159
|
+
if data.get("status") is not None:
|
|
160
|
+
import capo_codeguru_security.types.status
|
|
161
|
+
|
|
162
|
+
out["status"] = capo_codeguru_security.types.status.deserialize_json(
|
|
163
|
+
data["status"]
|
|
164
|
+
)
|
|
165
|
+
if data.get("resource") is not None:
|
|
166
|
+
import capo_codeguru_security.types.resource
|
|
167
|
+
|
|
168
|
+
out["resource"] = capo_codeguru_security.types.resource.deserialize_json(
|
|
169
|
+
data["resource"]
|
|
170
|
+
)
|
|
171
|
+
if data.get("vulnerability") is not None:
|
|
172
|
+
import capo_codeguru_security.types.vulnerability
|
|
173
|
+
|
|
174
|
+
out["vulnerability"] = (
|
|
175
|
+
capo_codeguru_security.types.vulnerability.deserialize_json(
|
|
176
|
+
data["vulnerability"]
|
|
177
|
+
)
|
|
178
|
+
)
|
|
179
|
+
if data.get("severity") is not None:
|
|
180
|
+
import capo_codeguru_security.types.severity
|
|
181
|
+
|
|
182
|
+
out["severity"] = capo_codeguru_security.types.severity.deserialize_json(
|
|
183
|
+
data["severity"]
|
|
184
|
+
)
|
|
185
|
+
if data.get("remediation") is not None:
|
|
186
|
+
import capo_codeguru_security.types.remediation
|
|
187
|
+
|
|
188
|
+
out["remediation"] = capo_codeguru_security.types.remediation.deserialize_json(
|
|
189
|
+
data["remediation"]
|
|
190
|
+
)
|
|
191
|
+
if data.get("title") is not None:
|
|
192
|
+
out["title"] = data["title"]
|
|
193
|
+
if data.get("detectorTags") is not None:
|
|
194
|
+
import capo_codeguru_security.types.detector_tags
|
|
195
|
+
|
|
196
|
+
out["detector_tags"] = (
|
|
197
|
+
capo_codeguru_security.types.detector_tags.deserialize_json(
|
|
198
|
+
data["detectorTags"]
|
|
199
|
+
)
|
|
200
|
+
)
|
|
201
|
+
if data.get("detectorId") is not None:
|
|
202
|
+
out["detector_id"] = data["detectorId"]
|
|
203
|
+
if data.get("detectorName") is not None:
|
|
204
|
+
out["detector_name"] = data["detectorName"]
|
|
205
|
+
if data.get("ruleId") is not None:
|
|
206
|
+
out["rule_id"] = data["ruleId"]
|
|
207
|
+
return out
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#FindingIdentifier``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import TypedDict
|
|
4
|
+
|
|
5
|
+
from capo_codeguru_security.errors import DeserializationError
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class FindingIdentifier(TypedDict, closed=True):
|
|
9
|
+
scan_name: "str"
|
|
10
|
+
"""<p>The name of the scan that generated the finding. </p>"""
|
|
11
|
+
finding_id: "str"
|
|
12
|
+
"""<p>The identifier for a finding.</p>"""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# --- restJson1 ser/de ---
|
|
16
|
+
def serialize_json(value: FindingIdentifier) -> dict:
|
|
17
|
+
out: dict = {}
|
|
18
|
+
out["scanName"] = value["scan_name"]
|
|
19
|
+
out["findingId"] = value["finding_id"]
|
|
20
|
+
return out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def deserialize_json(data: dict) -> FindingIdentifier:
|
|
24
|
+
out: FindingIdentifier = {} # type: ignore[typeddict-item]
|
|
25
|
+
if data.get("scanName") is not None:
|
|
26
|
+
out["scan_name"] = data["scanName"]
|
|
27
|
+
else:
|
|
28
|
+
raise DeserializationError("FindingIdentifier.scan_name required")
|
|
29
|
+
if data.get("findingId") is not None:
|
|
30
|
+
out["finding_id"] = data["findingId"]
|
|
31
|
+
else:
|
|
32
|
+
raise DeserializationError("FindingIdentifier.finding_id required")
|
|
33
|
+
return out
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#FindingIdentifiers``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.finding_identifier
|
|
7
|
+
|
|
8
|
+
FindingIdentifiers: TypeAlias = list[
|
|
9
|
+
"capo_codeguru_security.types.finding_identifier.FindingIdentifier"
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# --- restJson1 ser/de ---
|
|
14
|
+
def serialize_json(value: FindingIdentifiers) -> list:
|
|
15
|
+
import capo_codeguru_security.types.finding_identifier
|
|
16
|
+
|
|
17
|
+
out: list = []
|
|
18
|
+
for item in value:
|
|
19
|
+
out.append(capo_codeguru_security.types.finding_identifier.serialize_json(item))
|
|
20
|
+
return out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def deserialize_json(data: list) -> FindingIdentifiers:
|
|
24
|
+
import capo_codeguru_security.types.finding_identifier
|
|
25
|
+
|
|
26
|
+
out: FindingIdentifiers = []
|
|
27
|
+
for item in data:
|
|
28
|
+
if item is None:
|
|
29
|
+
continue
|
|
30
|
+
out.append(
|
|
31
|
+
capo_codeguru_security.types.finding_identifier.deserialize_json(item)
|
|
32
|
+
)
|
|
33
|
+
return out
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#FindingMetricsValuePerSeverity``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import NotRequired, TypedDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class FindingMetricsValuePerSeverity(TypedDict, closed=True):
|
|
7
|
+
info: NotRequired["float"]
|
|
8
|
+
"""<p>A numeric value corresponding to an informational finding.</p>"""
|
|
9
|
+
low: NotRequired["float"]
|
|
10
|
+
"""<p>A numeric value corresponding to a low severity finding.</p>"""
|
|
11
|
+
medium: NotRequired["float"]
|
|
12
|
+
"""<p>A numeric value corresponding to a medium severity finding.</p>"""
|
|
13
|
+
high: NotRequired["float"]
|
|
14
|
+
"""<p>A numeric value corresponding to a high severity finding.</p>"""
|
|
15
|
+
critical: NotRequired["float"]
|
|
16
|
+
"""<p>A numeric value corresponding to a critical finding.</p>"""
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# --- restJson1 ser/de ---
|
|
20
|
+
def serialize_json(value: FindingMetricsValuePerSeverity) -> dict:
|
|
21
|
+
out: dict = {}
|
|
22
|
+
if "info" in value:
|
|
23
|
+
out["info"] = (
|
|
24
|
+
"NaN"
|
|
25
|
+
if value["info"] != value["info"]
|
|
26
|
+
else "Infinity"
|
|
27
|
+
if value["info"] == float("inf")
|
|
28
|
+
else "-Infinity"
|
|
29
|
+
if value["info"] == float("-inf")
|
|
30
|
+
else value["info"]
|
|
31
|
+
)
|
|
32
|
+
if "low" in value:
|
|
33
|
+
out["low"] = (
|
|
34
|
+
"NaN"
|
|
35
|
+
if value["low"] != value["low"]
|
|
36
|
+
else "Infinity"
|
|
37
|
+
if value["low"] == float("inf")
|
|
38
|
+
else "-Infinity"
|
|
39
|
+
if value["low"] == float("-inf")
|
|
40
|
+
else value["low"]
|
|
41
|
+
)
|
|
42
|
+
if "medium" in value:
|
|
43
|
+
out["medium"] = (
|
|
44
|
+
"NaN"
|
|
45
|
+
if value["medium"] != value["medium"]
|
|
46
|
+
else "Infinity"
|
|
47
|
+
if value["medium"] == float("inf")
|
|
48
|
+
else "-Infinity"
|
|
49
|
+
if value["medium"] == float("-inf")
|
|
50
|
+
else value["medium"]
|
|
51
|
+
)
|
|
52
|
+
if "high" in value:
|
|
53
|
+
out["high"] = (
|
|
54
|
+
"NaN"
|
|
55
|
+
if value["high"] != value["high"]
|
|
56
|
+
else "Infinity"
|
|
57
|
+
if value["high"] == float("inf")
|
|
58
|
+
else "-Infinity"
|
|
59
|
+
if value["high"] == float("-inf")
|
|
60
|
+
else value["high"]
|
|
61
|
+
)
|
|
62
|
+
if "critical" in value:
|
|
63
|
+
out["critical"] = (
|
|
64
|
+
"NaN"
|
|
65
|
+
if value["critical"] != value["critical"]
|
|
66
|
+
else "Infinity"
|
|
67
|
+
if value["critical"] == float("inf")
|
|
68
|
+
else "-Infinity"
|
|
69
|
+
if value["critical"] == float("-inf")
|
|
70
|
+
else value["critical"]
|
|
71
|
+
)
|
|
72
|
+
return out
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def deserialize_json(data: dict) -> FindingMetricsValuePerSeverity:
|
|
76
|
+
out: FindingMetricsValuePerSeverity = {} # type: ignore[typeddict-item]
|
|
77
|
+
if data.get("info") is not None:
|
|
78
|
+
out["info"] = float(data["info"])
|
|
79
|
+
if data.get("low") is not None:
|
|
80
|
+
out["low"] = float(data["low"])
|
|
81
|
+
if data.get("medium") is not None:
|
|
82
|
+
out["medium"] = float(data["medium"])
|
|
83
|
+
if data.get("high") is not None:
|
|
84
|
+
out["high"] = float(data["high"])
|
|
85
|
+
if data.get("critical") is not None:
|
|
86
|
+
out["critical"] = float(data["critical"])
|
|
87
|
+
return out
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#Findings``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.finding
|
|
7
|
+
|
|
8
|
+
Findings: TypeAlias = list["capo_codeguru_security.types.finding.Finding"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# --- restJson1 ser/de ---
|
|
12
|
+
def serialize_json(value: Findings) -> list:
|
|
13
|
+
import capo_codeguru_security.types.finding
|
|
14
|
+
|
|
15
|
+
out: list = []
|
|
16
|
+
for item in value:
|
|
17
|
+
out.append(capo_codeguru_security.types.finding.serialize_json(item))
|
|
18
|
+
return out
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def deserialize_json(data: list) -> Findings:
|
|
22
|
+
import capo_codeguru_security.types.finding
|
|
23
|
+
|
|
24
|
+
out: Findings = []
|
|
25
|
+
for item in data:
|
|
26
|
+
if item is None:
|
|
27
|
+
continue
|
|
28
|
+
out.append(capo_codeguru_security.types.finding.deserialize_json(item))
|
|
29
|
+
return out
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#FindingsMetricList``."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, TypeAlias
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
import capo_codeguru_security.types.account_findings_metric
|
|
7
|
+
|
|
8
|
+
FindingsMetricList: TypeAlias = list[
|
|
9
|
+
"capo_codeguru_security.types.account_findings_metric.AccountFindingsMetric"
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# --- restJson1 ser/de ---
|
|
14
|
+
def serialize_json(value: FindingsMetricList) -> list:
|
|
15
|
+
import capo_codeguru_security.types.account_findings_metric
|
|
16
|
+
|
|
17
|
+
out: list = []
|
|
18
|
+
for item in value:
|
|
19
|
+
out.append(
|
|
20
|
+
capo_codeguru_security.types.account_findings_metric.serialize_json(item)
|
|
21
|
+
)
|
|
22
|
+
return out
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def deserialize_json(data: list) -> FindingsMetricList:
|
|
26
|
+
import capo_codeguru_security.types.account_findings_metric
|
|
27
|
+
|
|
28
|
+
out: FindingsMetricList = []
|
|
29
|
+
for item in data:
|
|
30
|
+
if item is None:
|
|
31
|
+
continue
|
|
32
|
+
out.append(
|
|
33
|
+
capo_codeguru_security.types.account_findings_metric.deserialize_json(item)
|
|
34
|
+
)
|
|
35
|
+
return out
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Generated from Smithy shape ``com.amazonaws.codegurusecurity#GetAccountConfigurationRequest``."""
|
|
2
|
+
|
|
3
|
+
from typing_extensions import TypedDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class GetAccountConfigurationRequest(TypedDict, closed=True):
|
|
7
|
+
pass
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# --- restJson1 ser/de ---
|
|
11
|
+
def serialize_json(value: GetAccountConfigurationRequest) -> dict:
|
|
12
|
+
out: dict = {}
|
|
13
|
+
return out
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def deserialize_json(data: dict) -> GetAccountConfigurationRequest:
|
|
17
|
+
out: GetAccountConfigurationRequest = {} # type: ignore[typeddict-item]
|
|
18
|
+
return out
|