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.
Files changed (132) hide show
  1. capo_codeguru_security/__init__.py +74 -0
  2. capo_codeguru_security/_async.py +25 -0
  3. capo_codeguru_security/_auth/_identity.py +16 -0
  4. capo_codeguru_security/_auth/_providers.py +886 -0
  5. capo_codeguru_security/_auth/_signers.py +88 -0
  6. capo_codeguru_security/_auth/_sigv4.py +434 -0
  7. capo_codeguru_security/_auth/_zapros_handler.py +80 -0
  8. capo_codeguru_security/_iter.py +113 -0
  9. capo_codeguru_security/_operations/aws_code_guru_security/batch_get_findings.py +167 -0
  10. capo_codeguru_security/_operations/aws_code_guru_security/create_scan.py +183 -0
  11. capo_codeguru_security/_operations/aws_code_guru_security/create_upload_url.py +165 -0
  12. capo_codeguru_security/_operations/aws_code_guru_security/get_account_configuration.py +161 -0
  13. capo_codeguru_security/_operations/aws_code_guru_security/get_findings.py +191 -0
  14. capo_codeguru_security/_operations/aws_code_guru_security/get_metrics_summary.py +176 -0
  15. capo_codeguru_security/_operations/aws_code_guru_security/get_scan.py +173 -0
  16. capo_codeguru_security/_operations/aws_code_guru_security/list_findings_metrics.py +185 -0
  17. capo_codeguru_security/_operations/aws_code_guru_security/list_scans.py +167 -0
  18. capo_codeguru_security/_operations/aws_code_guru_security/list_tags_for_resource.py +173 -0
  19. capo_codeguru_security/_operations/aws_code_guru_security/tag_resource.py +173 -0
  20. capo_codeguru_security/_operations/aws_code_guru_security/untag_resource.py +171 -0
  21. capo_codeguru_security/_operations/aws_code_guru_security/update_account_configuration.py +172 -0
  22. capo_codeguru_security/_pagination.py +21 -0
  23. capo_codeguru_security/_protocol/__init__.py +1 -0
  24. capo_codeguru_security/_protocol/errors.py +93 -0
  25. capo_codeguru_security/_protocol/eventstream.py +238 -0
  26. capo_codeguru_security/_protocol/serialize.py +47 -0
  27. capo_codeguru_security/_protocol/xml.py +33 -0
  28. capo_codeguru_security/_rule_engine/__init__.py +0 -0
  29. capo_codeguru_security/_rule_engine/_aws_partition.py +160 -0
  30. capo_codeguru_security/_rule_engine/_endpoint_rule_set.py +137 -0
  31. capo_codeguru_security/_rule_engine/_endpoint_runtime.py +389 -0
  32. capo_codeguru_security/_services/_aws_config.py +160 -0
  33. capo_codeguru_security/_services/_pipeline.py +198 -0
  34. capo_codeguru_security/_services/async_code_guru_security.py +934 -0
  35. capo_codeguru_security/_services/code_guru_security.py +921 -0
  36. capo_codeguru_security/errors/__init__.py +33 -0
  37. capo_codeguru_security/errors/_base.py +94 -0
  38. capo_codeguru_security/errors/access_denied_exception.py +67 -0
  39. capo_codeguru_security/errors/conflict_exception.py +67 -0
  40. capo_codeguru_security/errors/internal_server_exception.py +53 -0
  41. capo_codeguru_security/errors/resource_not_found_exception.py +69 -0
  42. capo_codeguru_security/errors/throttling_exception.py +65 -0
  43. capo_codeguru_security/errors/validation_exception.py +98 -0
  44. capo_codeguru_security/py.typed +0 -0
  45. capo_codeguru_security/types/_prelude/blob.py +12 -0
  46. capo_codeguru_security/types/_prelude/timestamp.py +17 -0
  47. capo_codeguru_security/types/account_findings_metric.py +118 -0
  48. capo_codeguru_security/types/analysis_type.py +17 -0
  49. capo_codeguru_security/types/batch_get_findings_error.py +61 -0
  50. capo_codeguru_security/types/batch_get_findings_errors.py +35 -0
  51. capo_codeguru_security/types/batch_get_findings_request.py +47 -0
  52. capo_codeguru_security/types/batch_get_findings_response.py +61 -0
  53. capo_codeguru_security/types/categories_with_most_findings.py +37 -0
  54. capo_codeguru_security/types/category_with_finding_num.py +29 -0
  55. capo_codeguru_security/types/client_token.py +5 -0
  56. capo_codeguru_security/types/code_line.py +29 -0
  57. capo_codeguru_security/types/code_snippet.py +29 -0
  58. capo_codeguru_security/types/create_scan_request.py +101 -0
  59. capo_codeguru_security/types/create_scan_response.py +78 -0
  60. capo_codeguru_security/types/create_upload_url_request.py +31 -0
  61. capo_codeguru_security/types/create_upload_url_response.py +59 -0
  62. capo_codeguru_security/types/detector_tags.py +14 -0
  63. capo_codeguru_security/types/encryption_config.py +28 -0
  64. capo_codeguru_security/types/error_code.py +20 -0
  65. capo_codeguru_security/types/error_message.py +5 -0
  66. capo_codeguru_security/types/file_path.py +62 -0
  67. capo_codeguru_security/types/finding.py +207 -0
  68. capo_codeguru_security/types/finding_identifier.py +33 -0
  69. capo_codeguru_security/types/finding_identifiers.py +33 -0
  70. capo_codeguru_security/types/finding_metrics_value_per_severity.py +87 -0
  71. capo_codeguru_security/types/findings.py +29 -0
  72. capo_codeguru_security/types/findings_metric_list.py +35 -0
  73. capo_codeguru_security/types/get_account_configuration_request.py +18 -0
  74. capo_codeguru_security/types/get_account_configuration_response.py +45 -0
  75. capo_codeguru_security/types/get_findings_request.py +32 -0
  76. capo_codeguru_security/types/get_findings_response.py +43 -0
  77. capo_codeguru_security/types/get_metrics_summary_request.py +24 -0
  78. capo_codeguru_security/types/get_metrics_summary_response.py +42 -0
  79. capo_codeguru_security/types/get_scan_request.py +27 -0
  80. capo_codeguru_security/types/get_scan_response.py +132 -0
  81. capo_codeguru_security/types/header_key.py +5 -0
  82. capo_codeguru_security/types/header_value.py +5 -0
  83. capo_codeguru_security/types/kms_key_arn.py +5 -0
  84. capo_codeguru_security/types/list_findings_metrics_request.py +32 -0
  85. capo_codeguru_security/types/list_findings_metrics_response.py +49 -0
  86. capo_codeguru_security/types/list_scans_request.py +26 -0
  87. capo_codeguru_security/types/list_scans_response.py +43 -0
  88. capo_codeguru_security/types/list_tags_for_resource_request.py +24 -0
  89. capo_codeguru_security/types/list_tags_for_resource_response.py +34 -0
  90. capo_codeguru_security/types/metrics_summary.py +121 -0
  91. capo_codeguru_security/types/next_token.py +5 -0
  92. capo_codeguru_security/types/recommendation.py +29 -0
  93. capo_codeguru_security/types/reference_urls.py +14 -0
  94. capo_codeguru_security/types/related_vulnerabilities.py +14 -0
  95. capo_codeguru_security/types/remediation.py +63 -0
  96. capo_codeguru_security/types/request_header_map.py +29 -0
  97. capo_codeguru_security/types/resource.py +29 -0
  98. capo_codeguru_security/types/resource_id.py +32 -0
  99. capo_codeguru_security/types/s3_url.py +5 -0
  100. capo_codeguru_security/types/scan_name.py +5 -0
  101. capo_codeguru_security/types/scan_name_arn.py +5 -0
  102. capo_codeguru_security/types/scan_name_with_finding_num.py +29 -0
  103. capo_codeguru_security/types/scan_state.py +18 -0
  104. capo_codeguru_security/types/scan_summaries.py +29 -0
  105. capo_codeguru_security/types/scan_summary.py +99 -0
  106. capo_codeguru_security/types/scan_type.py +17 -0
  107. capo_codeguru_security/types/scans_with_most_open_critical_findings.py +37 -0
  108. capo_codeguru_security/types/scans_with_most_open_findings.py +37 -0
  109. capo_codeguru_security/types/severity.py +20 -0
  110. capo_codeguru_security/types/status.py +18 -0
  111. capo_codeguru_security/types/suggested_fix.py +29 -0
  112. capo_codeguru_security/types/suggested_fixes.py +31 -0
  113. capo_codeguru_security/types/tag_key.py +5 -0
  114. capo_codeguru_security/types/tag_key_list.py +17 -0
  115. capo_codeguru_security/types/tag_map.py +29 -0
  116. capo_codeguru_security/types/tag_resource_request.py +40 -0
  117. capo_codeguru_security/types/tag_resource_response.py +18 -0
  118. capo_codeguru_security/types/tag_value.py +5 -0
  119. capo_codeguru_security/types/untag_resource_request.py +27 -0
  120. capo_codeguru_security/types/untag_resource_response.py +18 -0
  121. capo_codeguru_security/types/update_account_configuration_request.py +45 -0
  122. capo_codeguru_security/types/update_account_configuration_response.py +45 -0
  123. capo_codeguru_security/types/uuid.py +5 -0
  124. capo_codeguru_security/types/validation_exception_field.py +33 -0
  125. capo_codeguru_security/types/validation_exception_field_list.py +37 -0
  126. capo_codeguru_security/types/validation_exception_reason.py +20 -0
  127. capo_codeguru_security/types/vulnerability.py +90 -0
  128. capo_codeguru_security-0.1.0.dist-info/METADATA +101 -0
  129. capo_codeguru_security-0.1.0.dist-info/RECORD +132 -0
  130. capo_codeguru_security-0.1.0.dist-info/WHEEL +5 -0
  131. capo_codeguru_security-0.1.0.dist-info/licenses/LICENSE +21 -0
  132. 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,5 @@
1
+ """Generated from Smithy shape ``com.amazonaws.codegurusecurity#ErrorMessage``."""
2
+
3
+ from typing import TypeAlias
4
+
5
+ ErrorMessage: TypeAlias = str
@@ -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