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.
- snowflake/cli/__about__.py +1 -1
- snowflake/cli/api/cli_global_context.py +9 -0
- snowflake/cli/api/commands/decorators.py +9 -4
- snowflake/cli/api/commands/execution_metadata.py +40 -0
- snowflake/cli/api/commands/flags.py +45 -36
- snowflake/cli/api/commands/project_initialisation.py +5 -2
- snowflake/cli/api/commands/snow_typer.py +20 -9
- snowflake/cli/api/config.py +4 -0
- snowflake/cli/api/errno.py +27 -0
- snowflake/cli/api/feature_flags.py +5 -0
- snowflake/cli/api/identifiers.py +20 -3
- snowflake/cli/api/output/types.py +9 -0
- snowflake/cli/api/project/definition_manager.py +2 -2
- snowflake/cli/api/project/project_verification.py +23 -0
- snowflake/cli/api/project/schemas/entities/application_entity.py +50 -0
- snowflake/cli/api/project/schemas/entities/application_package_entity.py +63 -0
- snowflake/cli/api/project/schemas/entities/common.py +85 -0
- snowflake/cli/api/project/schemas/entities/entities.py +30 -0
- snowflake/cli/api/project/schemas/project_definition.py +114 -22
- snowflake/cli/api/project/schemas/streamlit/streamlit.py +5 -4
- snowflake/cli/api/project/schemas/template.py +77 -0
- snowflake/cli/{plugins/nativeapp/errno.py → api/rendering/__init__.py} +0 -2
- snowflake/cli/api/{utils/rendering.py → rendering/jinja.py} +3 -48
- snowflake/cli/api/rendering/project_definition_templates.py +39 -0
- snowflake/cli/api/rendering/project_templates.py +97 -0
- snowflake/cli/api/rendering/sql_templates.py +56 -0
- snowflake/cli/api/rest_api.py +84 -25
- snowflake/cli/api/sql_execution.py +40 -1
- snowflake/cli/api/utils/definition_rendering.py +8 -5
- snowflake/cli/app/cli_app.py +0 -2
- snowflake/cli/app/commands_registration/builtin_plugins.py +4 -0
- snowflake/cli/app/dev/docs/project_definition_docs_generator.py +2 -2
- snowflake/cli/app/loggers.py +10 -6
- snowflake/cli/app/printing.py +17 -7
- snowflake/cli/app/snow_connector.py +9 -1
- snowflake/cli/app/telemetry.py +41 -2
- snowflake/cli/plugins/connection/commands.py +13 -3
- snowflake/cli/plugins/connection/util.py +73 -18
- snowflake/cli/plugins/cortex/commands.py +2 -1
- snowflake/cli/plugins/git/commands.py +20 -4
- snowflake/cli/plugins/git/manager.py +44 -20
- snowflake/cli/plugins/init/__init__.py +13 -0
- snowflake/cli/plugins/init/commands.py +242 -0
- snowflake/cli/plugins/init/plugin_spec.py +30 -0
- snowflake/cli/plugins/nativeapp/codegen/artifact_processor.py +40 -0
- snowflake/cli/plugins/nativeapp/codegen/compiler.py +57 -27
- snowflake/cli/plugins/nativeapp/codegen/sandbox.py +99 -10
- snowflake/cli/plugins/nativeapp/codegen/setup/native_app_setup_processor.py +172 -0
- snowflake/cli/plugins/nativeapp/codegen/setup/setup_driver.py.source +56 -0
- snowflake/cli/plugins/nativeapp/codegen/snowpark/python_processor.py +21 -21
- snowflake/cli/plugins/nativeapp/commands.py +100 -6
- snowflake/cli/plugins/nativeapp/constants.py +0 -6
- snowflake/cli/plugins/nativeapp/exceptions.py +37 -12
- snowflake/cli/plugins/nativeapp/init.py +1 -1
- snowflake/cli/plugins/nativeapp/manager.py +114 -39
- snowflake/cli/plugins/nativeapp/project_model.py +8 -4
- snowflake/cli/plugins/nativeapp/run_processor.py +117 -102
- snowflake/cli/plugins/nativeapp/teardown_processor.py +7 -2
- snowflake/cli/plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py +146 -0
- snowflake/cli/plugins/nativeapp/version/commands.py +19 -3
- snowflake/cli/plugins/nativeapp/version/version_processor.py +11 -3
- snowflake/cli/plugins/object/commands.py +1 -1
- snowflake/cli/plugins/object/manager.py +2 -15
- snowflake/cli/plugins/snowpark/commands.py +34 -26
- snowflake/cli/plugins/snowpark/common.py +88 -27
- snowflake/cli/plugins/snowpark/manager.py +16 -5
- snowflake/cli/plugins/snowpark/models.py +6 -0
- snowflake/cli/plugins/sql/commands.py +3 -5
- snowflake/cli/plugins/sql/manager.py +1 -1
- snowflake/cli/plugins/stage/commands.py +2 -2
- snowflake/cli/plugins/stage/diff.py +27 -64
- snowflake/cli/plugins/stage/manager.py +290 -86
- snowflake/cli/plugins/stage/md5.py +160 -0
- snowflake/cli/plugins/streamlit/commands.py +20 -6
- snowflake/cli/plugins/streamlit/manager.py +46 -32
- snowflake/cli/plugins/workspace/__init__.py +13 -0
- snowflake/cli/plugins/workspace/commands.py +35 -0
- snowflake/cli/plugins/workspace/plugin_spec.py +30 -0
- snowflake/cli/templates/default_snowpark/app/__init__.py +0 -13
- snowflake/cli/templates/default_snowpark/app/common.py +0 -15
- snowflake/cli/templates/default_snowpark/app/functions.py +0 -14
- snowflake/cli/templates/default_snowpark/app/procedures.py +0 -14
- snowflake/cli/templates/default_streamlit/common/hello.py +0 -15
- snowflake/cli/templates/default_streamlit/pages/my_page.py +0 -14
- snowflake/cli/templates/default_streamlit/streamlit_app.py +0 -14
- {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/METADATA +7 -6
- {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/RECORD +90 -69
- {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/WHEEL +0 -0
- {snowflake_cli_labs-2.6.0rc0.dist-info → snowflake_cli_labs-2.7.0.dist-info}/entry_points.txt +0 -0
- {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
|
-
...,
|
|
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:
|
|
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(
|
|
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
|
-
|
|
155
|
+
streamlit_id = FQN.from_identifier_model(streamlit).using_context()
|
|
142
156
|
|
|
143
157
|
url = StreamlitManager().deploy(
|
|
144
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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[
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
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 {
|
|
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(
|
|
90
|
+
query.append(
|
|
91
|
+
f"CREATE STREAMLIT IF NOT EXISTS {streamlit_id.sql_identifier}"
|
|
92
|
+
)
|
|
92
93
|
else:
|
|
93
|
-
query.append(f"CREATE STREAMLIT {
|
|
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
|
-
|
|
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[
|
|
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 =
|
|
123
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
148
|
-
|
|
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
|
-
|
|
161
|
+
|
|
162
|
+
stage_path = streamlit_id.identifier
|
|
153
163
|
embedded_stage_name = f"snow://streamlit/{stage_path}"
|
|
154
|
-
|
|
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
|
-
|
|
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(
|
|
212
|
+
return self.get_url(streamlit_name=streamlit_id)
|
|
199
213
|
|
|
200
|
-
def get_url(self, streamlit_name:
|
|
214
|
+
def get_url(self, streamlit_name: FQN) -> str:
|
|
201
215
|
try:
|
|
202
|
-
fqn =
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
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
|
|