snowflake-cli-labs 2.7.0rc4__py3-none-any.whl → 2.8.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 (33) hide show
  1. snowflake/cli/__about__.py +1 -1
  2. snowflake/cli/api/project/definition.py +3 -36
  3. snowflake/cli/api/project/errors.py +16 -1
  4. snowflake/cli/api/project/schemas/entities/application_entity.py +5 -11
  5. snowflake/cli/api/project/schemas/entities/application_package_entity.py +5 -2
  6. snowflake/cli/api/project/schemas/entities/common.py +15 -22
  7. snowflake/cli/api/project/schemas/native_app/application.py +10 -2
  8. snowflake/cli/api/project/schemas/native_app/native_app.py +13 -2
  9. snowflake/cli/api/project/schemas/native_app/package.py +24 -1
  10. snowflake/cli/api/project/schemas/project_definition.py +23 -40
  11. snowflake/cli/api/project/schemas/snowpark/callable.py +1 -3
  12. snowflake/cli/api/project/schemas/updatable_model.py +148 -5
  13. snowflake/cli/api/project/util.py +55 -7
  14. snowflake/cli/api/rendering/jinja.py +1 -0
  15. snowflake/cli/api/rendering/project_templates.py +8 -7
  16. snowflake/cli/api/rendering/sql_templates.py +8 -4
  17. snowflake/cli/api/utils/definition_rendering.py +50 -11
  18. snowflake/cli/api/utils/models.py +10 -7
  19. snowflake/cli/api/utils/templating_functions.py +144 -0
  20. snowflake/cli/app/build_and_push.sh +8 -0
  21. snowflake/cli/app/snow_connector.py +14 -10
  22. snowflake/cli/plugins/init/commands.py +13 -7
  23. snowflake/cli/plugins/nativeapp/manager.py +93 -10
  24. snowflake/cli/plugins/nativeapp/project_model.py +13 -3
  25. snowflake/cli/plugins/nativeapp/run_processor.py +22 -51
  26. snowflake/cli/plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py +7 -18
  27. snowflake/cli/plugins/nativeapp/version/version_processor.py +4 -0
  28. snowflake/cli/plugins/snowpark/commands.py +6 -3
  29. {snowflake_cli_labs-2.7.0rc4.dist-info → snowflake_cli_labs-2.8.0.dist-info}/METADATA +1 -1
  30. {snowflake_cli_labs-2.7.0rc4.dist-info → snowflake_cli_labs-2.8.0.dist-info}/RECORD +33 -31
  31. {snowflake_cli_labs-2.7.0rc4.dist-info → snowflake_cli_labs-2.8.0.dist-info}/WHEEL +0 -0
  32. {snowflake_cli_labs-2.7.0rc4.dist-info → snowflake_cli_labs-2.8.0.dist-info}/entry_points.txt +0 -0
  33. {snowflake_cli_labs-2.7.0rc4.dist-info → snowflake_cli_labs-2.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -25,6 +25,7 @@ from typing import Any, List, NoReturn, Optional, TypedDict
25
25
 
26
26
  import jinja2
27
27
  from click import ClickException
28
+ from snowflake.cli.api.cli_global_context import cli_context
28
29
  from snowflake.cli.api.console import cli_console as cc
29
30
  from snowflake.cli.api.errno import (
30
31
  DOES_NOT_EXIST_OR_CANNOT_BE_PERFORMED,
@@ -33,7 +34,7 @@ from snowflake.cli.api.errno import (
33
34
  )
34
35
  from snowflake.cli.api.exceptions import SnowflakeSQLExecutionError
35
36
  from snowflake.cli.api.project.schemas.native_app.application import (
36
- ApplicationPostDeployHook,
37
+ PostDeployHook,
37
38
  )
38
39
  from snowflake.cli.api.project.schemas.native_app.native_app import NativeApp
39
40
  from snowflake.cli.api.project.schemas.native_app.path_mapping import PathMapping
@@ -41,6 +42,10 @@ from snowflake.cli.api.project.util import (
41
42
  identifier_for_url,
42
43
  unquote_identifier,
43
44
  )
45
+ from snowflake.cli.api.rendering.sql_templates import (
46
+ get_sql_cli_jinja_env,
47
+ )
48
+ from snowflake.cli.api.secure_path import UNLIMITED, SecurePath
44
49
  from snowflake.cli.api.sql_execution import SqlExecutionMixin
45
50
  from snowflake.cli.plugins.connection.util import make_snowsight_url
46
51
  from snowflake.cli.plugins.nativeapp.artifacts import (
@@ -279,9 +284,13 @@ class NativeAppManager(SqlExecutionMixin):
279
284
  return self.na_project.app_role
280
285
 
281
286
  @property
282
- def app_post_deploy_hooks(self) -> Optional[List[ApplicationPostDeployHook]]:
287
+ def app_post_deploy_hooks(self) -> Optional[List[PostDeployHook]]:
283
288
  return self.na_project.app_post_deploy_hooks
284
289
 
290
+ @property
291
+ def package_post_deploy_hooks(self) -> Optional[List[PostDeployHook]]:
292
+ return self.na_project.package_post_deploy_hooks
293
+
285
294
  @property
286
295
  def debug_mode(self) -> bool:
287
296
  return self.na_project.debug_mode
@@ -569,7 +578,10 @@ class NativeAppManager(SqlExecutionMixin):
569
578
  )
570
579
 
571
580
  def _expand_script_templates(
572
- self, env: jinja2.Environment, jinja_context: dict[str, Any], scripts: List[str]
581
+ self,
582
+ env: jinja2.Environment,
583
+ jinja_context: dict[str, Any],
584
+ scripts: List[str],
573
585
  ) -> List[str]:
574
586
  """
575
587
  Input:
@@ -581,20 +593,22 @@ class NativeAppManager(SqlExecutionMixin):
581
593
  Size of the return list is the same as the size of the input scripts list.
582
594
  """
583
595
  scripts_contents = []
584
- for relpath in scripts:
596
+ for script in scripts:
597
+ full_path = SecurePath(self.project_root) / script
585
598
  try:
586
- template = env.get_template(relpath)
599
+ template_content = full_path.read_text(file_size_limit_mb=UNLIMITED)
600
+ template = env.from_string(template_content)
587
601
  result = template.render(**jinja_context)
588
602
  scripts_contents.append(result)
589
603
 
590
- except jinja2.TemplateNotFound as e:
591
- raise MissingScriptError(e.name) from e
604
+ except FileNotFoundError as e:
605
+ raise MissingScriptError(script) from e
592
606
 
593
607
  except jinja2.TemplateSyntaxError as e:
594
- raise InvalidScriptError(e.name, e, e.lineno) from e
608
+ raise InvalidScriptError(script, e, e.lineno) from e
595
609
 
596
610
  except jinja2.UndefinedError as e:
597
- raise InvalidScriptError(relpath, e) from e
611
+ raise InvalidScriptError(script, e) from e
598
612
 
599
613
  return scripts_contents
600
614
 
@@ -603,8 +617,14 @@ class NativeAppManager(SqlExecutionMixin):
603
617
  Assuming the application package exists and we are using the correct role,
604
618
  applies all package scripts in-order to the application package.
605
619
  """
620
+
621
+ if self.package_scripts:
622
+ cc.warning(
623
+ "WARNING: native_app.package.scripts is deprecated. Please migrate to using native_app.package.post_deploy."
624
+ )
625
+
606
626
  env = jinja2.Environment(
607
- loader=jinja2.loaders.FileSystemLoader(self.project_root),
627
+ loader=jinja2.BaseLoader(),
608
628
  keep_trailing_newline=True,
609
629
  undefined=jinja2.StrictUndefined,
610
630
  )
@@ -624,6 +644,65 @@ class NativeAppManager(SqlExecutionMixin):
624
644
  err, role=self.package_role, warehouse=self.package_warehouse
625
645
  )
626
646
 
647
+ def _execute_sql_script(
648
+ self, script_content: str, database_name: Optional[str] = None
649
+ ) -> None:
650
+ """
651
+ Executing the provided SQL script content.
652
+ This assumes that a relevant warehouse is already active.
653
+ If database_name is passed in, it will be used first.
654
+ """
655
+ try:
656
+ if database_name is not None:
657
+ self._execute_query(f"use database {database_name}")
658
+
659
+ self._execute_queries(script_content)
660
+ except ProgrammingError as err:
661
+ generic_sql_error_handler(err)
662
+
663
+ def _execute_post_deploy_hooks(
664
+ self,
665
+ post_deploy_hooks: Optional[List[PostDeployHook]],
666
+ deployed_object_type: str,
667
+ database_name: str,
668
+ ) -> None:
669
+ """
670
+ Executes post-deploy hooks for the given object type.
671
+ While executing SQL post deploy hooks, it first switches to the database provided in the input.
672
+ All post deploy scripts templates will first be expanded using the global template context.
673
+ """
674
+ if not post_deploy_hooks:
675
+ return
676
+
677
+ with cc.phase(f"Executing {deployed_object_type} post_deploy actions"):
678
+ sql_scripts_paths = []
679
+ for hook in post_deploy_hooks:
680
+ if hook.sql_script:
681
+ sql_scripts_paths.append(hook.sql_script)
682
+ else:
683
+ raise ValueError(
684
+ f"Unsupported {deployed_object_type} post_deploy hook type: {hook}"
685
+ )
686
+
687
+ env = get_sql_cli_jinja_env()
688
+ scripts_content_list = self._expand_script_templates(
689
+ env, cli_context.template_context, sql_scripts_paths
690
+ )
691
+
692
+ for index, sql_script_path in enumerate(sql_scripts_paths):
693
+ cc.step(f"Executing SQL script: {sql_script_path}")
694
+ self._execute_sql_script(scripts_content_list[index], database_name)
695
+
696
+ def execute_package_post_deploy_hooks(self) -> None:
697
+ self._execute_post_deploy_hooks(
698
+ self.package_post_deploy_hooks, "application package", self.package_name
699
+ )
700
+
701
+ def execute_app_post_deploy_hooks(self) -> None:
702
+ self._execute_post_deploy_hooks(
703
+ self.app_post_deploy_hooks, "application", self.app_name
704
+ )
705
+
627
706
  def deploy(
628
707
  self,
629
708
  bundle_map: BundleMap,
@@ -655,6 +734,10 @@ class NativeAppManager(SqlExecutionMixin):
655
734
  print_diff=print_diff,
656
735
  )
657
736
 
737
+ # 4. Execute post-deploy hooks
738
+ with self.use_package_warehouse():
739
+ self.execute_package_post_deploy_hooks()
740
+
658
741
  if validate:
659
742
  self.validate(use_scratch_stage=False)
660
743
 
@@ -25,7 +25,7 @@ from snowflake.cli.api.project.definition import (
25
25
  default_role,
26
26
  )
27
27
  from snowflake.cli.api.project.schemas.native_app.application import (
28
- ApplicationPostDeployHook,
28
+ PostDeployHook,
29
29
  )
30
30
  from snowflake.cli.api.project.schemas.native_app.native_app import NativeApp
31
31
  from snowflake.cli.api.project.schemas.native_app.path_mapping import PathMapping
@@ -162,15 +162,25 @@ class NativeAppProjectModel:
162
162
  return self._default_role
163
163
 
164
164
  @cached_property
165
- def app_post_deploy_hooks(self) -> Optional[List[ApplicationPostDeployHook]]:
165
+ def app_post_deploy_hooks(self) -> Optional[List[PostDeployHook]]:
166
166
  """
167
- List of application post deploy hooks.
167
+ List of application instance post deploy hooks.
168
168
  """
169
169
  if self.definition.application and self.definition.application.post_deploy:
170
170
  return self.definition.application.post_deploy
171
171
  else:
172
172
  return None
173
173
 
174
+ @cached_property
175
+ def package_post_deploy_hooks(self) -> Optional[List[PostDeployHook]]:
176
+ """
177
+ List of application package post deploy hooks.
178
+ """
179
+ if self.definition.package and self.definition.package.post_deploy:
180
+ return self.definition.package.post_deploy
181
+ else:
182
+ return None
183
+
174
184
  @cached_property
175
185
  def _default_role(self) -> str:
176
186
  role = default_role()
@@ -18,10 +18,8 @@ from pathlib import Path
18
18
  from textwrap import dedent
19
19
  from typing import Optional
20
20
 
21
- import jinja2
22
21
  import typer
23
22
  from click import UsageError
24
- from snowflake.cli.api.cli_global_context import cli_context
25
23
  from snowflake.cli.api.console import cli_console as cc
26
24
  from snowflake.cli.api.errno import (
27
25
  APPLICATION_NO_LONGER_AVAILABLE,
@@ -37,9 +35,6 @@ from snowflake.cli.api.project.util import (
37
35
  identifier_to_show_like_pattern,
38
36
  unquote_identifier,
39
37
  )
40
- from snowflake.cli.api.rendering.sql_templates import (
41
- get_sql_cli_jinja_env,
42
- )
43
38
  from snowflake.cli.api.utils.cursor import find_all_rows
44
39
  from snowflake.cli.plugins.nativeapp.artifacts import BundleMap
45
40
  from snowflake.cli.plugins.nativeapp.constants import (
@@ -77,6 +72,20 @@ UPGRADE_RESTRICTION_CODES = {
77
72
  }
78
73
 
79
74
 
75
+ def print_messages(create_or_upgrade_cursor: Optional[SnowflakeCursor]):
76
+ """
77
+ Shows messages in the console returned by the CREATE or UPGRADE
78
+ APPLICATION command.
79
+ """
80
+ if not create_or_upgrade_cursor:
81
+ return
82
+
83
+ messages = [row[0] for row in create_or_upgrade_cursor.fetchall()]
84
+ for message in messages:
85
+ cc.warning(message)
86
+ cc.message("")
87
+
88
+
80
89
  class SameAccountInstallMethod:
81
90
  _requires_created_by_cli: bool
82
91
  _from_release_directive: bool
@@ -139,46 +148,6 @@ class NativeAppRunProcessor(NativeAppManager, NativeAppCommandProcessor):
139
148
  def __init__(self, project_definition: NativeApp, project_root: Path):
140
149
  super().__init__(project_definition, project_root)
141
150
 
142
- def _execute_sql_script(
143
- self, script_content: str, database_name: Optional[str] = None
144
- ):
145
- """
146
- Executing the provided SQL script content.
147
- This assumes that a relevant warehouse is already active.
148
- If database_name is passed in, it will be used first.
149
- """
150
- try:
151
- if database_name is not None:
152
- self._execute_query(f"use database {database_name}")
153
-
154
- self._execute_queries(script_content)
155
- except ProgrammingError as err:
156
- generic_sql_error_handler(err)
157
-
158
- def _execute_post_deploy_hooks(self):
159
- post_deploy_script_hooks = self.app_post_deploy_hooks
160
- if post_deploy_script_hooks:
161
- with cc.phase("Executing application post-deploy actions"):
162
- sql_scripts_paths = []
163
- for hook in post_deploy_script_hooks:
164
- if hook.sql_script:
165
- sql_scripts_paths.append(hook.sql_script)
166
- else:
167
- raise ValueError(
168
- f"Unsupported application post-deploy hook type: {hook}"
169
- )
170
-
171
- env = get_sql_cli_jinja_env(
172
- loader=jinja2.loaders.FileSystemLoader(self.project_root)
173
- )
174
- scripts_content_list = self._expand_script_templates(
175
- env, cli_context.template_context, sql_scripts_paths
176
- )
177
-
178
- for index, sql_script_path in enumerate(sql_scripts_paths):
179
- cc.step(f"Executing SQL script: {sql_script_path}")
180
- self._execute_sql_script(scripts_content_list[index], self.app_name)
181
-
182
151
  def get_all_existing_versions(self) -> SnowflakeCursor:
183
152
  """
184
153
  Get all existing versions, if defined, for an application package.
@@ -297,9 +266,10 @@ class NativeAppRunProcessor(NativeAppManager, NativeAppCommandProcessor):
297
266
  f"Upgrading existing application object {self.app_name}."
298
267
  )
299
268
  using_clause = install_method.using_clause(self._na_project)
300
- self._execute_query(
301
- f"alter application {self.app_name} upgrade {using_clause}"
269
+ upgrade_cursor = self._execute_query(
270
+ f"alter application {self.app_name} upgrade {using_clause}",
302
271
  )
272
+ print_messages(upgrade_cursor)
303
273
 
304
274
  if install_method.is_dev_mode:
305
275
  # if debug_mode is present (controlled), ensure it is up-to-date
@@ -309,7 +279,7 @@ class NativeAppRunProcessor(NativeAppManager, NativeAppCommandProcessor):
309
279
  )
310
280
 
311
281
  # hooks always executed after a create or upgrade
312
- self._execute_post_deploy_hooks()
282
+ self.execute_app_post_deploy_hooks()
313
283
  return
314
284
 
315
285
  except ProgrammingError as err:
@@ -345,18 +315,19 @@ class NativeAppRunProcessor(NativeAppManager, NativeAppCommandProcessor):
345
315
  debug_mode_clause = f"debug_mode = {initial_debug_mode}"
346
316
 
347
317
  using_clause = install_method.using_clause(self._na_project)
348
- self._execute_query(
318
+ create_cursor = self._execute_query(
349
319
  dedent(
350
320
  f"""\
351
321
  create application {self.app_name}
352
322
  from application package {self.package_name} {using_clause} {debug_mode_clause}
353
323
  comment = {SPECIAL_COMMENT}
354
324
  """
355
- )
325
+ ),
356
326
  )
327
+ print_messages(create_cursor)
357
328
 
358
329
  # hooks always executed after a create or upgrade
359
- self._execute_post_deploy_hooks()
330
+ self.execute_app_post_deploy_hooks()
360
331
 
361
332
  except ProgrammingError as err:
362
333
  generic_sql_error_handler(err)
@@ -16,7 +16,7 @@ from __future__ import annotations
16
16
 
17
17
  from functools import wraps
18
18
  from pathlib import Path
19
- from typing import Any, Dict, List, Optional, Union
19
+ from typing import Any, Dict, Optional, Union
20
20
 
21
21
  from click import ClickException
22
22
  from snowflake.cli.api.cli_global_context import cli_context, cli_context_manager
@@ -26,15 +26,12 @@ from snowflake.cli.api.project.schemas.entities.application_entity import (
26
26
  from snowflake.cli.api.project.schemas.entities.application_package_entity import (
27
27
  ApplicationPackageEntity,
28
28
  )
29
- from snowflake.cli.api.project.schemas.native_app.application import (
30
- ApplicationPostDeployHook,
31
- SqlScriptHookType,
32
- )
33
29
  from snowflake.cli.api.project.schemas.native_app.path_mapping import PathMapping
34
30
  from snowflake.cli.api.project.schemas.project_definition import (
35
31
  DefinitionV11,
36
32
  DefinitionV20,
37
33
  )
34
+ from snowflake.cli.api.utils.definition_rendering import render_definition_template
38
35
 
39
36
 
40
37
  def _convert_v2_artifact_to_v1_dict(
@@ -49,14 +46,6 @@ def _convert_v2_artifact_to_v1_dict(
49
46
  return str(v2_artifact)
50
47
 
51
48
 
52
- def _convert_v2_post_deploy_hook_to_v1_scripts(
53
- v2_post_deploy_hook: ApplicationPostDeployHook,
54
- ) -> List[str]:
55
- if isinstance(v2_post_deploy_hook, SqlScriptHookType):
56
- return v2_post_deploy_hook.sql_script
57
- raise ValueError(f"Unsupported post deploy hook type: {v2_post_deploy_hook}")
58
-
59
-
60
49
  def _pdf_v2_to_v1(v2_definition: DefinitionV20) -> DefinitionV11:
61
50
  pdfv1: Dict[str, Any] = {"definition_version": "1.1", "native_app": {}}
62
51
 
@@ -102,10 +91,9 @@ def _pdf_v2_to_v1(v2_definition: DefinitionV20) -> DefinitionV11:
102
91
  "distribution"
103
92
  ] = app_package_definition.distribution
104
93
  if app_package_definition.meta and app_package_definition.meta.post_deploy:
105
- pdfv1["native_app"]["package"]["scripts"] = [
106
- _convert_v2_post_deploy_hook_to_v1_scripts(s)
107
- for s in app_package_definition.meta.post_deploy
108
- ]
94
+ pdfv1["native_app"]["package"][
95
+ "post_deploy"
96
+ ] = app_package_definition.meta.post_deploy
109
97
 
110
98
  # Application
111
99
  if app_definition:
@@ -118,8 +106,9 @@ def _pdf_v2_to_v1(v2_definition: DefinitionV20) -> DefinitionV11:
118
106
  "post_deploy"
119
107
  ] = app_definition.meta.post_deploy
120
108
 
109
+ result = render_definition_template(pdfv1, {})
121
110
  # Override the definition object in global context
122
- return DefinitionV11(**pdfv1)
111
+ return result.project_definition
123
112
 
124
113
 
125
114
  def nativeapp_definition_v2_to_v1(func):
@@ -215,6 +215,8 @@ class NativeAppVersionCreateProcessor(NativeAppRunProcessor):
215
215
  is_interactive=is_interactive,
216
216
  )
217
217
 
218
+ # TODO: consider using self.deploy() instead
219
+
218
220
  try:
219
221
  self.create_app_package()
220
222
  except ApplicationPackageAlreadyExistsError as e:
@@ -234,6 +236,8 @@ class NativeAppVersionCreateProcessor(NativeAppRunProcessor):
234
236
  recursive=True,
235
237
  stage_fqn=self.stage_fqn,
236
238
  )
