pycfmodel 2.0.2__tar.gz → 2.1.0__tar.gz

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 (135) hide show
  1. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/dependabot.yml +0 -2
  2. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/copilot-setup-steps.yml +1 -1
  3. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/lint-and-test.yml +1 -1
  4. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/pypi-release.yml +1 -1
  5. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/test-docs.yml +1 -1
  6. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/update-cloudformation-actions.yml +1 -1
  7. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.readthedocs.yaml +1 -1
  8. {pycfmodel-2.0.2/pycfmodel.egg-info → pycfmodel-2.1.0}/PKG-INFO +4 -4
  9. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/cloudformation_actions.py +6 -11
  10. {pycfmodel-2.0.2 → pycfmodel-2.1.0/pycfmodel.egg-info}/PKG-INFO +4 -4
  11. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel.egg-info/requires.txt +2 -2
  12. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pyproject.toml +6 -6
  13. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_kms_key.py +1 -0
  14. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/uv.lock +104 -449
  15. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.flake8 +0 -0
  16. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/pull_request_template.md +0 -0
  17. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/release-drafter.yml +0 -0
  18. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/release-drafter.yml +0 -0
  19. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.github/workflows/zizmor.yml +0 -0
  20. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/.gitignore +0 -0
  21. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/CHANGELOG.md +0 -0
  22. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/CLAUDE.md +0 -0
  23. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/CODE_OF_CONDUCT.md +0 -0
  24. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/CONTRIBUTING.md +0 -0
  25. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/LICENSE.md +0 -0
  26. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/Makefile +0 -0
  27. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/README.md +0 -0
  28. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/changelog.md +0 -0
  29. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/code_of_conduct.md +0 -0
  30. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/contributing.md +0 -0
  31. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/index.md +0 -0
  32. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/reference/cfmodel.md +0 -0
  33. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/reference/properties.md +0 -0
  34. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/reference/resources.md +0 -0
  35. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/docs/stylesheets/extra.css +0 -0
  36. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/mkdocs.yml +0 -0
  37. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/__init__.py +0 -0
  38. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/action_expander.py +0 -0
  39. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/constants.py +0 -0
  40. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/base.py +0 -0
  41. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/cf_model.py +0 -0
  42. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/generic.py +0 -0
  43. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/parameter.py +0 -0
  44. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/autoscaling_auto_scaling_group.py +0 -0
  45. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/cloudwatch_alarm.py +0 -0
  46. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/dynamodb_table.py +0 -0
  47. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/ec2_vpc_endpoint_policy.py +0 -0
  48. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/elbv2_listener.py +0 -0
  49. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/elbv2_target_group.py +0 -0
  50. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/es_domain.py +0 -0
  51. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/generic_resource.py +0 -0
  52. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/iam_group.py +0 -0
  53. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/iam_instance_profile.py +0 -0
  54. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/iam_managed_policy.py +0 -0
  55. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/iam_policy.py +0 -0
  56. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/iam_role.py +0 -0
  57. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/iam_user.py +0 -0
  58. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/kms_key.py +0 -0
  59. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/opensearch_domain.py +0 -0
  60. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/policy.py +0 -0
  61. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/policy_document.py +0 -0
  62. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/property.py +0 -0
  63. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/security_group_egress_prop.py +0 -0
  64. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/security_group_ingress_prop.py +0 -0
  65. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/statement.py +0 -0
  66. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/statement_condition.py +0 -0
  67. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/tag.py +0 -0
  68. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/properties/types.py +0 -0
  69. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/resource.py +0 -0
  70. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/route53_record_set.py +0 -0
  71. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/s3_bucket.py +0 -0
  72. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/s3_bucket_policy.py +0 -0
  73. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/security_group.py +0 -0
  74. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/security_group_egress.py +0 -0
  75. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/security_group_ingress.py +0 -0
  76. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/sns_subscription.py +0 -0
  77. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/sns_topic.py +0 -0
  78. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/sns_topic_policy.py +0 -0
  79. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/sqs_queue.py +0 -0
  80. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/sqs_queue_policy.py +0 -0
  81. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/types.py +0 -0
  82. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/resources/wafv2_ip_set.py +0 -0
  83. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/types.py +0 -0
  84. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/model/utils.py +0 -0
  85. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/resolver.py +0 -0
  86. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel/utils.py +0 -0
  87. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel.egg-info/SOURCES.txt +0 -0
  88. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel.egg-info/dependency_links.txt +0 -0
  89. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/pycfmodel.egg-info/top_level.txt +0 -0
  90. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/scripts/generate_cloudformation_actions_file.py +0 -0
  91. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/scripts/generate_resource_from_schema.py +0 -0
  92. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/setup.cfg +0 -0
  93. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/properties/test_policy_document.py +0 -0
  94. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/properties/test_principal.py +0 -0
  95. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/properties/test_statement.py +0 -0
  96. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/properties/test_statement_condition.py +0 -0
  97. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_autoscaling_auto_scaling_group.py +0 -0
  98. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_cloudwatch_alarm.py +0 -0
  99. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_dynamodb_table.py +0 -0
  100. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_ec2_vpc_endpoint_policy.py +0 -0
  101. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_elbv2_listener.py +0 -0
  102. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_elbv2_target_group.py +0 -0
  103. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_es_domain.py +0 -0
  104. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_generic_resoure.py +0 -0
  105. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_iam_group.py +0 -0
  106. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_iam_instance_profile.py +0 -0
  107. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_iam_managed_policy.py +0 -0
  108. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_iam_policy.py +0 -0
  109. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_iam_role.py +0 -0
  110. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_iam_user.py +0 -0
  111. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_opensearch_domain.py +0 -0
  112. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_rds_security_groups.py +0 -0
  113. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_route53_record_set.py +0 -0
  114. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_s3_bucket.py +0 -0
  115. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_s3_bucket_policy.py +0 -0
  116. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_security_group.py +0 -0
  117. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_security_group_egress.py +0 -0
  118. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_security_group_ingress.py +0 -0
  119. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_sns_subscription.py +0 -0
  120. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_sns_topic.py +0 -0
  121. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_sns_topic_policy.py +0 -0
  122. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_sqs_queue.py +0 -0
  123. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_sqs_queue_policy.py +0 -0
  124. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/resources/test_wafv2_ip_set.py +0 -0
  125. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_action_expander.py +0 -0
  126. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_cf_model.py +0 -0
  127. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_constants.py +0 -0
  128. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_generic.py +0 -0
  129. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_parameter.py +0 -0
  130. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_regexs.py +0 -0
  131. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_resolver.py +0 -0
  132. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_resource.py +0 -0
  133. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_resource_generator.py +0 -0
  134. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_types.py +0 -0
  135. {pycfmodel-2.0.2 → pycfmodel-2.1.0}/tests/test_utils.py +0 -0
