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,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,5 @@
1
+ """Generated from Smithy shape ``com.amazonaws.codegurusecurity#TagKey``."""
2
+
3
+ from typing import TypeAlias
4
+
5
+ TagKey: TypeAlias = str
@@ -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,5 @@
1
+ """Generated from Smithy shape ``com.amazonaws.codegurusecurity#TagValue``."""
2
+
3
+ from typing import TypeAlias
4
+
5
+ TagValue: TypeAlias = str
@@ -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,5 @@
1
+ """Generated from Smithy shape ``com.amazonaws.codegurusecurity#Uuid``."""
2
+
3
+ from typing import TypeAlias
4
+
5
+ Uuid: TypeAlias = str
@@ -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
+ ```