snowflake-cli-labs 2.6.0rc0__py3-none-any.whl → 2.7.0rc0__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 (89) 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 +4 -1
  7. snowflake/cli/api/commands/snow_typer.py +20 -9
  8. snowflake/cli/api/config.py +3 -0
  9. snowflake/cli/api/errno.py +27 -0
  10. snowflake/cli/api/feature_flags.py +1 -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 +4 -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 +69 -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 +4 -2
  72. snowflake/cli/plugins/stage/manager.py +290 -86
  73. snowflake/cli/plugins/streamlit/commands.py +20 -6
  74. snowflake/cli/plugins/streamlit/manager.py +29 -27
  75. snowflake/cli/plugins/workspace/__init__.py +13 -0
  76. snowflake/cli/plugins/workspace/commands.py +35 -0
  77. snowflake/cli/plugins/workspace/plugin_spec.py +30 -0
  78. snowflake/cli/templates/default_snowpark/app/__init__.py +0 -13
  79. snowflake/cli/templates/default_snowpark/app/common.py +0 -15
  80. snowflake/cli/templates/default_snowpark/app/functions.py +0 -14
  81. snowflake/cli/templates/default_snowpark/app/procedures.py +0 -14
  82. snowflake/cli/templates/default_streamlit/common/hello.py +0 -15
  83. snowflake/cli/templates/default_streamlit/pages/my_page.py +0 -14
  84. snowflake/cli/templates/default_streamlit/streamlit_app.py +0 -14
  85. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0rc0.dist-info}/METADATA +7 -6
  86. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0rc0.dist-info}/RECORD +89 -69
  87. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0rc0.dist-info}/WHEEL +0 -0
  88. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0rc0.dist-info}/entry_points.txt +0 -0
  89. {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0rc0.dist-info}/licenses/LICENSE +0 -0
@@ -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,21 +107,20 @@ 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
123
+ streamlit_name_for_root_location = streamlit_id.name
124
124
 
125
125
  if (
126
126
  experimental_behaviour_enabled()
@@ -133,7 +133,7 @@ class StreamlitManager(SqlExecutionMixin):
133
133
  # TODO: Support from_stage
134
134
  # from_stage_stmt = f"FROM_STAGE = '{stage_name}'" if stage_name else ""
135
135
  self._create_streamlit(
136
- fully_qualified_name,
136
+ streamlit_id,
137
137
  main_file,
138
138
  replace=replace,
139
139
  query_warehouse=query_warehouse,
@@ -141,7 +141,9 @@ class StreamlitManager(SqlExecutionMixin):
141
141
  title=title,
142
142
  )
143
143
  try:
144
- self._execute_query(f"ALTER streamlit {fully_qualified_name} CHECKOUT")
144
+ self._execute_query(
145
+ f"ALTER streamlit {streamlit_id.identifier} CHECKOUT"
146
+ )
145
147
  except ProgrammingError as e:
146
148
  # If an error is raised because a CHECKOUT has already occurred,
147
149
  # simply skip it and continue
@@ -149,7 +151,7 @@ class StreamlitManager(SqlExecutionMixin):
149
151
  log.info("Checkout already exists, continuing")
150
152
  else:
151
153
  raise
152
- stage_path = streamlit.identifier
154
+ stage_path = streamlit_id.identifier
153
155
  embedded_stage_name = f"snow://streamlit/{stage_path}"
154
156
  root_location = f"{embedded_stage_name}/default_checkout"
155
157
 
@@ -186,7 +188,7 @@ class StreamlitManager(SqlExecutionMixin):
186
188
  )
187
189
 
188
190
  self._create_streamlit(
189
- fully_qualified_name,
191
+ streamlit_id,
190
192
  main_file,
191
193
  replace=replace,
192
194
  query_warehouse=query_warehouse,
@@ -195,14 +197,14 @@ class StreamlitManager(SqlExecutionMixin):
195
197
  title=title,
196
198
  )
197
199
 
198
- return self.get_url(fully_qualified_name)
200
+ return self.get_url(streamlit_name=streamlit_id)
199
201
 
200
- def get_url(self, streamlit_name: str, database=None, schema=None) -> str:
202
+ def get_url(self, streamlit_name: FQN) -> str:
201
203
  try:
202
- fqn = FQN.from_string(streamlit_name).using_connection(self._conn)
204
+ fqn = streamlit_name.using_connection(self._conn)
203
205
  return make_snowsight_url(
204
206
  self._conn,
205
207
  f"/#/streamlit-apps/{fqn.url_identifier}",
206
208
  )
207
- except MissingConnectionHostError as e:
209
+ except (MissingConnectionRegionError, MissingConnectionAccountError) as e:
208
210
  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.0rc0
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