@@ -9,13 +9,11 @@ updates:
9
9
  directory: "/" # Location of package manifests
10
10
  schedule:
11
11
  interval: "monthly"
12
- open-pull-requests-limit: 1
13
12
  cooldown:
14
13
  default-days: 7
15
14
  - package-ecosystem: "github-actions"
16
15
  directory: "/"
17
16
  schedule:
18
17
  interval: "monthly"
19
- open-pull-requests-limit: 1
20
18
  cooldown:
21
19
  default-days: 7
@@ -36,7 +36,7 @@ jobs:
36
36
  enable-cache: true
37
37
 
38
38
  - name: Setup Python
39
- run: uv python install 3.9
39
+ run: uv python install 3.10
40
40
 
41
41
  - name: Install development dependencies
42
42
  run: make install-dev
@@ -11,7 +11,7 @@ jobs:
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
- python-version: ['3.9', '3.10', '3.11', '3.12']
14
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
15
15
 
16
16
  name: Python ${{ matrix.python-version }}
17
17
 
@@ -24,7 +24,7 @@ jobs:
24
24
  enable-cache: false # Disable cache for release builds to prevent cache poisoning
25
25
 
26
26
  - name: Setup python
27
- run: uv python install 3.9
27
+ run: uv python install 3.10
28
28
 
29
29
  - name: Build package
30
30
  run: uv build
@@ -21,7 +21,7 @@ jobs:
21
21
  enable-cache: true
22
22
 
23
23
  - name: Setup python
24
- run: uv python install 3.9
24
+ run: uv python install 3.10
25
25
 
26
26
  - run: make install-docs
27
27
 
@@ -25,7 +25,7 @@ jobs:
25
25
  uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
26
26
 
27
27
  - name: Setup python
28
- run: uv python install 3.12
28
+ run: uv python install 3.10
29
29
 
30
30
  - name: Install dependencies
31
31
  run: make install-cloudformation-update
@@ -8,7 +8,7 @@ formats: all
8
8
  build:
9
9
  os: ubuntu-22.04
10
10
  tools:
11
- python: "3.9"
11
+ python: "3.10"
12
12
 
13
13
  python:
14
14
  install:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycfmodel
3
- Version: 2.0.2
3
+ Version: 2.1.0
4
4
  Summary: A python model for Cloud Formation scripts
5
5
  Author-email: Skyscanner Security <security@skyscanner.net>
6
6
  Project-URL: Homepage, https://github.com/Skyscanner/pycfmodel
@@ -8,14 +8,14 @@ Project-URL: Repository, https://github.com/Skyscanner/pycfmodel
8
8
  Project-URL: Bug Tracker, https://github.com/Skyscanner/pycfmodel/issues
9
9
  Project-URL: Documentation, https://pycfmodel.readthedocs.io
