snowflake-cli-labs 2.8.0rc1__py3-none-any.whl → 3.0.0rc1__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/{app → _app}/__main__.py +1 -1
- snowflake/cli/{app → _app}/cli_app.py +12 -12
- snowflake/cli/{app → _app}/commands_registration/builtin_plugins.py +13 -19
- snowflake/cli/{app → _app}/commands_registration/command_plugins_loader.py +9 -9
- snowflake/cli/{app → _app}/commands_registration/commands_registration_with_callbacks.py +4 -4
- snowflake/cli/{app → _app}/commands_registration/exception_logging.py +2 -2
- snowflake/cli/{app → _app}/commands_registration/typer_registration.py +2 -2
- snowflake/cli/{app → _app}/dev/docs/commands_docs_generator.py +30 -12
- snowflake/cli/{app → _app}/dev/docs/generator.py +3 -3
- snowflake/cli/{app → _app}/dev/docs/project_definition_docs_generator.py +4 -4
- snowflake/cli/{app → _app}/dev/docs/templates/usage.rst.jinja2 +14 -4
- snowflake/cli/{app → _app}/main_typer.py +2 -2
- snowflake/cli/{app → _app}/printing.py +2 -2
- snowflake/cli/{app → _app}/snow_connector.py +24 -17
- snowflake/cli/{app → _app}/telemetry.py +4 -5
- snowflake/cli/{plugins → _plugins}/connection/commands.py +25 -7
- snowflake/cli/_plugins/connection/plugin_spec.py +30 -0
- snowflake/cli/{plugins → _plugins}/connection/util.py +16 -0
- snowflake/cli/{plugins → _plugins}/cortex/commands.py +54 -49
- snowflake/cli/{plugins → _plugins}/cortex/constants.py +1 -1
- snowflake/cli/{plugins → _plugins}/cortex/manager.py +5 -5
- snowflake/cli/{plugins → _plugins}/cortex/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/git/commands.py +32 -20
- snowflake/cli/{plugins → _plugins}/git/manager.py +20 -11
- snowflake/cli/{plugins → _plugins}/git/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/init/commands.py +10 -6
- snowflake/cli/{plugins → _plugins}/init/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/nativeapp/artifacts.py +14 -0
- snowflake/cli/_plugins/nativeapp/bundle_context.py +31 -0
- snowflake/cli/{plugins → _plugins}/nativeapp/codegen/artifact_processor.py +3 -3
- snowflake/cli/{plugins → _plugins}/nativeapp/codegen/compiler.py +32 -18
- snowflake/cli/_plugins/nativeapp/codegen/setup/native_app_setup_processor.py +249 -0
- snowflake/cli/{plugins → _plugins}/nativeapp/codegen/setup/setup_driver.py.source +5 -2
- snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/extension_function_utils.py +4 -4
- snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/python_processor.py +23 -29
- snowflake/cli/_plugins/nativeapp/codegen/templates/templates_processor.py +93 -0
- snowflake/cli/{plugins → _plugins}/nativeapp/commands.py +171 -42
- snowflake/cli/{plugins → _plugins}/nativeapp/common_flags.py +1 -1
- snowflake/cli/{plugins → _plugins}/nativeapp/exceptions.py +3 -3
- snowflake/cli/{plugins → _plugins}/nativeapp/init.py +1 -1
- snowflake/cli/_plugins/nativeapp/manager.py +572 -0
- snowflake/cli/{plugins/connection → _plugins/nativeapp}/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/nativeapp/project_model.py +35 -19
- snowflake/cli/{plugins → _plugins}/nativeapp/run_processor.py +25 -23
- snowflake/cli/{plugins → _plugins}/nativeapp/teardown_processor.py +24 -110
- snowflake/cli/{plugins → _plugins}/nativeapp/v2_conversions/v2_to_v1_decorator.py +47 -28
- snowflake/cli/{plugins → _plugins}/nativeapp/version/commands.py +15 -12
- snowflake/cli/{plugins → _plugins}/nativeapp/version/version_processor.py +22 -20
- snowflake/cli/{plugins → _plugins}/notebook/commands.py +8 -6
- snowflake/cli/{plugins → _plugins}/notebook/manager.py +14 -14
- snowflake/cli/{plugins → _plugins}/notebook/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/notebook/types.py +0 -1
- snowflake/cli/{plugins → _plugins}/object/command_aliases.py +6 -5
- snowflake/cli/{plugins → _plugins}/object/commands.py +16 -10
- snowflake/cli/{plugins → _plugins}/object/manager.py +7 -6
- snowflake/cli/{plugins → _plugins}/object/plugin_spec.py +1 -1
- snowflake/cli/_plugins/snowpark/commands.py +450 -0
- snowflake/cli/_plugins/snowpark/common.py +268 -0
- snowflake/cli/{plugins → _plugins}/snowpark/models.py +0 -7
- snowflake/cli/{plugins → _plugins}/snowpark/package/anaconda_packages.py +2 -36
- snowflake/cli/{plugins → _plugins}/snowpark/package/commands.py +13 -74
- snowflake/cli/{plugins → _plugins}/snowpark/package/manager.py +4 -3
- snowflake/cli/{plugins → _plugins}/snowpark/package_utils.py +5 -5
- snowflake/cli/{plugins/nativeapp → _plugins/snowpark}/plugin_spec.py +1 -1
- snowflake/cli/_plugins/snowpark/snowpark_project_paths.py +109 -0
- snowflake/cli/{plugins → _plugins}/snowpark/snowpark_shared.py +0 -36
- snowflake/cli/{plugins → _plugins}/snowpark/zipper.py +16 -8
- snowflake/cli/{plugins → _plugins}/spcs/__init__.py +5 -7
- snowflake/cli/{plugins → _plugins}/spcs/compute_pool/commands.py +29 -28
- snowflake/cli/{plugins → _plugins}/spcs/compute_pool/manager.py +3 -3
- snowflake/cli/{plugins → _plugins}/spcs/image_registry/commands.py +3 -3
- snowflake/cli/{plugins → _plugins}/spcs/image_repository/commands.py +25 -19
- snowflake/cli/{plugins → _plugins}/spcs/image_repository/manager.py +1 -1
- snowflake/cli/{plugins → _plugins}/spcs/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/spcs/services/commands.py +66 -32
- snowflake/cli/{plugins → _plugins}/spcs/services/manager.py +43 -5
- snowflake/cli/{plugins → _plugins}/sql/commands.py +20 -17
- snowflake/cli/{plugins → _plugins}/sql/manager.py +1 -1
- snowflake/cli/{plugins → _plugins}/sql/plugin_spec.py +1 -1
- snowflake/cli/{plugins → _plugins}/stage/commands.py +20 -17
- snowflake/cli/{plugins → _plugins}/stage/diff.py +1 -47
- snowflake/cli/{plugins → _plugins}/stage/manager.py +54 -21
- snowflake/cli/{plugins → _plugins}/stage/plugin_spec.py +1 -1
- snowflake/cli/_plugins/stage/utils.py +54 -0
- snowflake/cli/{plugins → _plugins}/streamlit/commands.py +59 -62
- snowflake/cli/{plugins → _plugins}/streamlit/manager.py +51 -70
- snowflake/cli/_plugins/streamlit/plugin_spec.py +30 -0
- snowflake/cli/_plugins/workspace/action_context.py +17 -0
- snowflake/cli/_plugins/workspace/commands.py +194 -0
- snowflake/cli/_plugins/workspace/manager.py +73 -0
- snowflake/cli/{plugins → _plugins}/workspace/plugin_spec.py +1 -1
- snowflake/cli/api/cli_global_context.py +40 -13
- snowflake/cli/api/commands/common.py +25 -0
- snowflake/cli/api/commands/decorators.py +5 -4
- snowflake/cli/api/commands/experimental_behaviour.py +2 -3
- snowflake/cli/api/commands/flags.py +97 -179
- snowflake/cli/api/commands/overrideable_parameter.py +143 -0
- snowflake/cli/api/commands/snow_typer.py +14 -6
- snowflake/cli/api/commands/typer_pre_execute.py +3 -3
- snowflake/cli/api/commands/utils.py +18 -0
- snowflake/cli/api/config.py +18 -5
- snowflake/cli/api/console/abc.py +5 -2
- snowflake/cli/api/constants.py +11 -0
- snowflake/cli/api/entities/application_entity.py +12 -0
- snowflake/cli/api/entities/application_package_entity.py +553 -0
- snowflake/cli/api/entities/common.py +51 -0
- snowflake/cli/api/entities/snowpark_entity.py +29 -0
- snowflake/cli/api/entities/streamlit_entity.py +12 -0
- snowflake/cli/api/entities/utils.py +357 -0
- snowflake/cli/api/exceptions.py +31 -5
- snowflake/cli/api/feature_flags.py +0 -1
- snowflake/cli/api/identifiers.py +41 -9
- snowflake/cli/api/project/definition.py +37 -6
- snowflake/cli/api/project/definition_conversion.py +194 -0
- snowflake/cli/api/project/definition_manager.py +12 -1
- snowflake/cli/api/project/project_verification.py +3 -3
- snowflake/cli/api/project/schemas/entities/{application_entity.py → application_entity_model.py} +21 -9
- snowflake/cli/api/project/schemas/entities/{application_package_entity.py → application_package_entity_model.py} +43 -15
- snowflake/cli/api/project/schemas/entities/common.py +80 -6
- snowflake/cli/api/project/schemas/entities/entities.py +38 -8
- snowflake/cli/api/project/schemas/entities/snowpark_entity.py +176 -0
- snowflake/cli/api/project/schemas/entities/streamlit_entity_model.py +73 -0
- snowflake/cli/api/project/schemas/identifier_model.py +10 -1
- snowflake/cli/api/project/schemas/native_app/application.py +8 -9
- snowflake/cli/api/project/schemas/native_app/package.py +7 -1
- snowflake/cli/api/project/schemas/project_definition.py +98 -27
- snowflake/cli/api/project/schemas/updatable_model.py +11 -3
- snowflake/cli/api/project/util.py +23 -6
- snowflake/cli/api/rendering/jinja.py +14 -8
- snowflake/cli/api/rendering/project_definition_templates.py +1 -1
- snowflake/cli/api/rendering/sql_templates.py +43 -11
- snowflake/cli/api/secure_path.py +16 -18
- snowflake/cli/api/secure_utils.py +90 -1
- snowflake/cli/api/sql_execution.py +48 -19
- snowflake/cli/api/utils/definition_rendering.py +18 -8
- {snowflake_cli_labs-2.8.0rc1.dist-info → snowflake_cli_labs-3.0.0rc1.dist-info}/METADATA +13 -13
- snowflake_cli_labs-3.0.0rc1.dist-info/RECORD +236 -0
- snowflake_cli_labs-3.0.0rc1.dist-info/entry_points.txt +2 -0
- snowflake/cli/api/commands/project_initialisation.py +0 -65
- snowflake/cli/app/build_and_push.sh +0 -8
- snowflake/cli/plugins/nativeapp/codegen/setup/native_app_setup_processor.py +0 -172
- snowflake/cli/plugins/nativeapp/manager.py +0 -823
- snowflake/cli/plugins/object_stage_deprecated/__init__.py +0 -15
- snowflake/cli/plugins/object_stage_deprecated/commands.py +0 -122
- snowflake/cli/plugins/object_stage_deprecated/plugin_spec.py +0 -32
- snowflake/cli/plugins/snowpark/commands.py +0 -548
- snowflake/cli/plugins/snowpark/common.py +0 -307
- snowflake/cli/plugins/snowpark/manager.py +0 -109
- snowflake/cli/plugins/snowpark/plugin_spec.py +0 -30
- snowflake/cli/plugins/snowpark/snowpark_package_paths.py +0 -65
- snowflake/cli/plugins/spcs/jobs/commands.py +0 -78
- snowflake/cli/plugins/spcs/jobs/manager.py +0 -53
- snowflake/cli/plugins/streamlit/plugin_spec.py +0 -30
- snowflake/cli/plugins/workspace/commands.py +0 -35
- snowflake/cli/templates/default_snowpark/.gitignore +0 -4
- snowflake/cli/templates/default_snowpark/app/__init__.py +0 -0
- snowflake/cli/templates/default_snowpark/app/common.py +0 -2
- snowflake/cli/templates/default_snowpark/app/functions.py +0 -15
- snowflake/cli/templates/default_snowpark/app/procedures.py +0 -22
- snowflake/cli/templates/default_snowpark/requirements.txt +0 -1
- snowflake/cli/templates/default_snowpark/snowflake.yml +0 -23
- snowflake/cli/templates/default_streamlit/.gitignore +0 -4
- snowflake/cli/templates/default_streamlit/common/hello.py +0 -2
- snowflake/cli/templates/default_streamlit/environment.yml +0 -6
- snowflake/cli/templates/default_streamlit/pages/my_page.py +0 -3
- snowflake/cli/templates/default_streamlit/snowflake.yml +0 -10
- snowflake/cli/templates/default_streamlit/streamlit_app.py +0 -4
- snowflake_cli_labs-2.8.0rc1.dist-info/RECORD +0 -240
- snowflake_cli_labs-2.8.0rc1.dist-info/entry_points.txt +0 -2
- /snowflake/cli/{app → _app}/__init__.py +0 -0
- /snowflake/cli/{app → _app}/api_impl/__init__.py +0 -0
- /snowflake/cli/{app → _app}/api_impl/plugin/__init__.py +0 -0
- /snowflake/cli/{app → _app}/api_impl/plugin/plugin_config_provider_impl.py +0 -0
- /snowflake/cli/{app → _app}/commands_registration/__init__.py +0 -0
- /snowflake/cli/{app → _app}/commands_registration/threadsafe.py +0 -0
- /snowflake/cli/{app → _app}/constants.py +0 -0
- /snowflake/cli/{app → _app}/dev/__init__.py +0 -0
- /snowflake/cli/{app → _app}/dev/commands_structure.py +0 -0
- /snowflake/cli/{app → _app}/dev/docs/__init__.py +0 -0
- /snowflake/cli/{app → _app}/dev/docs/project_definition_generate_json_schema.py +0 -0
- /snowflake/cli/{app → _app}/dev/docs/template_utils.py +0 -0
- /snowflake/cli/{app → _app}/dev/docs/templates/definition_description.rst.jinja2 +0 -0
- /snowflake/cli/{app → _app}/dev/docs/templates/overview.rst.jinja2 +0 -0
- /snowflake/cli/{app → _app}/dev/pycharm_remote_debug.py +0 -0
- /snowflake/cli/{app → _app}/loggers.py +0 -0
- /snowflake/cli/{plugins → _plugins}/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/connection/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/cortex/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/cortex/types.py +0 -0
- /snowflake/cli/{plugins → _plugins}/git/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/init/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/sandbox.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/callback_source.py.jinja +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/models.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/constants.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/feature_flags.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/policy.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/utils.py +0 -0
- /snowflake/cli/{plugins → _plugins}/nativeapp/version/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/notebook/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/notebook/exceptions.py +0 -0
- /snowflake/cli/{plugins → _plugins}/object/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/object/common.py +0 -0
- /snowflake/cli/{plugins → _plugins}/snowpark/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/snowpark/package/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/snowpark/package/utils.py +0 -0
- /snowflake/cli/{plugins → _plugins}/spcs/common.py +0 -0
- /snowflake/cli/{plugins → _plugins}/spcs/compute_pool/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/spcs/image_registry/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/spcs/image_registry/manager.py +0 -0
- /snowflake/cli/{plugins → _plugins}/spcs/image_repository/__init__.py +0 -0
- /snowflake/cli/{plugins/spcs/jobs → _plugins/spcs/services}/__init__.py +0 -0
- /snowflake/cli/{plugins/spcs/services → _plugins/sql}/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/sql/snowsql_templating.py +0 -0
- /snowflake/cli/{plugins/sql → _plugins/stage}/__init__.py +0 -0
- /snowflake/cli/{plugins → _plugins}/stage/md5.py +0 -0
- /snowflake/cli/{plugins/stage → _plugins/streamlit}/__init__.py +0 -0
- /snowflake/cli/{plugins/streamlit → _plugins/workspace}/__init__.py +0 -0
- /snowflake/cli/{plugins/workspace → api/project/schemas/entities}/__init__.py +0 -0
- {snowflake_cli_labs-2.8.0rc1.dist-info → snowflake_cli_labs-3.0.0rc1.dist-info}/WHEEL +0 -0
- {snowflake_cli_labs-2.8.0rc1.dist-info → snowflake_cli_labs-3.0.0rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -20,6 +20,7 @@ from functools import wraps
|
|
|
20
20
|
from typing import Any, Callable, Dict, List, Optional, Tuple
|
|
21
21
|
|
|
22
22
|
import typer
|
|
23
|
+
from click import ClickException
|
|
23
24
|
from snowflake.cli.api.commands.decorators import (
|
|
24
25
|
global_options,
|
|
25
26
|
global_options_with_connection,
|
|
@@ -33,6 +34,7 @@ from snowflake.cli.api.commands.typer_pre_execute import run_pre_execute_command
|
|
|
33
34
|
from snowflake.cli.api.exceptions import CommandReturnTypeError
|
|
34
35
|
from snowflake.cli.api.output.types import CommandResult
|
|
35
36
|
from snowflake.cli.api.sanitizers import sanitize_for_terminal
|
|
37
|
+
from snowflake.cli.api.sql_execution import SqlExecutionMixin
|
|
36
38
|
|
|
37
39
|
log = logging.getLogger(__name__)
|
|
38
40
|
|
|
@@ -46,6 +48,7 @@ class SnowTyper(typer.Typer):
|
|
|
46
48
|
pretty_exceptions_show_locals=False,
|
|
47
49
|
no_args_is_help=True,
|
|
48
50
|
add_completion=True,
|
|
51
|
+
rich_markup_mode="markdown",
|
|
49
52
|
)
|
|
50
53
|
|
|
51
54
|
@staticmethod
|
|
@@ -70,6 +73,7 @@ class SnowTyper(typer.Typer):
|
|
|
70
73
|
requires_global_options: bool = True,
|
|
71
74
|
requires_connection: bool = False,
|
|
72
75
|
is_enabled: Callable[[], bool] | None = None,
|
|
76
|
+
require_warehouse: bool = False,
|
|
73
77
|
**kwargs,
|
|
74
78
|
):
|
|
75
79
|
"""
|
|
@@ -96,7 +100,7 @@ class SnowTyper(typer.Typer):
|
|
|
96
100
|
def command_callable_decorator(*args, **kw):
|
|
97
101
|
"""Wrapper around command callable. This is what happens at "runtime"."""
|
|
98
102
|
execution = ExecutionMetadata()
|
|
99
|
-
self.pre_execute(execution)
|
|
103
|
+
self.pre_execute(execution, require_warehouse=require_warehouse)
|
|
100
104
|
try:
|
|
101
105
|
result = command_callable(*args, **kw)
|
|
102
106
|
self.process_result(result)
|
|
@@ -115,22 +119,26 @@ class SnowTyper(typer.Typer):
|
|
|
115
119
|
return custom_command
|
|
116
120
|
|
|
117
121
|
@staticmethod
|
|
118
|
-
def pre_execute(execution: ExecutionMetadata):
|
|
122
|
+
def pre_execute(execution: ExecutionMetadata, require_warehouse: bool = False):
|
|
119
123
|
"""
|
|
120
124
|
Callback executed before running any command callable (after context execution).
|
|
121
125
|
Pay attention to make this method safe to use if performed operations are not necessary
|
|
122
126
|
for executing the command in proper way.
|
|
123
127
|
"""
|
|
124
|
-
from snowflake.cli.
|
|
128
|
+
from snowflake.cli._app.telemetry import log_command_usage
|
|
125
129
|
|
|
126
130
|
log.debug("Executing command pre execution callback")
|
|
127
131
|
run_pre_execute_commands()
|
|
128
132
|
log_command_usage(execution)
|
|
133
|
+
if require_warehouse and not SqlExecutionMixin().session_has_warehouse():
|
|
134
|
+
raise ClickException(
|
|
135
|
+
"The command requires warehouse. No warehouse found in current connection."
|
|
136
|
+
)
|
|
129
137
|
|
|
130
138
|
@staticmethod
|
|
131
139
|
def process_result(result):
|
|
132
140
|
"""Command result processor"""
|
|
133
|
-
from snowflake.cli.
|
|
141
|
+
from snowflake.cli._app.printing import print_result
|
|
134
142
|
|
|
135
143
|
# Because we still have commands like "logs" that do not return anything.
|
|
136
144
|
# We should improve it in future.
|
|
@@ -145,7 +153,7 @@ class SnowTyper(typer.Typer):
|
|
|
145
153
|
"""
|
|
146
154
|
Callback executed on command execution error.
|
|
147
155
|
"""
|
|
148
|
-
from snowflake.cli.
|
|
156
|
+
from snowflake.cli._app.telemetry import log_command_execution_error
|
|
149
157
|
|
|
150
158
|
log.debug("Executing command exception callback")
|
|
151
159
|
log_command_execution_error(exception, execution)
|
|
@@ -156,7 +164,7 @@ class SnowTyper(typer.Typer):
|
|
|
156
164
|
Callback executed after running any command callable. Pay attention to make this method safe to
|
|
157
165
|
use if performed operations are not necessary for executing the command in proper way.
|
|
158
166
|
"""
|
|
159
|
-
from snowflake.cli.
|
|
167
|
+
from snowflake.cli._app.telemetry import flush_telemetry, log_command_result
|
|
160
168
|
|
|
161
169
|
log.debug("Executing command post execution callback")
|
|
162
170
|
log_command_result(execution)
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
|
|
15
15
|
from typing import Callable
|
|
16
16
|
|
|
17
|
-
from snowflake.cli.api.cli_global_context import
|
|
17
|
+
from snowflake.cli.api.cli_global_context import get_cli_context_manager
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def register_pre_execute_command(command: Callable[[], None]) -> None:
|
|
21
|
-
|
|
21
|
+
get_cli_context_manager().add_typer_pre_execute_commands(command)
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def run_pre_execute_commands() -> None:
|
|
25
|
-
for command in
|
|
25
|
+
for command in get_cli_context_manager().typer_pre_execute_commands:
|
|
26
26
|
command()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from click import ClickException
|
|
4
|
+
from snowflake.cli.api.commands.common import Variable
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def parse_key_value_variables(variables: Optional[List[str]]) -> List[Variable]:
|
|
8
|
+
"""Util for parsing key=value input. Useful for commands accepting multiple input options."""
|
|
9
|
+
result: List[Variable] = []
|
|
10
|
+
if not variables:
|
|
11
|
+
return result
|
|
12
|
+
for p in variables:
|
|
13
|
+
if "=" not in p:
|
|
14
|
+
raise ClickException(f"Invalid variable: '{p}'")
|
|
15
|
+
|
|
16
|
+
key, value = p.split("=", 1)
|
|
17
|
+
result.append(Variable(key.strip(), value.strip()))
|
|
18
|
+
return result
|
snowflake/cli/api/config.py
CHANGED
|
@@ -30,7 +30,10 @@ from snowflake.cli.api.exceptions import (
|
|
|
30
30
|
UnsupportedConfigSectionTypeError,
|
|
31
31
|
)
|
|
32
32
|
from snowflake.cli.api.secure_path import SecurePath
|
|
33
|
-
from snowflake.cli.api.secure_utils import
|
|
33
|
+
from snowflake.cli.api.secure_utils import (
|
|
34
|
+
file_permissions_are_strict,
|
|
35
|
+
windows_get_not_whitelisted_users_with_access,
|
|
36
|
+
)
|
|
34
37
|
from snowflake.cli.api.utils.types import try_cast_to_bool
|
|
35
38
|
from snowflake.connector.compat import IS_WINDOWS
|
|
36
39
|
from snowflake.connector.config_manager import CONFIG_MANAGER
|
|
@@ -77,7 +80,7 @@ class ConnectionConfig:
|
|
|
77
80
|
warehouse: Optional[str] = None
|
|
78
81
|
role: Optional[str] = None
|
|
79
82
|
authenticator: Optional[str] = None
|
|
80
|
-
|
|
83
|
+
private_key_file: Optional[str] = None
|
|
81
84
|
token_file_path: Optional[str] = None
|
|
82
85
|
|
|
83
86
|
_other_settings: dict = field(default_factory=lambda: {})
|
|
@@ -115,7 +118,7 @@ def config_init(config_file: Optional[Path]):
|
|
|
115
118
|
Initializes the app configuration. Config provided via cli flag takes precedence.
|
|
116
119
|
If config file does not exist we create an empty one.
|
|
117
120
|
"""
|
|
118
|
-
from snowflake.cli.
|
|
121
|
+
from snowflake.cli._app.loggers import create_initial_loggers
|
|
119
122
|
|
|
120
123
|
if config_file:
|
|
121
124
|
CONFIG_MANAGER.file_path = config_file
|
|
@@ -160,6 +163,18 @@ def _read_config_file():
|
|
|
160
163
|
message="Bad owner or permissions.*",
|
|
161
164
|
module="snowflake.connector.config_manager",
|
|
162
165
|
)
|
|
166
|
+
|
|
167
|
+
if not file_permissions_are_strict(CONFIG_MANAGER.file_path):
|
|
168
|
+
users = ", ".join(
|
|
169
|
+
windows_get_not_whitelisted_users_with_access(
|
|
170
|
+
CONFIG_MANAGER.file_path
|
|
171
|
+
)
|
|
172
|
+
)
|
|
173
|
+
warnings.warn(
|
|
174
|
+
f"Unauthorized users ({users}) have access to configuration file {CONFIG_MANAGER.file_path}.\n"
|
|
175
|
+
f'Run `icacls "{CONFIG_MANAGER.file_path}" /deny <USER_ID>:F` on those users to restrict permissions.'
|
|
176
|
+
)
|
|
177
|
+
|
|
163
178
|
try:
|
|
164
179
|
CONFIG_MANAGER.read_config()
|
|
165
180
|
except ConfigSourceError as exception:
|
|
@@ -322,8 +337,6 @@ def _dump_config(conf_file_cache: Dict):
|
|
|
322
337
|
|
|
323
338
|
|
|
324
339
|
def _check_default_config_files_permissions() -> None:
|
|
325
|
-
if IS_WINDOWS:
|
|
326
|
-
return
|
|
327
340
|
if CONNECTIONS_FILE.exists() and not file_permissions_are_strict(CONNECTIONS_FILE):
|
|
328
341
|
raise ConfigFileTooWidePermissionsError(CONNECTIONS_FILE)
|
|
329
342
|
if CONFIG_FILE.exists() and not file_permissions_are_strict(CONFIG_FILE):
|
snowflake/cli/api/console/abc.py
CHANGED
|
@@ -20,7 +20,10 @@ from typing import Callable, Iterator, Optional
|
|
|
20
20
|
|
|
21
21
|
from rich import print as rich_print
|
|
22
22
|
from rich.text import Text
|
|
23
|
-
from snowflake.cli.api.cli_global_context import
|
|
23
|
+
from snowflake.cli.api.cli_global_context import (
|
|
24
|
+
_CliGlobalContextAccess,
|
|
25
|
+
get_cli_context,
|
|
26
|
+
)
|
|
24
27
|
|
|
25
28
|
|
|
26
29
|
class AbstractConsole(ABC):
|
|
@@ -39,7 +42,7 @@ class AbstractConsole(ABC):
|
|
|
39
42
|
|
|
40
43
|
def __init__(self):
|
|
41
44
|
super().__init__()
|
|
42
|
-
self._cli_context =
|
|
45
|
+
self._cli_context = get_cli_context()
|
|
43
46
|
self._in_phase = False
|
|
44
47
|
|
|
45
48
|
@property
|
snowflake/cli/api/constants.py
CHANGED
|
@@ -77,3 +77,14 @@ VALID_SCOPES = ["database", "schema", "compute-pool"]
|
|
|
77
77
|
DEFAULT_SIZE_LIMIT_MB = 128
|
|
78
78
|
|
|
79
79
|
SF_REST_API_URL_PREFIX = "/api/v2"
|
|
80
|
+
|
|
81
|
+
PROJECT_TEMPLATE_VARIABLE_OPENING = "<%"
|
|
82
|
+
PROJECT_TEMPLATE_VARIABLE_CLOSING = "%>"
|
|
83
|
+
|
|
84
|
+
INIT_TEMPLATE_VARIABLE_OPENING = "<!"
|
|
85
|
+
INIT_TEMPLATE_VARIABLE_CLOSING = "!>"
|
|
86
|
+
|
|
87
|
+
SNOWPARK_SHARED_MIXIN = "snowpark_shared"
|
|
88
|
+
|
|
89
|
+
DEFAULT_ENV_FILE = "environment.yml"
|
|
90
|
+
DEFAULT_PAGES_DIR = "pages"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from snowflake.cli.api.entities.common import EntityBase
|
|
2
|
+
from snowflake.cli.api.project.schemas.entities.application_entity_model import (
|
|
3
|
+
ApplicationEntityModel,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ApplicationEntity(EntityBase[ApplicationEntityModel]):
|
|
8
|
+
"""
|
|
9
|
+
A Native App application object, created from an application package.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
pass
|