snowflake-cli-labs 2.6.0rc0__py3-none-any.whl → 2.7.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 (90) hide show
  1. snowflake/cli/__about__.py +1 -1
  2. snowflake/cli/api/cli_global_context.py +9 -0
  3. snowflake/cli/api/commands/decorators.py +9 -4
  4. snowflake/cli/api/commands/execution_metadata.py +40 -0
  5. snowflake/cli/api/commands/flags.py +45 -36
  6. snowflake/cli/api/commands/project_initialisation.py +5 -2
  7. snowflake/cli/api/commands/snow_typer.py +20 -9
  8. snowflake/cli/api/config.py +4 -0
  9. snowflake/cli/api/errno.py +27 -0
  10. snowflake/cli/api/feature_flags.py +5 -0
  11. snowflake/cli/api/identifiers.py +20 -3
  12. snowflake/cli/api/output/types.py +9 -0
  13. snowflake/cli/api/project/definition_manager.py +2 -2
  14. snowflake/cli/api/project/project_verification.py +23 -0
  15. snowflake/cli/api/project/schemas/entities/application_entity.py +50 -0
  16. snowflake/cli/api/project/schemas/entities/application_package_entity.py +63 -0
  17. snowflake/cli/api/project/schemas/entities/common.py +85 -0
  18. snowflake/cli/api/project/schemas/entities/entities.py +30 -0
  19. snowflake/cli/api/project/schemas/project_definition.py +114 -22
  20. snowflake/cli/api/project/schemas/streamlit/streamlit.py +5 -4
  21. snowflake/cli/api/project/schemas/template.py +77 -0
  22. snowflake/cli/{plugins/nativeapp/errno.py → api/rendering/__init__.py} +0 -2
  23. snowflake/cli/api/{utils/rendering.py → rendering/jinja.py} +3 -48
  24. snowflake/cli/api/rendering/project_definition_templates.py +39 -0
  25. snowflake/cli/api/rendering/project_templates.py +97 -0
  26. snowflake/cli/api/rendering/sql_templates.py +56 -0
  27. snowflake/cli/api/rest_api.py +84 -25
  28. snowflake/cli/api/sql_execution.py +40 -1
  29. snowflake/cli/api/utils/definition_rendering.py +8 -5
  30. snowflake/cli/app/cli_app.py +0 -2
  31. snowflake/cli/app/commands_registration/builtin_plugins.py +4 -0
  32. snowflake/cli/app/dev/docs/project_definition_docs_generator.py +2 -2
  33. snowflake/cli/app/loggers.py +10 -6
  34. snowflake/cli/app/printing.py +17 -7
  35. snowflake/cli/app/snow_connector.py +9 -1
  36. snowflake/cli/app/telemetry.py +41 -2
  37. snowflake/cli/plugins/connection/commands.py +13 -3
  38. snowflake/cli/plugins/connection/util.py +73 -18
  39. snowflake/cli/plugins/cortex/commands.py +2 -1
  40. snowflake/cli/plugins/git/commands.py +20 -4
  41. snowflake/cli/plugins/git/manager.py +44 -20
  42. snowflake/cli/plugins/init/__init__.py +13 -0
  43. snowflake/cli/plugins/init/commands.py +242 -0
  44. snowflake/cli/plugins/init/plugin_spec.py +30 -0
  45. snowflake/cli/plugins/nativeapp/codegen/artifact_processor.py +40 -0
  46. snowflake/cli/plugins/nativeapp/codegen/compiler.py +57 -27
  47. snowflake/cli/plugins/nativeapp/codegen/sandbox.py +99 -10
  48. snowflake/cli/plugins/nativeapp/codegen/setup/native_app_setup_processor.py +172 -0
  49. snowflake/cli/plugins/nativeapp/codegen/setup/setup_driver.py.source +56 -0
  50. snowflake/cli/plugins/nativeapp/codegen/snowpark/python_processor.py +21 -21
  51. snowflake/cli/plugins/nativeapp/commands.py +100 -6
  52. snowflake/cli/plugins/nativeapp/constants.py +0 -6
  53. snowflake/cli/plugins/nativeapp/exceptions.py +37 -12
  54. snowflake/cli/plugins/nativeapp/init.py +1 -1
  55. snowflake/cli/plugins/nativeapp/manager.py +114 -39
  56. snowflake/cli/plugins/nativeapp/project_model.py +8 -4
  57. snowflake/cli/plugins/nativeapp/run_processor.py +117 -102
  58. snowflake/cli/plugins/nativeapp/teardown_processor.py +7 -2
  59. snowflake/cli/plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py +146 -0
  60. snowflake/cli/plugins/nativeapp/version/commands.py +19 -3
  61. snowflake/cli/plugins/nativeapp/version/version_processor.py +11 -3
  62. snowflake/cli/plugins/object/commands.py +1 -1
  63. snowflake/cli/plugins/object/manager.py +2 -15
  64. snowflake/cli/plugins/snowpark/commands.py +34 -26
  65. snowflake/cli/plugins/snowpark/common.py +88 -27
  66. snowflake/cli/plugins/snowpark/manager.py +16 -5
  67. snowflake/cli/plugins/snowpark/models.py +6 -0
  68. snowflake/cli/plugins/sql/commands.py +3 -5
  69. snowflake/cli/plugins/sql/manager.py +1 -1
  70. snowflake/cli/plugins/stage/commands.py +2 -2
  71. snowflake/cli/plugins/stage/diff.py +27 -64
  72. snowflake/cli/plugins/stage/manager.py +290 -86
  73. snowflake/cli/plugins/stage/md5.py +160 -0
  74. snowflake/cli/plugins/streamlit/commands.py +20 -6
  75. snowflake/cli/plugins/streamlit/manager.py +46 -32
  76. snowflake/cli/plugins/workspace/__init__.py +13 -0
  77. snowflake/cli/plugins/workspace/commands.py +35 -0
  78. snowflake/cli/plugins/workspace/plugin_spec.py +30 -0
  79. snowflake/cli/templates/default_snowpark/app/__init__.py +0 -13
  80. snowflake/cli/templates/default_snowpark/app/common.py +0 -15
  81. snowflake/cli/templates/default_snowpark/app/functions.py +0 -14
  82. snowflake/cli/templates/default_snowpark/app/procedures.py +0 -14
  83. snowflake/cli/templates/default_streamlit/common/hello.py +0 -15
  84. snowflake/cli/templates/default_streamlit/pages/my_page.py +0 -14
  85. snowflake/cli/templates/default_streamlit/streamlit_app.py +0 -14
  86. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/METADATA +7 -6
  87. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/RECORD +90 -69
  88. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/WHEEL +0 -0
  89. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/entry_points.txt +0 -0
  90. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -35,6 +35,7 @@ from snowflake.cli.api.output.types import (
35
35
  MessageResult,
36
36
  SingleQueryResult,
37
37
  )