10
10
  Project-URL: Changelog, https://github.com/Skyscanner/pycfmodel/releases
11
- Requires-Python: >=3.9.0
11
+ Requires-Python: >=3.10.0
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE.md
14
14
  Requires-Dist: pydantic~=2.7
15
15
  Provides-Extra: dev
16
- Requires-Dist: black>=22.1.0; extra == "dev"
16
+ Requires-Dist: black>=26.3.1; extra == "dev"
17
17
  Requires-Dist: isort>=5.4.2; extra == "dev"
18
- Requires-Dist: pytest>=6.0.1; extra == "dev"
18
+ Requires-Dist: pytest>=9.0.3; extra == "dev"
19
19
  Requires-Dist: pytest-cov>=2.10.1; extra == "dev"
20
20
  Requires-Dist: pytest-repeat==0.9.3; extra == "dev"
21
21
  Requires-Dist: ruff; extra == "dev"
@@ -229,9 +229,12 @@ CLOUDFORMATION_ACTIONS = [
229
229
  "aidevops:CreateChat",
230
230
  "aidevops:CreateKnowledgeItem",
231
231
  "aidevops:CreateOneTimeLoginSession",
232
+ "aidevops:CreatePrivateConnection",
232
233
  "aidevops:DeleteAgentSpace",
233
234
  "aidevops:DeleteKnowledgeItem",
235
+ "aidevops:DeletePrivateConnection",
234
236
  "aidevops:DeregisterService",
237
+ "aidevops:DescribePrivateConnection",
235
238
  "aidevops:DescribeSupportLevel",
236
239
  "aidevops:DisableOperatorApp",
237
240
  "aidevops:DisassociateService",
@@ -257,6 +260,7 @@ CLOUDFORMATION_ACTIONS = [
257
260
  "aidevops:ListKnowledgeItemVersions",
258
261
  "aidevops:ListKnowledgeItems",
259
262
  "aidevops:ListPendingMessages",
263
+ "aidevops:ListPrivateConnections",
260
264
  "aidevops:ListRecommendations",
261
265
  "aidevops:ListServices",
262
266
  "aidevops:ListTagsForResource",
@@ -272,6 +276,7 @@ CLOUDFORMATION_ACTIONS = [
272
276
  "aidevops:UpdateGoal",
273
277
  "aidevops:UpdateKnowledgeItem",
274
278
  "aidevops:UpdateOperatorAppIdpConfig",
279
+ "aidevops:UpdatePrivateConnectionCertificate",
275
280
  "aidevops:UpdateRecommendation",
276
281
  "aidevops:ValidateAwsAssociations",
277
282
  "aiops:CreateInvestigation",
@@ -11195,6 +11200,7 @@ CLOUDFORMATION_ACTIONS = [
11195
11200
  "kms:GenerateDataKeyWithoutPlaintext",
11196
11201
  "kms:GenerateMac",
11197
11202
  "kms:GenerateRandom",
11203
+ "kms:GetKeyLastUsage",
11198
11204
  "kms:GetKeyPolicy",
11199
11205
  "kms:GetKeyRotationStatus",
11200
11206
  "kms:GetParametersForImport",
@@ -19555,9 +19561,6 @@ CLOUDFORMATION_ACTIONS = [
19555
19561
  "translate:UntagResource",
19556
19562
  "translate:UpdateParallelData",
19557
19563
  "trustedadvisor:BatchUpdateRecommendationResourceExclusion",
19558
- "trustedadvisor:CreateEngagement",
19559
- "trustedadvisor:CreateEngagementAttachment",
19560
- "trustedadvisor:CreateEngagementCommunication",
19561
19564
  "trustedadvisor:DeleteNotificationConfigurationForDelegatedAdmin",
19562
19565
  "trustedadvisor:DescribeAccount",
19563
19566
  "trustedadvisor:DescribeAccountAccess",
@@ -19578,17 +19581,11 @@ CLOUDFORMATION_ACTIONS = [
19578
19581
  "trustedadvisor:DownloadRisk",
19579
19582
  "trustedadvisor:ExcludeCheckItems",
19580
19583
  "trustedadvisor:GenerateReport",
19581
- "trustedadvisor:GetEngagement",
19582
- "trustedadvisor:GetEngagementAttachment",
19583
- "trustedadvisor:GetEngagementType",
19584
19584
  "trustedadvisor:GetOrganizationRecommendation",
19585
19585
  "trustedadvisor:GetRecommendation",
19586
19586
  "trustedadvisor:IncludeCheckItems",
19587
19587
  "trustedadvisor:ListAccountsForParent",
19588
19588
  "trustedadvisor:ListChecks",
19589
- "trustedadvisor:ListEngagementCommunications",
19590
- "trustedadvisor:ListEngagementTypes",
19591
- "trustedadvisor:ListEngagements",
19592
19589
  "trustedadvisor:ListOrganizationRecommendationAccounts",
19593
19590
  "trustedadvisor:ListOrganizationRecommendationResources",
19594
19591
  "trustedadvisor:ListOrganizationRecommendations",
@@ -19599,8 +19596,6 @@ CLOUDFORMATION_ACTIONS = [
19599
19596
  "trustedadvisor:RefreshCheck",
19600
19597
  "trustedadvisor:SetAccountAccess",
19601
19598
  "trustedadvisor:SetOrganizationAccess",
19602
- "trustedadvisor:UpdateEngagement",
19603
- "trustedadvisor:UpdateEngagementStatus",
19604
19599
  "trustedadvisor:UpdateNotificationConfigurations",
19605
19600
  "trustedadvisor:UpdateNotificationPreferences",
19606
19601
  "trustedadvisor:UpdateOrganizationRecommendationLifecycle",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycfmodel
3
- Version: 2.0.2
3
+ Version: 2.1.0
4
4
  Summary: A python model for Cloud Formation scripts
5
5
  Author-email: Skyscanner Security <security@skyscanner.net>
6
6
  Project-URL: Homepage, https://github.com/Skyscanner/pycfmodel
@@ -8,14 +8,14 @@ Project-URL: Repository, https://github.com/Skyscanner/pycfmodel
8
8
  Project-URL: Bug Tracker, https://github.com/Skyscanner/pycfmodel/issues
9
9
  Project-URL: Documentation, https://pycfmodel.readthedocs.io
10
10
  Project-URL: Changelog, https://github.com/Skyscanner/pycfmodel/releases
11
- Requires-Python: >=3.9.0
11
+ Requires-Python: >=3.10.0
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE.md
14
14
  Requires-Dist: pydantic~=2.7
15
15
  Provides-Extra: dev
16
- Requires-Dist: black>=22.1.0; extra == "dev"
16
+ Requires-Dist: black>=26.3.1; extra == "dev"
17
17
  Requires-Dist: isort>=5.4.2; extra == "dev"
18
- Requires-Dist: pytest>=6.0.1; extra == "dev"
18
+ Requires-Dist: pytest>=9.0.3; extra == "dev"
19
19
  Requires-Dist: pytest-cov>=2.10.1; extra == "dev"
20
20
  Requires-Dist: pytest-repeat==0.9.3; extra == "dev"
21
21
  Requires-Dist: ruff; extra == "dev"
@@ -4,9 +4,9 @@ pydantic~=2.7
4
4
  httpx>=0.14.2
5
5
 
6
6
  [dev]
7
- black>=22.1.0
7
+ black>=26.3.1
8
8
  isort>=5.4.2
9
- pytest>=6.0.1
9
+ pytest>=9.0.3
10
10
  pytest-cov>=2.10.1
11
11
  pytest-repeat==0.9.3
12
12
  ruff
@@ -3,7 +3,7 @@ name = "pycfmodel"
3
3
  dynamic = ["version"]
4
4
  readme = "README.md"
5
5
  description="A python model for Cloud Formation scripts"
6
- requires-python=">=3.9.0"
6
+ requires-python=">=3.10.0"
7
7
  dependencies = [
8
8
  "pydantic~=2.7"
9
9
  ]
@@ -33,9 +33,9 @@ exclude = ["tests", "docs"]
33
33
 
34
34
  [project.optional-dependencies]
35
35
  dev = [
36
- "black>=22.1.0",
36
+ "black>=26.3.1",
37
37
  "isort>=5.4.2",
38
- "pytest>=6.0.1",
38
+ "pytest>=9.0.3",
39
39
  "pytest-cov>=2.10.1",
40
40
  "pytest-repeat==0.9.3",
41
41
  "ruff"
@@ -53,7 +53,7 @@ cloudformation-update = [
53
53
 
54
54
  [tool.black]
55
55
  line-length = 120
56
- target_version = ['py39']
56
+ target_version = ['py310']
57
57
 
58
58
  [tool.isort]
59
59
  multi_line_output = 3
@@ -97,8 +97,8 @@ exclude = [
97
97
  line-length = 120
98
98
  indent-width = 4
99
99
 
100
- # Assume Python 3.9
101
- target-version = "py39"
100
+ # Assume Python 3.10
101
+ target-version = "py310"
102
102
 
103
103
  [tool.ruff.lint]
104
104
  # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
@@ -103,6 +103,7 @@ def test_actions(kms_key):
103
103
  "kms:GenerateDataKeyWithoutPlaintext",
104
104
  "kms:GenerateMac",
105
105
  "kms:GenerateRandom",
106
+ "kms:GetKeyLastUsage",
106
107
  "kms:GetKeyPolicy",
107
108
  "kms:GetKeyRotationStatus",
108
109
  "kms:GetParametersForImport",