239
+ with self.use_package_warehouse():
240
+ self.execute_package_post_deploy_hooks()
237
241
 
238
242
  # Warn if the version exists in a release directive(s)
239
243
  existing_release_directives = (
@@ -522,7 +522,7 @@ def list_(
522
522
  **options,
523
523
  ):
524
524
  """Lists all available procedures or functions."""
525
- object_list(object_type=object_type.value, like=like, scope=scope, **options)
525
+ return object_list(object_type=object_type.value, like=like, scope=scope, **options)
526
526
 
527
527
 
528
528
  @app.command("drop", requires_connection=True)
@@ -532,7 +532,7 @@ def drop(
532
532
  **options,
533
533
  ):
534
534
  """Drop procedure or function."""
535
- object_drop(object_type=object_type.value, object_name=identifier, **options)
535
+ return object_drop(object_type=object_type.value, object_name=identifier, **options)
536
536
 
537
537
 
538
538
  @app.command("describe", requires_connection=True)
@@ -542,4 +542,7 @@ def describe(
542
542
  **options,
543
543
  ):
544
544
  """Provides description of a procedure or function."""
545
- object_describe(object_type=object_type.value, object_name=identifier, **options)
545
+
546
+ return object_describe(
547
+ object_type=object_type.value, object_name=identifier, **options
548
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: snowflake-cli-labs
3
- Version: 2.7.0rc4
3
+ Version: 2.8.0
4
4
  Summary: Snowflake CLI
5
5
  Project-URL: Source code, https://github.com/snowflakedb/snowflake-cli
6
6
  Project-URL: Bug Tracker, https://github.com/snowflakedb/snowflake-cli/issues
@@ -1,4 +1,4 @@
1
- snowflake/cli/__about__.py,sha256=57l-U9OA6E64f2S2YFFAENOMxzkx4jUqFHQTGLxKp1U,636
1
+ snowflake/cli/__about__.py,sha256=wF0IHRBsGzqBabOU-Z-s5cuCYzRhQyg5D4ap4tza9kU,633
2
2
  snowflake/cli/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
3
3
  snowflake/cli/api/__init__.py,sha256=kD6lYv5et7QJvW7vzvLN9p2ibfD7pjh9KRWsp2QoYqo,1330
4
4
  snowflake/cli/api/cli_global_context.py,sha256=gAs7snaqRi5ESaxU8HcC_QBR2q9y1PMdhi7kQCGkICs,11714
@@ -34,54 +34,56 @@ snowflake/cli/api/plugins/plugin_config.py,sha256=oJB3HvVqw7R-MDh5jGJtL84ABOATsF
34
34
  snowflake/cli/api/plugins/command/__init__.py,sha256=qCzBzpq8__2OUN0PcruIKgQXI2V9rzk4UIGVLFv7yk4,2134
35
35
  snowflake/cli/api/plugins/command/plugin_hook_specs.py,sha256=AHJGk6j3NRzalIe4llM3Mt0-opHui1sLdbILoEMhpuA,714
36
36
  snowflake/cli/api/project/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
37
- snowflake/cli/api/project/definition.py,sha256=zMWLQ0D_xlCDsPWirxhUtYXFXALvbZlQnwSQ72BhWPo,4151
37
+ snowflake/cli/api/project/definition.py,sha256=12R3Z59bp0y0E1eQC2E1VFxRx3HwsFzk4p9nlkW0csk,2987
38
38
  snowflake/cli/api/project/definition_manager.py,sha256=h1ympKIZ9TB5a-WgEro4gm8BjqpHxAeCwXVppV26x0Y,4645
39
- snowflake/cli/api/project/errors.py,sha256=LJY_XkL6B6agD4jAxXxFbEe80j6Pak5SxSP67Ls4Fkc,1674
39
+ snowflake/cli/api/project/errors.py,sha256=9TGN2ezqSCHmSGy1U7AByaJm5Xf47zN-7N3i6R6fyBg,2136
40
40
  snowflake/cli/api/project/project_verification.py,sha256=l3K6SMDJxpys9xhnwxBhd6BDyQVqqUItsf4FKAp8NtA,951
41
- snowflake/cli/api/project/util.py,sha256=yf-6vws821PQkoWKFsqnPcSM4-Qed-BR_r0J_uVYtB4,7156
41
+ snowflake/cli/api/project/util.py,sha256=wung3PYl3_32RO-R2Qu7SGFnYWpIxqE6bltJFyoWnfc,8678
42
42
  snowflake/cli/api/project/schemas/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
43
43
  snowflake/cli/api/project/schemas/identifier_model.py,sha256=mwfogq6iLOwRhfwKOWtwvJIDnAP2JjZD6tT4Dgpxwto,1859
44
- snowflake/cli/api/project/schemas/project_definition.py,sha256=ErxWCTM44I5e-cm_Zlg5S281BLpbOdOdRzX4uk0uGFE,8053
44
+ snowflake/cli/api/project/schemas/project_definition.py,sha256=cZ4Glr5RvIo-j4ibx9yp1ETJCkJA0FmOFS2g7IFaOs4,7356
45
45
  snowflake/cli/api/project/schemas/template.py,sha256=w8cJt6VcMmMJgKO6rv31cTBDQZuSsaMVOOfeBZMF56k,3019
46
- snowflake/cli/api/project/schemas/updatable_model.py,sha256=uw59nbP6ejqfE38MjPmqmCFZwj4Hdpgis4TX4o7ZDUo,1967
47
- snowflake/cli/api/project/schemas/entities/application_entity.py,sha256=6sJd0bWb6CNXl4Rc0BOzI2TMpvqJY5IcEZqUEOQm8lw,1693
48
- snowflake/cli/api/project/schemas/entities/application_package_entity.py,sha256=1FrcADi7ohb7Lt1xwe_DeG14TN87UbS4bAEhVnVMpZk,2621
49
- snowflake/cli/api/project/schemas/entities/common.py,sha256=X1KscucJV_nkVbefLPGqnFtK_3pjWJ5nWmAl2A7dVPo,2602
46
+ snowflake/cli/api/project/schemas/updatable_model.py,sha256=6Eos3XJX0vUha0e2JM_RSPHBzAUMOg19TpGf6dy-ktc,7262
47
+ snowflake/cli/api/project/schemas/entities/application_entity.py,sha256=xyGHRpq8qmmJr2CO4dVI2V_QbMvHRHzbAL6NSQlp4so,1526
48
+ snowflake/cli/api/project/schemas/entities/application_package_entity.py,sha256=U4HJ5rSLbb13K3g4bRJpSK1DBLYFEzW-X_AE-TTRtB4,2677
49
+ snowflake/cli/api/project/schemas/entities/common.py,sha256=p0J7UcP8-3VV8rUn_0vXj_Kow3RUA7sTfgYcbXBrQwA,2317
50
50
  snowflake/cli/api/project/schemas/entities/entities.py,sha256=kZ7PwcQXuFzLsV3bh8IYy1LEMbSb9o3a9401wrCs6XE,1028
51
51
  snowflake/cli/api/project/schemas/native_app/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
52
- snowflake/cli/api/project/schemas/native_app/application.py,sha256=mhh5PLyDVdRQaWksF9_dWhp9N9JRFE9d2fJe0bw_7Uk,1919
53
- snowflake/cli/api/project/schemas/native_app/native_app.py,sha256=8qNzDusLLLgMszLUPdl84vhLZdNr5tRNrVDDrk8VTu4,3258
54
- snowflake/cli/api/project/schemas/native_app/package.py,sha256=aWHj_GlBSGAUhrjKmPQTBksZp3gdLARLK8EbDjIdH78,2006
52
+ snowflake/cli/api/project/schemas/native_app/application.py,sha256=VK8zwIn5rV5-A3N0yEt7QppMDJdihiAYdFn7xBqNw_A,2238
53
+ snowflake/cli/api/project/schemas/native_app/native_app.py,sha256=o88owmn-bO1BLEVhg6fWAdVAXNbedbZ45VtG5ZJ9r14,3597
54
+ snowflake/cli/api/project/schemas/native_app/package.py,sha256=5STLsv_iEavuzHWkDuaCU6e5_IXhWY_Njcg7phUqZXw,3059
55
55
  snowflake/cli/api/project/schemas/native_app/path_mapping.py,sha256=pHtjGsO2Zv_qn9JwrVQX_sB2U0C_Tz6uGWya0xNC6cc,2547
56
56
  snowflake/cli/api/project/schemas/snowpark/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
57
57
  snowflake/cli/api/project/schemas/snowpark/argument.py,sha256=SGJCTr9kIq91G4n3zetI4pkV1cMZRtNMDVMcZDpogHQ,1054
58
- snowflake/cli/api/project/schemas/snowpark/callable.py,sha256=X6xsLXk_L1SG0lWeW8i9ZyzWupudbny5mcUVdq7Xyk4,2771
58
+ snowflake/cli/api/project/schemas/snowpark/callable.py,sha256=cV1M1OI7uZt87dGzZ5XI-o6fJp77xCWIZZNZLcmVLRQ,2762
59
59
  snowflake/cli/api/project/schemas/snowpark/snowpark.py,sha256=C4IuWdiPcTcg7RIx1sQuPKzVoMT9yizxgtcRsHcaHFY,1378
60
60
  snowflake/cli/api/project/schemas/streamlit/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
61
61
  snowflake/cli/api/project/schemas/streamlit/streamlit.py,sha256=VXOYFJPwO8e3NaPBkcWhCaPGof18XH4TYKEMaqu2UYQ,1873
62
62
  snowflake/cli/api/rendering/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
63
- snowflake/cli/api/rendering/jinja.py,sha256=ACHMW_Khzm_ETVOCjBZzcbbrSLv-JFnc4vPGq_PJogg,3509
63
+ snowflake/cli/api/rendering/jinja.py,sha256=dD7XAsufZiUsUMKhBNVK9iaWzkeBJTf2z9oWKUDRuI8,3529
64
64
  snowflake/cli/api/rendering/project_definition_templates.py,sha256=JvuLohNu8wA97th6o8H_qoS9X6qyLbGg0QDnY9Tq68s,1353
65
- snowflake/cli/api/rendering/project_templates.py,sha256=Sozp90KcCmlkWgru0AKjTsiZbFgcDjjLosxsdfkyCto,3480
66
- snowflake/cli/api/rendering/sql_templates.py,sha256=zuPV5Y385VsGacq1jeYOk8-2EbwEHE9S5CBC0yQ2Qbw,1947
65
+ snowflake/cli/api/rendering/project_templates.py,sha256=zRh863Gn2hYli9uUu1eXQ_gZsMDUCCg5N44kcPXcSSg,3474
66
+ snowflake/cli/api/rendering/sql_templates.py,sha256=cEFufR-lF7IoOSmhxbFcpPYVx31dX2ftLTFxhTL6jYY,2068
67
67
  snowflake/cli/api/utils/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
68
68
  snowflake/cli/api/utils/cursor.py,sha256=JlyUG5b4EXii71Dm7qiTdptjwIsOOmEv2QmZA1cY8NQ,1222
69
- snowflake/cli/api/utils/definition_rendering.py,sha256=I7V8A_lUorVp3LNdgr3eq3YEmEaArDDqSsOhFRwvtPs,13048
69
+ snowflake/cli/api/utils/definition_rendering.py,sha256=aUxBtNGJnv79PzfhrV-G8Rmm86OTDSMT-eBjVEstHko,14769
70
70
  snowflake/cli/api/utils/dict_utils.py,sha256=8vb9EyiT8gNHCtPNfE1S-0WcWdP6G_kiwJ-aizu3Pzs,2799
71
71
  snowflake/cli/api/utils/error_handling.py,sha256=etIGdS8kd9APgyeUecnY2XMivDORSRV8q-WuBtpriZY,708
72
72
  snowflake/cli/api/utils/graph.py,sha256=XZgcTySyS1je9ARdPWqJyrfzuqFBNt9SSLnGeE2na8M,3045
73
- snowflake/cli/api/utils/models.py,sha256=ZQGitU3oHSulsP_7VvhbRrFqzo0Dbl1cIPczjy3qzyQ,2038
73
+ snowflake/cli/api/utils/models.py,sha256=KD4Q402_6iNKsV9CTulzuDrlJbEGu8quAlmZNQuieE4,2016
74
74
  snowflake/cli/api/utils/naming_utils.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
75
75
  snowflake/cli/api/utils/path_utils.py,sha256=ru0jgw6Ur5zhqpHhj_eAqcaJdrgEgr3bC7Z02FnQV18,1218
76
+ snowflake/cli/api/utils/templating_functions.py,sha256=DlmpGAEY6OBArtIap6kN1aaILPwx2ynqKflPwjj7BbU,4935
76
77
  snowflake/cli/api/utils/types.py,sha256=fVKuls8axKSsBzPqWwrkwkwoXXmedqxNJKqfXrrGyBM,1190
77
78
  snowflake/cli/app/__init__.py,sha256=CR_uTgoqHnU1XdyRhm5iQsS86yWXGVx5Ht7aGSDNFmc,765
78
79
  snowflake/cli/app/__main__.py,sha256=KrWQBN5trQZUBqC9nQLeQDq134JLkFC0AfmDxRD3U38,833
80
+ snowflake/cli/app/build_and_push.sh,sha256=TmZu-YgjBr_ngna72S1Hs6zYTxMuPNJ-649weouFTW8,561
79
81
  snowflake/cli/app/cli_app.py,sha256=culZ_65q5eFKR35ScLRNh1z-TbPtJ0-CMVjPjd_ChLs,8149
80
82
  snowflake/cli/app/constants.py,sha256=WCqViioXdOt0Cykf-KK42cBLfqHKTfYobMJJ-AC7kSs,698
81
83
  snowflake/cli/app/loggers.py,sha256=anPJsFA4H8qV928LTxU_sQ5Ci8MWphFb14GSSBly-XA,6638
82
84
  snowflake/cli/app/main_typer.py,sha256=4VQqUCxTGHrc21I2nt-Lel6_T_NS8uwkuAntHjrkx3w,2101
83
85
  snowflake/cli/app/printing.py,sha256=0zvgMT1NyofzueO-pGduslx43yzj2hdlGV2BGQZhwo0,5810
84
- snowflake/cli/app/snow_connector.py,sha256=jD1qq2YIdy4jb9TeMDuXqjZqdnyG_zzELi91BJdoXio,8672
86
+ snowflake/cli/app/snow_connector.py,sha256=YSeeuiyUBuh4y9wp3QSsNnyo1r_5x0VyNCOo9Y0CV38,8815
85
87
  snowflake/cli/app/telemetry.py,sha256=KrOWU_sfYccIX9WBxYwb3WQL7jE5lDMoBjELSyLOU1I,6385
86
88
  snowflake/cli/app/api_impl/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
87
89
  snowflake/cli/app/api_impl/plugin/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
@@ -121,7 +123,7 @@ snowflake/cli/plugins/git/commands.py,sha256=3wgM-UVHC5e6bUKCxW7a3pdI0ylYG2xEnV_
121
123
  snowflake/cli/plugins/git/manager.py,sha256=cIPGienI_KgOYiL7uBBmvybR2ymtp4k5UnhWi5wr6UY,3571
122
124
  snowflake/cli/plugins/git/plugin_spec.py,sha256=RgGZ744MYXfBMnR1-f11c9_n5XoH7GaIsPocrazq52A,991
123
125
  snowflake/cli/plugins/init/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
124
- snowflake/cli/plugins/init/commands.py,sha256=wLIuMlHFMBmS3oJWSLxYlMO0Ac1b9dBcZYKbyLLQeGo,8598
126
+ snowflake/cli/plugins/init/commands.py,sha256=5-mCs7iABKyJby1Yfim8ei6z9NzyA5sfu2bySxRXoxo,8863
125
127
  snowflake/cli/plugins/init/plugin_spec.py,sha256=uxglpV4GxY_hysq5fit_XR8JWLGkA8sClEN0bAU5OwU,993
126
128
  snowflake/cli/plugins/nativeapp/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
127
129
  snowflake/cli/plugins/nativeapp/artifacts.py,sha256=otpxa6YFWJs1W1KDzo1agAyvq5YqAR3YoLjJJhm1CLs,30178
@@ -131,11 +133,11 @@ snowflake/cli/plugins/nativeapp/constants.py,sha256=j25fS9dS54GPPp41njUOZTDykhYq
131
133
  snowflake/cli/plugins/nativeapp/exceptions.py,sha256=Wh-qJlAG9UMdWB0lqAVafbBdA_hj_m7UnI4efLjOgUA,4360
132
134
  snowflake/cli/plugins/nativeapp/feature_flags.py,sha256=Y1peJF8ju_lybKjklOvXYsGQMN8VhFoLnoq-Z7oqO-E,829
133
135
  snowflake/cli/plugins/nativeapp/init.py,sha256=BX0rDIJem5bJn0-0s5Ha3BSJIX82ZWJLsDiJvuQSsAA,12124
134
- snowflake/cli/plugins/nativeapp/manager.py,sha256=Kk7HniRtEqC9qediqu39yvgZAJzqOXq52VEVTrLnhX8,27875
136
+ snowflake/cli/plugins/nativeapp/manager.py,sha256=Xel0eAhs65FQBGWT-3eKI5Zi33qioXoAWKX3tu34j9s,31023
135
137
  snowflake/cli/plugins/nativeapp/plugin_spec.py,sha256=CWpkkQlCjY7kO-JLFdAx6UtUo4FZ2soJXcxjUAnUflM,997
136
138
  snowflake/cli/plugins/nativeapp/policy.py,sha256=yND6QTJUtbuREdT9I2fzFI4-XFd7zbNgWKlvoFICwko,1605
137
- snowflake/cli/plugins/nativeapp/project_model.py,sha256=0gz3srp1ynPaMepcponplROkmPo7puiY0hPpom81vXI,6442
138
- snowflake/cli/plugins/nativeapp/run_processor.py,sha256=fZ94BcqOsdgYQ0m1iX0x_IR-J1B-7EQn1TU1xOd-9TM,17379
139
+ snowflake/cli/plugins/nativeapp/project_model.py,sha256=uLVLEbefN_vV0TbsYJWTOQD-YO2_-scJzxS69aE1RHo,6774
140
+ snowflake/cli/plugins/nativeapp/run_processor.py,sha256=IcKySZVaUhMB0A3EYVGuhy9SkWJlK0DUMNHP9jmiG0s,16047
139
141
  snowflake/cli/plugins/nativeapp/teardown_processor.py,sha256=v8Fx4omsCV-OgQWawrq8eYUcOCjaFfv6L_-JoDwcXTg,13053
140
142
  snowflake/cli/plugins/nativeapp/utils.py,sha256=dR7xjjHM8LlyE-PVKhQfAi6OKPd1TA9XQxN5EsBamLI,2867
141
143
  snowflake/cli/plugins/nativeapp/codegen/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
@@ -148,10 +150,10 @@ snowflake/cli/plugins/nativeapp/codegen/snowpark/callback_source.py.jinja,sha256
148
150
  snowflake/cli/plugins/nativeapp/codegen/snowpark/extension_function_utils.py,sha256=E2bQFVmiC7MdRCWBtWo3BjzcBUr-9BBzwKduWmZdXdw,7626
149
151
  snowflake/cli/plugins/nativeapp/codegen/snowpark/models.py,sha256=xPC7Igbyo_A6Su4xWeXNYV421uefMqHpQbwFGG8AprI,2225
150
152
  snowflake/cli/plugins/nativeapp/codegen/snowpark/python_processor.py,sha256=71LV70GaTAoHPQ6k-0B8tFBjR1riCpZC51B8U6vSDsA,20037
151
- snowflake/cli/plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py,sha256=ECxshGMoyImN4Mhdod1Y1SrWoPwBkNWr2d6FYIh0eXA,5900
153
+ snowflake/cli/plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py,sha256=M5yTleZvzlzYCv3JLLiwMrAwrOJVdCwKyfGv7hpm9w4,5535
152
154
  snowflake/cli/plugins/nativeapp/version/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
153
155
  snowflake/cli/plugins/nativeapp/version/commands.py,sha256=aQ9nxTEtFktyayq2ybNNE5-z87_otZzIiIcY2mSqnfo,5836
154
- snowflake/cli/plugins/nativeapp/version/version_processor.py,sha256=DuMvI5V9HkXYHF6ZtQKFyTfabjYmOiywcupPE_TFsmo,14383
156
+ snowflake/cli/plugins/nativeapp/version/version_processor.py,sha256=og1x1akTl_7rsL4B99vsKa_wiUURV48r1carDueDheY,14541
155
157
  snowflake/cli/plugins/notebook/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
156
158
  snowflake/cli/plugins/notebook/commands.py,sha256=uV9p3Dy_09eYKJ2KV6CD9cQ0-8zIvE01WTHYfQJh0nk,2673
157
159
  snowflake/cli/plugins/notebook/exceptions.py,sha256=YUS9RRcsEOgQEbikUFpbm8Qo5MYJEB-d-TGZYpMyfwo,782
@@ -168,7 +170,7 @@ snowflake/cli/plugins/object_stage_deprecated/__init__.py,sha256=RLQpA97914b74tT
168
170
  snowflake/cli/plugins/object_stage_deprecated/commands.py,sha256=_lsUcmu1mYj9HurpLLBpoJspwiEtWbnglXPPTCqGcVk,3835
169
171
  snowflake/cli/plugins/object_stage_deprecated/plugin_spec.py,sha256=pYE_GOQjzMStVPW0icAglc4CyvaWnPM2i1_DpNZ5t9M,1025
170
172
  snowflake/cli/plugins/snowpark/__init__.py,sha256=uGA_QRGW3iGwaegpFsLgOhup0zBliBSXh9ou8J439uU,578
171
- snowflake/cli/plugins/snowpark/commands.py,sha256=_jUkvM3wQs9arWG440cw0eUPOV9639cjjgaJ9CIYdo0,19500
173
+ snowflake/cli/plugins/snowpark/commands.py,sha256=GgggLHN4bQ-vlq9tveNJxJlVq6hyKZpm7_kcxWJFWOg,19536
172
174
  snowflake/cli/plugins/snowpark/common.py,sha256=ROxNEgoQ2sQTQOo1MJNLZQz2DhN4Y1kISq-CvQLsSvk,10214
173
175
  snowflake/cli/plugins/snowpark/manager.py,sha256=JIqZlr63iSKel4iePSuP5IVq2Izj-hlu9bT-nNkyIx4,3128
174
176
  snowflake/cli/plugins/snowpark/models.py,sha256=snUEBi4pqw0pgUVPqy8wy9uDdyeshPqaKVe6LJBDZC8,4849
@@ -231,8 +233,8 @@ snowflake/cli/templates/default_streamlit/snowflake.yml,sha256=yWFU-vqJ7Z17K3loU
231
233
  snowflake/cli/templates/default_streamlit/streamlit_app.py,sha256=hfYtJl4Rtm0n3J2gNeDwMT-leeGL5R-qJKwyJ0kUxAI,109
232
234
  snowflake/cli/templates/default_streamlit/common/hello.py,sha256=3Zt2LthAYDs6UGqOvRNCzYH-HISLHxdx_uAVhcCOtJM,37
233
235
  snowflake/cli/templates/default_streamlit/pages/my_page.py,sha256=f__P9j5XCo8J1c6du25wSvknIKvhTFWrXF_298YiQbw,49
234
- snowflake_cli_labs-2.7.0rc4.dist-info/METADATA,sha256=GNEknVbYBh4FbJJZV6jig2A5yYfGKZ37oH_m8TbGNKA,17804
235
- snowflake_cli_labs-2.7.0rc4.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
236
- snowflake_cli_labs-2.7.0rc4.dist-info/entry_points.txt,sha256=_qdnT44fYFbH78kb6Em5jr2_26amIg3UIAvSdmqT6TY,57
237
- snowflake_cli_labs-2.7.0rc4.dist-info/licenses/LICENSE,sha256=mJMA3Uz2AbjU_kVggo1CAx01XhBsI7BSi2H7ggUg_-c,11344
238
- snowflake_cli_labs-2.7.0rc4.dist-info/RECORD,,
236
+ snowflake_cli_labs-2.8.0.dist-info/METADATA,sha256=1SpkXWM-q82uRpDU-jf-oabZrhNlYhop60txY5OTjjU,17801
237
+ snowflake_cli_labs-2.8.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
238
+ snowflake_cli_labs-2.8.0.dist-info/entry_points.txt,sha256=_qdnT44fYFbH78kb6Em5jr2_26amIg3UIAvSdmqT6TY,57
239
+ snowflake_cli_labs-2.8.0.dist-info/licenses/LICENSE,sha256=mJMA3Uz2AbjU_kVggo1CAx01XhBsI7BSi2H7ggUg_-c,11344
240
+ snowflake_cli_labs-2.8.0.dist-info/RECORD,,