38
+ from snowflake.cli.api.project.project_verification import assert_project_type
38
39
  from snowflake.cli.api.project.schemas.streamlit.streamlit import Streamlit
39
40
  from snowflake.cli.plugins.object.command_aliases import (
40
41
  add_object_command_aliases,
@@ -49,8 +50,18 @@ app = SnowTyperFactory(
49
50
  log = logging.getLogger(__name__)
50
51
 
51
52
 
53
+ class IdentifierType(click.ParamType):
54
+ name = "TEXT"
55
+
56
+ def convert(self, value, param, ctx):
57
+ return FQN.from_string(value)
58
+
59
+
52
60
  StreamlitNameArgument = typer.Argument(
53
- ..., help="Name of the Streamlit app.", show_default=False
61
+ ...,
62
+ help="Name of the Streamlit app.",
63
+ show_default=False,
64
+ click_type=IdentifierType(),
54
65
  )
55
66
  OpenOption = typer.Option(
56
67
  False,
@@ -79,7 +90,7 @@ add_object_command_aliases(
79
90
 
80
91
  @app.command("share", requires_connection=True)
81
92
  def streamlit_share(
82
- name: str = StreamlitNameArgument,
93
+ name: FQN = StreamlitNameArgument,
83
94
  to_role: str = typer.Argument(
84
95
  ..., help="Role with which to share the Streamlit app."
85
96
  ),
@@ -108,7 +119,7 @@ def _default_file_callback(param_name: str):
108
119
 
109
120
 
110
121
  @app.command("deploy", requires_connection=True)
111
- @with_project_definition("streamlit")
122
+ @with_project_definition()
112
123
  @with_experimental_behaviour()
113
124
  def streamlit_deploy(
114
125
  replace: bool = ReplaceOption(
@@ -122,6 +133,9 @@ def streamlit_deploy(
122
133
  environment.yml and any other pages or folders, if present. If you don’t specify a stage name, the `streamlit`
123
134
  stage is used. If the specified stage does not exist, the command creates it.
124
135
  """
136
+
137
+ assert_project_type("streamlit")
138
+
125
139
  streamlit: Streamlit = cli_context.project_definition.streamlit
126
140
  if not streamlit:
127
141
  return MessageResult("No streamlit were specified in project definition.")
@@ -138,10 +152,10 @@ def streamlit_deploy(
138
152
  elif pages_dir is None:
139
153
  pages_dir = "pages"
140
154
 
141
- streamlit_name = FQN.from_identifier_model(streamlit).using_context()
155
+ streamlit_id = FQN.from_identifier_model(streamlit).using_context()
142
156
 
143
157
  url = StreamlitManager().deploy(
144
- streamlit=streamlit_name,
158
+ streamlit_id=streamlit_id,
145
159
  environment_file=Path(environment_file),
146
160
  pages_dir=Path(pages_dir),
147
161
  stage_name=streamlit.stage,
@@ -161,7 +175,7 @@ def streamlit_deploy(
161
175
 
162
176
  @app.command("get-url", requires_connection=True)
163
177
  def get_url(
164
- name: str = StreamlitNameArgument,
178
+ name: FQN = StreamlitNameArgument,
165
179
  open_: bool = OpenOption,
166
180
  **options,
167
181
  ):
@@ -15,6 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import logging
18
+ import os
18
19
  from pathlib import Path
19
20
  from typing import List, Optional
20
21
 
@@ -25,7 +26,8 @@ from snowflake.cli.api.feature_flags import FeatureFlag
25
26
  from snowflake.cli.api.identifiers import FQN
26
27
  from snowflake.cli.api.sql_execution import SqlExecutionMixin
27
28
  from snowflake.cli.plugins.connection.util import (
28
- MissingConnectionHostError,
29
+ MissingConnectionAccountError,
30
+ MissingConnectionRegionError,
29
31
  make_snowsight_url,
30
32
  )
31
33
  from snowflake.cli.plugins.stage.manager import StageManager
@@ -36,9 +38,9 @@ log = logging.getLogger(__name__)
36
38
 
37
39
 
38
40
  class StreamlitManager(SqlExecutionMixin):
39
- def share(self, streamlit_name: str, to_role: str) -> SnowflakeCursor:
41
+ def share(self, streamlit_name: FQN, to_role: str) -> SnowflakeCursor:
40
42
  return self._execute_query(
41
- f"grant usage on streamlit {streamlit_name} to role {to_role}"
43
+ f"grant usage on streamlit {streamlit_name.sql_identifier} to role {to_role}"
42
44
  )
43
45
 
44
46
  def _put_streamlit_files(
@@ -47,7 +49,7 @@ class StreamlitManager(SqlExecutionMixin):
47
49
  main_file: Path,
48
50
  environment_file: Optional[Path],
49
51
  pages_dir: Optional[Path],
50
- additional_source_files: Optional[List[str]],
52
+ additional_source_files: Optional[List[Path]],
51
53
  ):
52
54
  stage_manager = StageManager()
53
55
 
@@ -61,18 +63,15 @@ class StreamlitManager(SqlExecutionMixin):
61
63
 
62
64
  if additional_source_files:
63
65
  for file in additional_source_files:
64
- # If the file is in a folder, PUT it to the same folder in the stage
65
- # If not, just PUT it to the root of the stage
66
- destination = (
67
- f"{root_location}/{str(Path(file).parent)}"
68
- if "/" in file
69
- else root_location
70
- )
66
+ if os.sep in str(file):
67
+ destination = f"{root_location}/{str(file.parent)}"
68
+ else:
69
+ destination = root_location
71
70
  stage_manager.put(file, destination, 4, True)
72
71
 
73
72
  def _create_streamlit(
74
73
  self,
75
- fully_qualified_name: str,
74
+ streamlit_id: FQN,
76
75
  main_file: Path,
77
76
  replace: Optional[bool] = None,
78
77
  experimental: Optional[bool] = None,
@@ -82,15 +81,17 @@ class StreamlitManager(SqlExecutionMixin):
82
81
  ):
83
82
  query = []
84
83
  if replace:
85
- query.append(f"CREATE OR REPLACE STREAMLIT {fully_qualified_name}")
84
+ query.append(f"CREATE OR REPLACE STREAMLIT {streamlit_id.sql_identifier}")
86
85
  elif experimental:
87
86
  # For experimental behaviour, we need to use CREATE STREAMLIT IF NOT EXISTS
88
87
  # for a streamlit app with an embedded stage
89
88
  # because this is analogous to the behavior for non-experimental
90
89
  # deploy which does CREATE STAGE IF NOT EXISTS
91
- query.append(f"CREATE STREAMLIT IF NOT EXISTS {fully_qualified_name}")
90
+ query.append(
91
+ f"CREATE STREAMLIT IF NOT EXISTS {streamlit_id.sql_identifier}"
92
+ )
92
93
  else:
93
- query.append(f"CREATE STREAMLIT {fully_qualified_name}")
94
+ query.append(f"CREATE STREAMLIT {streamlit_id.sql_identifier}")
94
95
 
95
96
  if from_stage_name:
96
97
  query.append(f"ROOT_LOCATION = '{from_stage_name}'")
@@ -106,25 +107,25 @@ class StreamlitManager(SqlExecutionMixin):
106
107
 
107
108
  def deploy(
108
109
  self,
109
- streamlit: FQN,
110
+ streamlit_id: FQN,
110
111
  main_file: Path,
111
112
  environment_file: Optional[Path] = None,
112
113
  pages_dir: Optional[Path] = None,
113
114
  stage_name: Optional[str] = None,
114
115
  query_warehouse: Optional[str] = None,
115
116
  replace: Optional[bool] = False,
116
- additional_source_files: Optional[List[str]] = None,
117
+ additional_source_files: Optional[List[Path]] = None,
117
118
  title: Optional[str] = None,
118
119
  **options,
119
120
  ):
120
121
  # for backwards compatibility - quoted stage path might be case-sensitive
121
122
  # https://docs.snowflake.com/en/sql-reference/identifiers-syntax#double-quoted-identifiers
122
- streamlit_name_for_root_location = streamlit.name
123
- fully_qualified_name = streamlit.identifier
124
-
123
+ streamlit_name_for_root_location = streamlit_id.name
124
+ use_versioned_stage = FeatureFlag.ENABLE_STREAMLIT_VERSIONED_STAGE.is_enabled()
125
125
  if (
126
126
  experimental_behaviour_enabled()
127
127
  or FeatureFlag.ENABLE_STREAMLIT_EMBEDDED_STAGE.is_enabled()
128
+ or use_versioned_stage
128
129
  ):
129
130
  """
130
131
  1. Create streamlit object
@@ -133,7 +134,7 @@ class StreamlitManager(SqlExecutionMixin):
133
134
  # TODO: Support from_stage
134
135
  # from_stage_stmt = f"FROM_STAGE = '{stage_name}'" if stage_name else ""
135
136
  self._create_streamlit(
136
- fully_qualified_name,
137
+ streamlit_id,
137
138
  main_file,
138
139
  replace=replace,
139
140
  query_warehouse=query_warehouse,
@@ -141,17 +142,30 @@ class StreamlitManager(SqlExecutionMixin):
141
142
  title=title,
142
143
  )
143
144
  try:
144
- self._execute_query(f"ALTER streamlit {fully_qualified_name} CHECKOUT")
145
+ if use_versioned_stage:
146
+ self._execute_query(
147
+ f"ALTER STREAMLIT {streamlit_id.identifier} ADD LIVE VERSION FROM LAST"
148
+ )
149
+ elif not FeatureFlag.ENABLE_STREAMLIT_NO_CHECKOUTS.is_enabled():
150
+ self._execute_query(
151
+ f"ALTER streamlit {streamlit_id.identifier} CHECKOUT"
152
+ )
145
153
  except ProgrammingError as e:
146
- # If an error is raised because a CHECKOUT has already occurred,
147
- # simply skip it and continue
148
- if "Checkout already exists" in str(e):
154
+ # If an error is raised because a CHECKOUT has already occurred or a LIVE VERSION already exists, simply skip it and continue
155
+ if "Checkout already exists" in str(
156
+ e
157
+ ) or "There is already a live version" in str(e):
149
158
  log.info("Checkout already exists, continuing")
150
159
  else:
151
160
  raise
152
- stage_path = streamlit.identifier
161
+
162
+ stage_path = streamlit_id.identifier
153
163
  embedded_stage_name = f"snow://streamlit/{stage_path}"
154
- root_location = f"{embedded_stage_name}/default_checkout"
164
+ if use_versioned_stage:
165
+ # "LIVE" is the only supported version for now, but this may change later.
166
+ root_location = f"{embedded_stage_name}/versions/live"
167
+ else:
168
+ root_location = f"{embedded_stage_name}/default_checkout"
155
169
 
156
170
  self._put_streamlit_files(
157
171
  root_location,
@@ -186,7 +200,7 @@ class StreamlitManager(SqlExecutionMixin):
186
200
  )
187
201
 
188
202
  self._create_streamlit(
189
- fully_qualified_name,
203
+ streamlit_id,
190
204
  main_file,
191
205
  replace=replace,
192
206
  query_warehouse=query_warehouse,
@@ -195,14 +209,14 @@ class StreamlitManager(SqlExecutionMixin):
195
209
  title=title,
196
210
  )
197
211
 
198
- return self.get_url(fully_qualified_name)
212
+ return self.get_url(streamlit_name=streamlit_id)
199
213
 
200
- def get_url(self, streamlit_name: str, database=None, schema=None) -> str:
214
+ def get_url(self, streamlit_name: FQN) -> str:
201
215
  try:
202
- fqn = FQN.from_string(streamlit_name).using_connection(self._conn)
216
+ fqn = streamlit_name.using_connection(self._conn)
203
217
  return make_snowsight_url(
204
218
  self._conn,
205
219
  f"/#/streamlit-apps/{fqn.url_identifier}",
206
220
  )
207
- except MissingConnectionHostError as e:
221
+ except (MissingConnectionRegionError, MissingConnectionAccountError) as e:
208
222
  return "https://app.snowflake.com"
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2024 Snowflake Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
@@ -0,0 +1,35 @@
1
+ # Copyright (c) 2024 Snowflake Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ from snowflake.cli.api.commands.decorators import with_project_definition
18
+ from snowflake.cli.api.commands.snow_typer import SnowTyper
19
+ from snowflake.cli.api.output.types import MessageResult
20
+
21
+ ws = SnowTyper(
22
+ name="ws",
23
+ hidden=True,
24
+ help="Deploy and interact with snowflake.yml-based entities.",
25
+ )
26
+
27
+
28
+ @ws.command(requires_connection=True)
29
+ @with_project_definition()
30
+ def validate(
31
+ **options,
32
+ ):
33
+ """Validates the project definition file."""
34
+ # If we get to this point, @with_project_definition() has already validated the PDF schema
35
+ return MessageResult("Project definition is valid.")
@@ -0,0 +1,30 @@
1
+ # Copyright (c) 2024 Snowflake Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from snowflake.cli.api.plugins.command import (
16
+ SNOWCLI_ROOT_COMMAND_PATH,
17
+ CommandSpec,
18
+ CommandType,
19
+ plugin_hook_impl,
20
+ )
21
+ from snowflake.cli.plugins.workspace import commands
22
+
23
+
24
+ @plugin_hook_impl
25
+ def command_spec():
26
+ return CommandSpec(
27
+ parent_command_path=SNOWCLI_ROOT_COMMAND_PATH,
28
+ command_type=CommandType.COMMAND_GROUP,
29
+ typer_instance=commands.ws,
30
+ )
@@ -1,13 +0,0 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
@@ -1,17 +1,2 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
-
16
1
  def print_hello(name: str):
17
2
  return f"Hello {name}!"
@@ -1,17 +1,3 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
1
  from __future__ import annotations
16
2
 
17
3
  import sys
@@ -1,17 +1,3 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
1
  from __future__ import annotations
16
2
 
17
3
  import sys
@@ -1,17 +1,2 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
-
16
1
  def say_hello():
17
2
  return "Hello!"
@@ -1,17 +1,3 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
1
  import streamlit as st
16
2
 
17
3
  st.title("Example page")
@@ -1,17 +1,3 @@
1
- # Copyright (c) 2024 Snowflake Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
1
  import streamlit as st
16
2
  from common.hello import say_hello
17
3
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: snowflake-cli-labs
3
- Version: 2.6.0rc0
3
+ Version: 2.7.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
@@ -222,22 +222,23 @@ Requires-Dist: jinja2==3.1.4
222
222
  Requires-Dist: packaging
223
223
  Requires-Dist: pip
224
224
  Requires-Dist: pluggy==1.5.0
225
- Requires-Dist: pydantic==2.8.0
225
+ Requires-Dist: pydantic==2.8.2
226
226
  Requires-Dist: pyyaml==6.0.1
227
227
  Requires-Dist: requests==2.32.3
228
228
  Requires-Dist: requirements-parser==0.9.0
229
229
  Requires-Dist: rich==13.7.1
230
- Requires-Dist: setuptools==70.1.1
230
+ Requires-Dist: setuptools==70.3.0
231
231
  Requires-Dist: snowflake-connector-python[secure-local-storage]==3.11.0
232
232
  Requires-Dist: snowflake-core==0.8.0; python_version < '3.12'
233
- Requires-Dist: tomlkit==0.12.5
233
+ Requires-Dist: snowflake-snowpark-python>=1.15.0; python_version < '3.12'
234
+ Requires-Dist: tomlkit==0.13.0
234
235
  Requires-Dist: typer==0.12.3
235
236
  Requires-Dist: urllib3<2.3,>=1.24.3
236
237
  Provides-Extra: development
237
- Requires-Dist: coverage==7.5.4; extra == 'development'
238
+ Requires-Dist: coverage==7.6.0; extra == 'development'
238
239
  Requires-Dist: pre-commit>=3.5.0; extra == 'development'
239
240
  Requires-Dist: pytest-randomly==3.15.0; extra == 'development'
240
- Requires-Dist: pytest==8.2.2; extra == 'development'
241
+ Requires-Dist: pytest==8.3.1; extra == 'development'
241
242
  Requires-Dist: syrupy==4.6.1; extra == 'development'
242
243
  Description-Content-Type: text/markdown
243
244