dbt-platform-helper 12.4.1__py3-none-any.whl → 12.5.1__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.

Potentially problematic release.


This version of dbt-platform-helper might be problematic. Click here for more details.

Files changed (38) hide show
  1. dbt_platform_helper/COMMANDS.md +1 -6
  2. dbt_platform_helper/commands/config.py +2 -2
  3. dbt_platform_helper/commands/copilot.py +51 -30
  4. dbt_platform_helper/commands/environment.py +25 -185
  5. dbt_platform_helper/commands/pipeline.py +10 -173
  6. dbt_platform_helper/constants.py +10 -0
  7. dbt_platform_helper/domain/codebase.py +8 -4
  8. dbt_platform_helper/domain/config_validator.py +242 -0
  9. dbt_platform_helper/domain/copilot_environment.py +204 -0
  10. dbt_platform_helper/domain/database_copy.py +16 -12
  11. dbt_platform_helper/domain/maintenance_page.py +44 -20
  12. dbt_platform_helper/domain/pipelines.py +213 -0
  13. dbt_platform_helper/domain/terraform_environment.py +86 -0
  14. dbt_platform_helper/domain/test_platform_terraform_manifest_generator.py +100 -0
  15. dbt_platform_helper/jinja2_tags.py +1 -1
  16. dbt_platform_helper/providers/cache.py +14 -21
  17. dbt_platform_helper/providers/cloudformation.py +0 -1
  18. dbt_platform_helper/providers/config.py +100 -0
  19. dbt_platform_helper/providers/copilot.py +2 -0
  20. dbt_platform_helper/providers/files.py +26 -0
  21. dbt_platform_helper/providers/opensearch.py +36 -0
  22. dbt_platform_helper/providers/platform_config_schema.py +589 -527
  23. dbt_platform_helper/providers/redis.py +34 -0
  24. dbt_platform_helper/providers/vpc.py +57 -0
  25. dbt_platform_helper/providers/yaml_file.py +72 -0
  26. dbt_platform_helper/templates/addons/svc/s3-cross-account-policy.yml +67 -0
  27. dbt_platform_helper/utils/application.py +32 -34
  28. dbt_platform_helper/utils/aws.py +1 -107
  29. dbt_platform_helper/utils/files.py +8 -59
  30. dbt_platform_helper/utils/platform_config.py +0 -7
  31. dbt_platform_helper/utils/template.py +10 -0
  32. dbt_platform_helper/utils/validation.py +5 -327
  33. dbt_platform_helper/utils/versioning.py +12 -0
  34. {dbt_platform_helper-12.4.1.dist-info → dbt_platform_helper-12.5.1.dist-info}/METADATA +2 -2
  35. {dbt_platform_helper-12.4.1.dist-info → dbt_platform_helper-12.5.1.dist-info}/RECORD +38 -26
  36. {dbt_platform_helper-12.4.1.dist-info → dbt_platform_helper-12.5.1.dist-info}/WHEEL +1 -1
  37. {dbt_platform_helper-12.4.1.dist-info → dbt_platform_helper-12.5.1.dist-info}/LICENSE +0 -0
  38. {dbt_platform_helper-12.4.1.dist-info → dbt_platform_helper-12.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,24 +1,7 @@
1
- import os
2
- import re
3
- from pathlib import Path
4
-
5
- import click
6
- import yaml
7
1
  from schema import SchemaError
8
- from yaml.parser import ParserError
9
- from yamllint import config
10
- from yamllint import linter
11
2
 
12
- from dbt_platform_helper.constants import CODEBASE_PIPELINES_KEY
13
- from dbt_platform_helper.constants import ENVIRONMENTS_KEY
14
- from dbt_platform_helper.constants import PLATFORM_CONFIG_FILE
15
- from dbt_platform_helper.constants import PLATFORM_HELPER_VERSION_FILE
16
- from dbt_platform_helper.providers.platform_config_schema import EXTENSION_SCHEMAS
17
- from dbt_platform_helper.providers.platform_config_schema import PLATFORM_CONFIG_SCHEMA
18
- from dbt_platform_helper.utils.aws import get_supported_opensearch_versions
19
- from dbt_platform_helper.utils.aws import get_supported_redis_versions
20
- from dbt_platform_helper.utils.files import apply_environment_defaults
21
- from dbt_platform_helper.utils.messages import abort_with_error
3
+ from dbt_platform_helper.domain.config_validator import ConfigValidator
4
+ from dbt_platform_helper.providers.platform_config_schema import PlatformConfigSchema
22
5
 
23
6
 
24
7
  def validate_addons(addons: dict):
@@ -33,7 +16,7 @@ def validate_addons(addons: dict):
33
16
  if not addon_type:
34
17
  errors[addon_name] = f"Missing addon type in addon '{addon_name}'"
35
18
  continue
36
- schema = EXTENSION_SCHEMAS.get(addon_type, None)
19
+ schema = PlatformConfigSchema.extension_schemas().get(addon_type, None)
37
20
  if not schema:
38
21
  errors[addon_name] = (
39
22
  f"Unsupported addon type '{addon_type}' in addon '{addon_name}'"
@@ -43,312 +26,7 @@ def validate_addons(addons: dict):
43
26
  except SchemaError as ex:
44
27
  errors[addon_name] = f"Error in {addon_name}: {ex.code}"
45
28
 
46
- _validate_extension_supported_versions(
47
- config={"extensions": addons},
48
- extension_type="redis",
49
- version_key="engine",
50
- get_supported_versions=get_supported_redis_versions,
51
- )
52
- _validate_extension_supported_versions(
53
- config={"extensions": addons},
54
- extension_type="opensearch",
55
- version_key="engine",
56
- get_supported_versions=get_supported_opensearch_versions,
57
- )
29
+ ConfigValidator().validate_supported_redis_versions({"extensions": addons})
30
+ ConfigValidator().validate_supported_opensearch_versions({"extensions": addons})
58
31
 
59
32
  return errors
60
-
61
-
62
- def float_between_with_halfstep(lower, upper):
63
- def is_between(value):
64
- is_number = isinstance(value, int) or isinstance(value, float)
65
- is_half_step = re.match(r"^\d+(\.[05])?$", str(value))
66
-
67
- if is_number and is_half_step and lower <= value <= upper:
68
- return True
69
- raise SchemaError(f"should be a number between {lower} and {upper} in increments of 0.5")
70
-
71
- return is_between
72
-
73
-
74
- def validate_platform_config(config):
75
- PLATFORM_CONFIG_SCHEMA.validate(config)
76
- enriched_config = apply_environment_defaults(config)
77
- _validate_environment_pipelines(enriched_config)
78
- _validate_environment_pipelines_triggers(enriched_config)
79
- _validate_codebase_pipelines(enriched_config)
80
- validate_database_copy_section(enriched_config)
81
-
82
- _validate_extension_supported_versions(
83
- config=config,
84
- extension_type="redis",
85
- version_key="engine",
86
- get_supported_versions=get_supported_redis_versions,
87
- )
88
- _validate_extension_supported_versions(
89
- config=config,
90
- extension_type="opensearch",
91
- version_key="engine",
92
- get_supported_versions=get_supported_opensearch_versions,
93
- )
94
-
95
-
96
- def _validate_extension_supported_versions(
97
- config, extension_type, version_key, get_supported_versions
98
- ):
99
- extensions = config.get("extensions", {})
100
- if not extensions:
101
- return
102
-
103
- extensions_for_type = [
104
- extension
105
- for extension in config.get("extensions", {}).values()
106
- if extension.get("type") == extension_type
107
- ]
108
-
109
- supported_extension_versions = get_supported_versions()
110
- extensions_with_invalid_version = []
111
-
112
- for extension in extensions_for_type:
113
-
114
- environments = extension.get("environments", {})
115
-
116
- if not isinstance(environments, dict):
117
- click.secho(
118
- f"Error: {extension_type} extension definition is invalid type, expected dictionary",
119
- fg="red",
120
- )
121
- continue
122
- for environment, env_config in environments.items():
123
-
124
- # An extension version doesn't need to be specified for all environments, provided one is specified under "*".
125
- # So check if the version is set before checking if it's supported
126
- extension_version = env_config.get(version_key)
127
- if extension_version and extension_version not in supported_extension_versions:
128
- extensions_with_invalid_version.append(
129
- {"environment": environment, "version": extension_version}
130
- )
131
-
132
- for version_failure in extensions_with_invalid_version:
133
- click.secho(
134
- f"{extension_type} version for environment {version_failure['environment']} is not in the list of supported {extension_type} versions: {supported_extension_versions}. Provided Version: {version_failure['version']}",
135
- fg="red",
136
- )
137
-
138
-
139
- def validate_database_copy_section(config):
140
- extensions = config.get("extensions", {})
141
- if not extensions:
142
- return
143
-
144
- postgres_extensions = {
145
- key: ext for key, ext in extensions.items() if ext.get("type", None) == "postgres"
146
- }
147
-
148
- if not postgres_extensions:
149
- return
150
-
151
- errors = []
152
-
153
- for extension_name, extension in postgres_extensions.items():
154
- database_copy_sections = extension.get("database_copy", [])
155
-
156
- if not database_copy_sections:
157
- return
158
-
159
- all_environments = [env for env in config.get("environments", {}).keys() if not env == "*"]
160
- all_envs_string = ", ".join(all_environments)
161
-
162
- for section in database_copy_sections:
163
- from_env = section["from"]
164
- to_env = section["to"]
165
-
166
- from_account = _get_env_deploy_account_info(config, from_env, "id")
167
- to_account = _get_env_deploy_account_info(config, to_env, "id")
168
-
169
- if from_env == to_env:
170
- errors.append(
171
- f"database_copy 'to' and 'from' cannot be the same environment in extension '{extension_name}'."
172
- )
173
-
174
- if "prod" in to_env:
175
- errors.append(
176
- f"Copying to a prod environment is not supported: database_copy 'to' cannot be '{to_env}' in extension '{extension_name}'."
177
- )
178
-
179
- if from_env not in all_environments:
180
- errors.append(
181
- f"database_copy 'from' parameter must be a valid environment ({all_envs_string}) but was '{from_env}' in extension '{extension_name}'."
182
- )
183
-
184
- if to_env not in all_environments:
185
- errors.append(
186
- f"database_copy 'to' parameter must be a valid environment ({all_envs_string}) but was '{to_env}' in extension '{extension_name}'."
187
- )
188
-
189
- if from_account != to_account:
190
- if "from_account" not in section:
191
- errors.append(
192
- f"Environments '{from_env}' and '{to_env}' are in different AWS accounts. The 'from_account' parameter must be present."
193
- )
194
- elif section["from_account"] != from_account:
195
- errors.append(
196
- f"Incorrect value for 'from_account' for environment '{from_env}'"
197
- )
198
-
199
- if "to_account" not in section:
200
- errors.append(
201
- f"Environments '{from_env}' and '{to_env}' are in different AWS accounts. The 'to_account' parameter must be present."
202
- )
203
- elif section["to_account"] != to_account:
204
- errors.append(f"Incorrect value for 'to_account' for environment '{to_env}'")
205
-
206
- if errors:
207
- abort_with_error("\n".join(errors))
208
-
209
-
210
- def _get_env_deploy_account_info(config, env, key):
211
- return (
212
- config.get("environments", {}).get(env, {}).get("accounts", {}).get("deploy", {}).get(key)
213
- )
214
-
215
-
216
- def _validate_environment_pipelines(config):
217
- bad_pipelines = {}
218
- for pipeline_name, pipeline in config.get("environment_pipelines", {}).items():
219
- bad_envs = []
220
- pipeline_account = pipeline.get("account", None)
221
- if pipeline_account:
222
- for env in pipeline.get("environments", {}).keys():
223
- env_account = _get_env_deploy_account_info(config, env, "name")
224
- if not env_account == pipeline_account:
225
- bad_envs.append(env)
226
- if bad_envs:
227
- bad_pipelines[pipeline_name] = {"account": pipeline_account, "bad_envs": bad_envs}
228
- if bad_pipelines:
229
- message = "The following pipelines are misconfigured:"
230
- for pipeline, detail in bad_pipelines.items():
231
- envs = detail["bad_envs"]
232
- acc = detail["account"]
233
- message += f" '{pipeline}' - these environments are not in the '{acc}' account: {', '.join(envs)}\n"
234
- abort_with_error(message)
235
-
236
-
237
- def _validate_codebase_pipelines(config):
238
- if CODEBASE_PIPELINES_KEY in config:
239
- for codebase in config[CODEBASE_PIPELINES_KEY]:
240
- codebase_environments = []
241
-
242
- for pipeline in codebase["pipelines"]:
243
- codebase_environments += [e["name"] for e in pipeline[ENVIRONMENTS_KEY]]
244
-
245
- unique_codebase_environments = sorted(list(set(codebase_environments)))
246
-
247
- if sorted(codebase_environments) != sorted(unique_codebase_environments):
248
- abort_with_error(
249
- f"The {PLATFORM_CONFIG_FILE} file is invalid, each environment can only be "
250
- "listed in a single pipeline per codebase"
251
- )
252
-
253
-
254
- def _validate_environment_pipelines_triggers(config):
255
- errors = []
256
- pipelines_with_triggers = {
257
- pipeline_name: pipeline
258
- for pipeline_name, pipeline in config.get("environment_pipelines", {}).items()
259
- if "pipeline_to_trigger" in pipeline
260
- }
261
-
262
- for pipeline_name, pipeline in pipelines_with_triggers.items():
263
- pipeline_to_trigger = pipeline["pipeline_to_trigger"]
264
- if pipeline_to_trigger not in config.get("environment_pipelines", {}):
265
- message = f" '{pipeline_name}' - '{pipeline_to_trigger}' is not a valid target pipeline to trigger"
266
-
267
- errors.append(message)
268
- continue
269
-
270
- if pipeline_to_trigger == pipeline_name:
271
- message = f" '{pipeline_name}' - pipelines cannot trigger themselves"
272
- errors.append(message)
273
-
274
- if errors:
275
- error_message = "The following pipelines are misconfigured: \n"
276
- abort_with_error(error_message + "\n ".join(errors))
277
-
278
-
279
- def lint_yaml_for_duplicate_keys(file_path):
280
- lint_yaml_config = """
281
- rules:
282
- key-duplicates: enable
283
- """
284
- yaml_config = config.YamlLintConfig(lint_yaml_config)
285
-
286
- with open(file_path, "r") as yaml_file:
287
- file_contents = yaml_file.read()
288
- results = linter.run(file_contents, yaml_config)
289
-
290
- parsed_results = [
291
- "\t" + f"Line {result.line}: {result.message}".replace(" in mapping (key-duplicates)", "")
292
- for result in results
293
- ]
294
-
295
- return parsed_results
296
-
297
-
298
- def load_and_validate_platform_config(path=PLATFORM_CONFIG_FILE, disable_file_check=False):
299
- if not disable_file_check:
300
- config_file_check(path)
301
- try:
302
- conf = yaml.safe_load(Path(path).read_text())
303
- duplicate_keys = lint_yaml_for_duplicate_keys(path)
304
- if duplicate_keys:
305
- abort_with_error(
306
- "Duplicate keys found in platform-config:"
307
- + os.linesep
308
- + os.linesep.join(duplicate_keys)
309
- )
310
- validate_platform_config(conf)
311
- return conf
312
- except ParserError:
313
- abort_with_error(f"{PLATFORM_CONFIG_FILE} is not valid YAML")
314
- except SchemaError as e:
315
- abort_with_error(f"Schema error in {PLATFORM_CONFIG_FILE}. {e}")
316
-
317
-
318
- def config_file_check(path=PLATFORM_CONFIG_FILE):
319
- platform_config_exists = Path(path).exists()
320
- errors = []
321
- warnings = []
322
-
323
- messages = {
324
- "storage.yml": {"instruction": " under the key 'extensions'", "type": errors},
325
- "extensions.yml": {"instruction": " under the key 'extensions'", "type": errors},
326
- "pipelines.yml": {
327
- "instruction": ", change the key 'codebases' to 'codebase_pipelines'",
328
- "type": errors,
329
- },
330
- PLATFORM_HELPER_VERSION_FILE: {
331
- "instruction": ", under the key `default_versions: platform-helper:`",
332
- "type": warnings,
333
- },
334
- }
335
-
336
- for file in messages.keys():
337
- if Path(file).exists():
338
- message = (
339
- f"`{file}` is no longer supported. Please move its contents into the "
340
- f"`{PLATFORM_CONFIG_FILE}` file{messages[file]['instruction']} and delete `{file}`."
341
- )
342
- messages[file]["type"].append(message)
343
-
344
- if not errors and not warnings and not platform_config_exists:
345
- errors.append(
346
- f"`{PLATFORM_CONFIG_FILE}` is missing. "
347
- "Please check it exists and you are in the root directory of your deployment project."
348
- )
349
-
350
- if warnings:
351
- click.secho("\n".join(warnings), bg="yellow", fg="black")
352
- if errors:
353
- click.secho("\n".join(errors), bg="red", fg="white")
354
- exit(1)
@@ -11,6 +11,7 @@ from typing import Union
11
11
  import click
12
12
  import requests
13
13
 
14
+ from dbt_platform_helper.constants import DEFAULT_TERRAFORM_PLATFORM_MODULES_VERSION
14
15
  from dbt_platform_helper.constants import PLATFORM_CONFIG_FILE
15
16
  from dbt_platform_helper.constants import PLATFORM_HELPER_VERSION_FILE
16
17
  from dbt_platform_helper.providers.validation import IncompatibleMajorVersionException
@@ -297,3 +298,14 @@ def get_required_platform_helper_version(
297
298
  raise SystemExit(1)
298
299
 
299
300
  return out
301
+
302
+
303
+ def get_required_terraform_platform_modules_version(
304
+ cli_terraform_platform_modules_version, platform_config_terraform_modules_default_version
305
+ ):
306
+ version_preference_order = [
307
+ cli_terraform_platform_modules_version,
308
+ platform_config_terraform_modules_default_version,
309
+ DEFAULT_TERRAFORM_PLATFORM_MODULES_VERSION,
310
+ ]
311
+ return [version for version in version_preference_order if version][0]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: dbt-platform-helper
3
- Version: 12.4.1
3
+ Version: 12.5.1
4
4
  Summary: Set of tools to help transfer applications/services from GOV.UK PaaS to DBT PaaS augmenting AWS Copilot.
5
5
  License: MIT
6
6
  Author: Department for Business and Trade Platform Team
@@ -1,4 +1,4 @@
1
- dbt_platform_helper/COMMANDS.md,sha256=6VGkyKa_AB1adSlyhWIKrfDckq2n-xxqnBbBpgO5bnc,22207
1
+ dbt_platform_helper/COMMANDS.md,sha256=Sm_rxHiEtdoRjmEnWAYpaEgOyCddWbV_PVP8aXrH_3g,21981
2
2
  dbt_platform_helper/README.md,sha256=B0qN2_u_ASqqgkGDWY2iwNGZt_9tUgMb9XqtaTuzYjw,1530
3
3
  dbt_platform_helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  dbt_platform_helper/addon-plans.yml,sha256=O46a_ODsGG9KXmQY_1XbSGqrpSaHSLDe-SdROzHx8Go,4545
@@ -6,34 +6,45 @@ dbt_platform_helper/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
6
6
  dbt_platform_helper/commands/application.py,sha256=eVwCaYuwBlk0zx0xfA6fW7b-S1pl8gkyT1lHKeeh2R0,10147
7
7
  dbt_platform_helper/commands/codebase.py,sha256=KB8irKyFtb6pKn5cQ0MmTywGW7Vd8SSbWjT2mRnh3JA,2270
8
8
  dbt_platform_helper/commands/conduit.py,sha256=KqRWiirl5Xl7qcJXOAsirbTLlV1XquOjddsopuj0Kp4,2272
9
- dbt_platform_helper/commands/config.py,sha256=LKHPBR0xCPiX_oR2Gtl0_KO9WqABNDF5w_dI7WRxhWk,12117
10
- dbt_platform_helper/commands/copilot.py,sha256=XizScFxONNB3RLecRfEgCv--TwQ1j2rCUKGCx0nPq4I,12883
9
+ dbt_platform_helper/commands/config.py,sha256=vIJh1piAqxRgxr4t68okPLfo-inkPiSoRNUFGPQBChg,12129
10
+ dbt_platform_helper/commands/copilot.py,sha256=1CTyAkTQBF_i6zkqYzOIUo5wq9UYWfj-G1W8D2oRjmE,13623
11
11
  dbt_platform_helper/commands/database.py,sha256=aG3zcMHL5PE96b7LSAu0FGCbgcycQej3AGRcd-bpXUo,4115
12
- dbt_platform_helper/commands/environment.py,sha256=VNIzuCM6RT-jVMk3Km0d88NEhrkTEWNqscEypVwLSWU,9294
12
+ dbt_platform_helper/commands/environment.py,sha256=NyzvKnhPTklwg5ycC6KYc254avYvPiuVRYnaQ9doxgI,3356
13
13
  dbt_platform_helper/commands/generate.py,sha256=YLCPb-xcPapGcsLn-7d1Am7BpGp5l0iecIDTOdNGjHk,722
14
14
  dbt_platform_helper/commands/notify.py,sha256=kVJ0s78QMiaEWPVKu_bbMko4DW2uJy2fu8-HNJsglyk,3748
15
- dbt_platform_helper/commands/pipeline.py,sha256=_SVodU-XL5ierxzvkuarSTi7W8pmxnl5_uHc-gEynNw,8491
15
+ dbt_platform_helper/commands/pipeline.py,sha256=tdLgcOOzPFbECKYN9UUHwK6tiwPvrMx3c4Q8ghRe1no,2685
16
16
  dbt_platform_helper/commands/secrets.py,sha256=QjF9xUChioIr_P0fzqwyEcqLvcN-RNZmNFFlaUPVU9o,3994
17
17
  dbt_platform_helper/commands/version.py,sha256=XVfSd53TDti4cceBqTmRfq_yZnvxs14RbrOjNJHW75U,1444
18
- dbt_platform_helper/constants.py,sha256=VPixgADOM4HMbUvNFOieI4OygDqzHl34y4IUnowqD7c,476
18
+ dbt_platform_helper/constants.py,sha256=f1zl5PJoauUxWOirXBJ8bdAGxOAQVLqNeCs6hldaq2I,971
19
19
  dbt_platform_helper/default-extensions.yml,sha256=SU1ZitskbuEBpvE7efc3s56eAUF11j70brhj_XrNMMo,493
20
20
  dbt_platform_helper/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- dbt_platform_helper/domain/codebase.py,sha256=vs25ytD0iKwfuX-EoYHwG6qiZAmfvKyQiYT9BeWZ_s4,9688
21
+ dbt_platform_helper/domain/codebase.py,sha256=oaRyztqIVy3-3t9ChP4DEWN7DOhZJrr0xMY_LLm4GzI,9797
22
22
  dbt_platform_helper/domain/conduit.py,sha256=mvjDzxh-SCUCY5qGL73kG8TT7YqeQR8XtNcHx26SW2w,4344
23
- dbt_platform_helper/domain/database_copy.py,sha256=m25FA6DkF_yG3lVcbxBEleYxwHA85hQrB5fFeIg6adM,8988
24
- dbt_platform_helper/domain/maintenance_page.py,sha256=LN-1qnU9oprYvLbV_pHOWOG_QsIluGpYPIfU1E4La-A,15742
25
- dbt_platform_helper/jinja2_tags.py,sha256=jFyN_Sxmko1GSfvrqRIGQ80CCW8EwlCV3su0ahJPfoE,541
23
+ dbt_platform_helper/domain/config_validator.py,sha256=7te6L6zJrb-soVB5TKm4UwJyhCdONmNvE0TbqXb5U60,10177
24
+ dbt_platform_helper/domain/copilot_environment.py,sha256=UJw08KWIXspXMJEgbsO0f8RLlUWhmyAfVA6eUZa9X10,8143
25
+ dbt_platform_helper/domain/database_copy.py,sha256=OqxEARb2yIgoqu8LHp90IcW3gkNlNbPHUR5P9om5Sx4,9315
26
+ dbt_platform_helper/domain/maintenance_page.py,sha256=evj50GqmcgOtduQN20JJ6-M6zGubCW48DRa2V4yvy8o,16767
27
+ dbt_platform_helper/domain/pipelines.py,sha256=Woo1I_ceiNV53zOv1XdljfIsEAD65DgmEpr3_VyCRxI,8076
28
+ dbt_platform_helper/domain/terraform_environment.py,sha256=P1LlkMScIzzsoQFiLOTqidnagP9RCz-HRkd8z_JkvwQ,3056
29
+ dbt_platform_helper/domain/test_platform_terraform_manifest_generator.py,sha256=DvDlTeLGJfiAJKshBJKe9SZm4uMSOR7MMUPy37rUwKE,4325
30
+ dbt_platform_helper/jinja2_tags.py,sha256=hKG6RS3zlxJHQ-Op9r2U2-MhWp4s3lZir4Ihe24ApJ0,540
26
31
  dbt_platform_helper/platform_exception.py,sha256=bheZV9lqGvrCVTNT92349dVntNDEDWTEwciZgC83WzE,187
27
32
  dbt_platform_helper/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
33
  dbt_platform_helper/providers/aws.py,sha256=KHgySe6cwEw1wePjw6DL7uSyZRk3DN_Aqqi8KnRoB3M,1208
29
- dbt_platform_helper/providers/cache.py,sha256=XZpzOykanVdFGi0aiVGPgonKMHTT7U7OsZbbkqHoCu8,2936
30
- dbt_platform_helper/providers/cloudformation.py,sha256=YmeofMMxh9hzhU4Osa1vR41s18jNXzsZdEfpQUk1Lc4,4976
31
- dbt_platform_helper/providers/copilot.py,sha256=2BkQXn17GC1oGfCSCXXapTqT5OEhpEBeNkQ33g-U6wU,5245
34
+ dbt_platform_helper/providers/cache.py,sha256=GIFVdpfXVnVgf2POQvBvZDP6pvYeUFjEuAdAQLbhJXs,2563
35
+ dbt_platform_helper/providers/cloudformation.py,sha256=AMUuhHqjjyYwraFKdkVLgcHs7XZShNHkQFZWHBOMeGg,4877
36
+ dbt_platform_helper/providers/config.py,sha256=arJ01kcbBxkarE2bGO-VKraBkYOborZqGBklmt0ckTk,3663
37
+ dbt_platform_helper/providers/copilot.py,sha256=nBbt-PoGXVkmb9njJti6Et8dq1W9GytW3jGBydNNYYU,5317
32
38
  dbt_platform_helper/providers/ecs.py,sha256=XlQHYhZiLGrqR-1ZWMagGH2R2Hy7mCP6676eZL3YbNQ,3842
39
+ dbt_platform_helper/providers/files.py,sha256=E4PAHjGlAFEgbU9ntvHJguKKJf5gwrZF6H1LY054QG0,683
33
40
  dbt_platform_helper/providers/load_balancers.py,sha256=0tPkuQ_jWfan44HrBA5EMLqrZaYQl-Lw5PavZ1a1iag,1615
34
- dbt_platform_helper/providers/platform_config_schema.py,sha256=38CV-j4TCTLUG3gZaZWeW5ArUUC_7ZiQJwPl_Goqk7I,19597
41
+ dbt_platform_helper/providers/opensearch.py,sha256=tp64jTzHlutleqMpi2h_ZKH1iakZPJnUODebX6i2mfA,1335
42
+ dbt_platform_helper/providers/platform_config_schema.py,sha256=vKyk32tMJU99RZMnpqV9phS5-8N4tduSPZJOJBObYss,26513
43
+ dbt_platform_helper/providers/redis.py,sha256=aj8pitxG9IKrMkL3fIYayQhcHPPzApdaXq0Uq_0yblg,1217
35
44
  dbt_platform_helper/providers/secrets.py,sha256=6cYIR15dLdHmqxtWQpM6R71e0_Xgsg9V291HBG-0LV0,5272
36
45
  dbt_platform_helper/providers/validation.py,sha256=d_YzJZVjGNO65pXcPIcFc9I-FRCESeEC7GvUzP8n-As,596
46
+ dbt_platform_helper/providers/vpc.py,sha256=AtXW1qNQhmraeYAf7b04lLplcSvUG18EMrX_hPRIHiw,1905
47
+ dbt_platform_helper/providers/yaml_file.py,sha256=7jMLsDWetBBHWUvcaW652LaYUqICnf0n1H9eS6kNT5o,1990
37
48
  dbt_platform_helper/templates/.copilot/config.yml,sha256=J_bA9sCtBdCPBRImpCBRnYvhQd4vpLYIXIU-lq9vbkA,158
38
49
  dbt_platform_helper/templates/.copilot/image_build_run.sh,sha256=adYucYXEB-kAgZNjTQo0T6EIAY8sh_xCEvVhWKKQ8mw,164
39
50
  dbt_platform_helper/templates/.copilot/phases/build.sh,sha256=umKXePcRvx4XyrRY0fAWIyYFtNjqBI2L8vIJk-V7C60,121
@@ -45,6 +56,7 @@ dbt_platform_helper/templates/addon-instructions.txt,sha256=Dhd1xDbFKnX7xjfCz0W5
45
56
  dbt_platform_helper/templates/addons/README.md,sha256=UdVydY2ocm1OLKecZ8MAiXet3rKsMiq0PpBrmi0Xrns,412
46
57
  dbt_platform_helper/templates/addons/svc/appconfig-ipfilter.yml,sha256=nBIXV4um4jIvXs3Q5QycHqVpJODK5yg_M-xJT6AOBKE,977
47
58
  dbt_platform_helper/templates/addons/svc/prometheus-policy.yml,sha256=PwkGwri6IUuullXjEu17RZWYdoJR45Eb7BdUb2_AdOA,1074
59
+ dbt_platform_helper/templates/addons/svc/s3-cross-account-policy.yml,sha256=tZQ5XNIMPxv55Ilu0fIcc1I57dzDaQIQImhfsrijpQY,2211
48
60
  dbt_platform_helper/templates/addons/svc/s3-policy.yml,sha256=jwTpFNmm8CaP0c6VXXBJvEm_YLA17Nf-S1xyU1ahLJ8,2164
49
61
  dbt_platform_helper/templates/addons/svc/subscription-filter.yml,sha256=irD0AjPc38xTRzEday2Ko-KrjK4hPlyLxUFvUITjMkU,914
50
62
  dbt_platform_helper/templates/ci-codebuild-role-policy.json,sha256=hNE-wGrraWxsJAWE9ahtL7Bkw7PEz-CXBQnM3DR70vQ,1836
@@ -72,22 +84,22 @@ dbt_platform_helper/templates/svc/manifest-backend.yml,sha256=aAD9ndkbXnF7JBAKS2
72
84
  dbt_platform_helper/templates/svc/manifest-public.yml,sha256=6NHVR_onBu5hbwynLrB6roDRce7JcylSc0qeYvzlPdI,3664
73
85
  dbt_platform_helper/templates/svc/overrides/cfn.patches.yml,sha256=W7-d017akuUq9kda64DQxazavcRcCPDjaAik6t1EZqM,742
74
86
  dbt_platform_helper/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- dbt_platform_helper/utils/application.py,sha256=ugY3nbUHRNFvJgaD4446EdSvIyILEN6ouuuk7eoyXe8,4538
87
+ dbt_platform_helper/utils/application.py,sha256=53xGrG8VBKrM4jyBKjuZZdwaYBbJ3PiznCCwlLieTKw,4804
76
88
  dbt_platform_helper/utils/arn_parser.py,sha256=BaXzIxSOLdFmP_IfAxRq-0j-0Re1iCN7L4j2Zi5-CRQ,1304
77
- dbt_platform_helper/utils/aws.py,sha256=y7oNjsfTfaduhIZHK9_NDOdhU49OvrKFIvkh8QyUYlc,19724
89
+ dbt_platform_helper/utils/aws.py,sha256=4GRzsY9nJUWpZoG3zjkb4bj98ec3PMxZ3sFgmvGlw9w,16349
78
90
  dbt_platform_helper/utils/click.py,sha256=Fx4y4bbve1zypvog_sgK7tJtCocmzheoEFLBRv1lfdM,2943
79
91
  dbt_platform_helper/utils/cloudfoundry.py,sha256=GnQ4fVLnDfOdNSrsJjI6ElZHqpgwINeoPn77cUH2UFY,484
80
- dbt_platform_helper/utils/files.py,sha256=wKDPLZSC3tIZrto-0xGYPmemN8Fsn4spdUsNtYQVVcY,3084
92
+ dbt_platform_helper/utils/files.py,sha256=adQtG2E1IQHDKfeX06l6j1B7UTYukwBuR_uhJHaoi5M,1873
81
93
  dbt_platform_helper/utils/git.py,sha256=7JGZMaI8-cU6-GjXIXjOlsYfKu_RppLOGyAicBd4n_8,704
82
94
  dbt_platform_helper/utils/manifests.py,sha256=ji3UYHCxq9tTpkm4MlRa2y0-JOYYqq1pWZ2h_zpj0UU,507
83
95
  dbt_platform_helper/utils/messages.py,sha256=aLx6s9utt__IqlDdeIYq4n82ERwludu2Zfqy0Q2t-x8,115
84
- dbt_platform_helper/utils/platform_config.py,sha256=2RfIxBAT5fv7WR4YuP3yomUK7sKZFL77xevuHnUALdg,676
85
- dbt_platform_helper/utils/template.py,sha256=raRx4QUCVJtKfvJK08Egg6gwWcs3r3V4nPWcJW4xNhA,574
86
- dbt_platform_helper/utils/validation.py,sha256=wvkU1H6b-m8rbPnMif8pbVPpOXGyg2ak1MNWtxn-OUY,13390
87
- dbt_platform_helper/utils/versioning.py,sha256=rLCofLHPXoyc3v9ArDKcjW902p-UX6GCn8n7cjg5I-U,10918
96
+ dbt_platform_helper/utils/platform_config.py,sha256=hAQ7bX-Jqu4L9zPYpBq3EK73LRhOK5-fEP2r3MbT_iQ,475
97
+ dbt_platform_helper/utils/template.py,sha256=g-Db-0I6a6diOHkgK1nYA0IxJSO4TRrjqOvlyeOR32o,950
98
+ dbt_platform_helper/utils/validation.py,sha256=lmWVqRweswj-h7TPYP8lvluq8Qeu0htyKFbz2WUkPxI,1185
99
+ dbt_platform_helper/utils/versioning.py,sha256=XBZcyj8fW3xU6fzLTe1fMj2d3hKdQi8jUc-ZyPKJtwk,11428
88
100
  platform_helper.py,sha256=bly3JkwbfwnWTZSZziu40dbgzQItsK-DIMMvL6ArFDY,1893
89
- dbt_platform_helper-12.4.1.dist-info/LICENSE,sha256=dP79lN73--7LMApnankTGLqDbImXg8iYFqWgnExGkGk,1090
90
- dbt_platform_helper-12.4.1.dist-info/METADATA,sha256=MPP-qrAofuCbLXhkXtXTsiy9vgfMZGPTZaVJiksBRkI,3212
91
- dbt_platform_helper-12.4.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
92
- dbt_platform_helper-12.4.1.dist-info/entry_points.txt,sha256=QhbY8F434A-onsg0-FsdMd2U6HKh6Q7yCFFZrGUh5-M,67
93
- dbt_platform_helper-12.4.1.dist-info/RECORD,,
101
+ dbt_platform_helper-12.5.1.dist-info/LICENSE,sha256=dP79lN73--7LMApnankTGLqDbImXg8iYFqWgnExGkGk,1090
102
+ dbt_platform_helper-12.5.1.dist-info/METADATA,sha256=2b2IPTvC5b6F4jnyZjX_zuY7Wc2CzEeSACAtJN3QB3c,3212
103
+ dbt_platform_helper-12.5.1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
104
+ dbt_platform_helper-12.5.1.dist-info/entry_points.txt,sha256=QhbY8F434A-onsg0-FsdMd2U6HKh6Q7yCFFZrGUh5-M,67
105
+ dbt_platform_helper-12.5.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 2.0.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any