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.
Files changed (224) hide show
  1. snowflake/cli/__about__.py +1 -1
  2. snowflake/cli/{app → _app}/__main__.py +1 -1
  3. snowflake/cli/{app → _app}/cli_app.py +12 -12
  4. snowflake/cli/{app → _app}/commands_registration/builtin_plugins.py +13 -19
  5. snowflake/cli/{app → _app}/commands_registration/command_plugins_loader.py +9 -9
  6. snowflake/cli/{app → _app}/commands_registration/commands_registration_with_callbacks.py +4 -4
  7. snowflake/cli/{app → _app}/commands_registration/exception_logging.py +2 -2
  8. snowflake/cli/{app → _app}/commands_registration/typer_registration.py +2 -2
  9. snowflake/cli/{app → _app}/dev/docs/commands_docs_generator.py +30 -12
  10. snowflake/cli/{app → _app}/dev/docs/generator.py +3 -3
  11. snowflake/cli/{app → _app}/dev/docs/project_definition_docs_generator.py +4 -4
  12. snowflake/cli/{app → _app}/dev/docs/templates/usage.rst.jinja2 +14 -4
  13. snowflake/cli/{app → _app}/main_typer.py +2 -2
  14. snowflake/cli/{app → _app}/printing.py +2 -2
  15. snowflake/cli/{app → _app}/snow_connector.py +24 -17
  16. snowflake/cli/{app → _app}/telemetry.py +4 -5
  17. snowflake/cli/{plugins → _plugins}/connection/commands.py +25 -7
  18. snowflake/cli/_plugins/connection/plugin_spec.py +30 -0
  19. snowflake/cli/{plugins → _plugins}/connection/util.py +16 -0
  20. snowflake/cli/{plugins → _plugins}/cortex/commands.py +54 -49
  21. snowflake/cli/{plugins → _plugins}/cortex/constants.py +1 -1
  22. snowflake/cli/{plugins → _plugins}/cortex/manager.py +5 -5
  23. snowflake/cli/{plugins → _plugins}/cortex/plugin_spec.py +1 -1
  24. snowflake/cli/{plugins → _plugins}/git/commands.py +32 -20
  25. snowflake/cli/{plugins → _plugins}/git/manager.py +20 -11
  26. snowflake/cli/{plugins → _plugins}/git/plugin_spec.py +1 -1
  27. snowflake/cli/{plugins → _plugins}/init/commands.py +10 -6
  28. snowflake/cli/{plugins → _plugins}/init/plugin_spec.py +1 -1
  29. snowflake/cli/{plugins → _plugins}/nativeapp/artifacts.py +14 -0
  30. snowflake/cli/_plugins/nativeapp/bundle_context.py +31 -0
  31. snowflake/cli/{plugins → _plugins}/nativeapp/codegen/artifact_processor.py +3 -3
  32. snowflake/cli/{plugins → _plugins}/nativeapp/codegen/compiler.py +32 -18
  33. snowflake/cli/_plugins/nativeapp/codegen/setup/native_app_setup_processor.py +249 -0
  34. snowflake/cli/{plugins → _plugins}/nativeapp/codegen/setup/setup_driver.py.source +5 -2
  35. snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/extension_function_utils.py +4 -4
  36. snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/python_processor.py +23 -29
  37. snowflake/cli/_plugins/nativeapp/codegen/templates/templates_processor.py +93 -0
  38. snowflake/cli/{plugins → _plugins}/nativeapp/commands.py +171 -42
  39. snowflake/cli/{plugins → _plugins}/nativeapp/common_flags.py +1 -1
  40. snowflake/cli/{plugins → _plugins}/nativeapp/exceptions.py +3 -3
  41. snowflake/cli/{plugins → _plugins}/nativeapp/init.py +1 -1
  42. snowflake/cli/_plugins/nativeapp/manager.py +572 -0
  43. snowflake/cli/{plugins/connection → _plugins/nativeapp}/plugin_spec.py +1 -1
  44. snowflake/cli/{plugins → _plugins}/nativeapp/project_model.py +35 -19
  45. snowflake/cli/{plugins → _plugins}/nativeapp/run_processor.py +25 -23
  46. snowflake/cli/{plugins → _plugins}/nativeapp/teardown_processor.py +24 -110
  47. snowflake/cli/{plugins → _plugins}/nativeapp/v2_conversions/v2_to_v1_decorator.py +47 -28
  48. snowflake/cli/{plugins → _plugins}/nativeapp/version/commands.py +15 -12
  49. snowflake/cli/{plugins → _plugins}/nativeapp/version/version_processor.py +22 -20
  50. snowflake/cli/{plugins → _plugins}/notebook/commands.py +8 -6
  51. snowflake/cli/{plugins → _plugins}/notebook/manager.py +14 -14
  52. snowflake/cli/{plugins → _plugins}/notebook/plugin_spec.py +1 -1
  53. snowflake/cli/{plugins → _plugins}/notebook/types.py +0 -1
  54. snowflake/cli/{plugins → _plugins}/object/command_aliases.py +6 -5
  55. snowflake/cli/{plugins → _plugins}/object/commands.py +16 -10
  56. snowflake/cli/{plugins → _plugins}/object/manager.py +7 -6
  57. snowflake/cli/{plugins → _plugins}/object/plugin_spec.py +1 -1
  58. snowflake/cli/_plugins/snowpark/commands.py +450 -0
  59. snowflake/cli/_plugins/snowpark/common.py +268 -0
  60. snowflake/cli/{plugins → _plugins}/snowpark/models.py +0 -7
  61. snowflake/cli/{plugins → _plugins}/snowpark/package/anaconda_packages.py +2 -36
  62. snowflake/cli/{plugins → _plugins}/snowpark/package/commands.py +13 -74
  63. snowflake/cli/{plugins → _plugins}/snowpark/package/manager.py +4 -3
  64. snowflake/cli/{plugins → _plugins}/snowpark/package_utils.py +5 -5
  65. snowflake/cli/{plugins/nativeapp → _plugins/snowpark}/plugin_spec.py +1 -1
  66. snowflake/cli/_plugins/snowpark/snowpark_project_paths.py +109 -0
  67. snowflake/cli/{plugins → _plugins}/snowpark/snowpark_shared.py +0 -36
  68. snowflake/cli/{plugins → _plugins}/snowpark/zipper.py +16 -8
  69. snowflake/cli/{plugins → _plugins}/spcs/__init__.py +5 -7
  70. snowflake/cli/{plugins → _plugins}/spcs/compute_pool/commands.py +29 -28
  71. snowflake/cli/{plugins → _plugins}/spcs/compute_pool/manager.py +3 -3
  72. snowflake/cli/{plugins → _plugins}/spcs/image_registry/commands.py +3 -3
  73. snowflake/cli/{plugins → _plugins}/spcs/image_repository/commands.py +25 -19
  74. snowflake/cli/{plugins → _plugins}/spcs/image_repository/manager.py +1 -1
  75. snowflake/cli/{plugins → _plugins}/spcs/plugin_spec.py +1 -1
  76. snowflake/cli/{plugins → _plugins}/spcs/services/commands.py +66 -32
  77. snowflake/cli/{plugins → _plugins}/spcs/services/manager.py +43 -5
  78. snowflake/cli/{plugins → _plugins}/sql/commands.py +20 -17
  79. snowflake/cli/{plugins → _plugins}/sql/manager.py +1 -1
  80. snowflake/cli/{plugins → _plugins}/sql/plugin_spec.py +1 -1
  81. snowflake/cli/{plugins → _plugins}/stage/commands.py +20 -17
  82. snowflake/cli/{plugins → _plugins}/stage/diff.py +1 -47
  83. snowflake/cli/{plugins → _plugins}/stage/manager.py +54 -21
  84. snowflake/cli/{plugins → _plugins}/stage/plugin_spec.py +1 -1
  85. snowflake/cli/_plugins/stage/utils.py +54 -0
  86. snowflake/cli/{plugins → _plugins}/streamlit/commands.py +59 -62
  87. snowflake/cli/{plugins → _plugins}/streamlit/manager.py +51 -70
  88. snowflake/cli/_plugins/streamlit/plugin_spec.py +30 -0
  89. snowflake/cli/_plugins/workspace/action_context.py +17 -0
  90. snowflake/cli/_plugins/workspace/commands.py +194 -0
  91. snowflake/cli/_plugins/workspace/manager.py +73 -0
  92. snowflake/cli/{plugins → _plugins}/workspace/plugin_spec.py +1 -1
  93. snowflake/cli/api/cli_global_context.py +40 -13
  94. snowflake/cli/api/commands/common.py +25 -0
  95. snowflake/cli/api/commands/decorators.py +5 -4
  96. snowflake/cli/api/commands/experimental_behaviour.py +2 -3
  97. snowflake/cli/api/commands/flags.py +97 -179
  98. snowflake/cli/api/commands/overrideable_parameter.py +143 -0
  99. snowflake/cli/api/commands/snow_typer.py +14 -6
  100. snowflake/cli/api/commands/typer_pre_execute.py +3 -3
  101. snowflake/cli/api/commands/utils.py +18 -0
  102. snowflake/cli/api/config.py +18 -5
  103. snowflake/cli/api/console/abc.py +5 -2
  104. snowflake/cli/api/constants.py +11 -0
  105. snowflake/cli/api/entities/application_entity.py +12 -0
  106. snowflake/cli/api/entities/application_package_entity.py +553 -0
  107. snowflake/cli/api/entities/common.py +51 -0
  108. snowflake/cli/api/entities/snowpark_entity.py +29 -0
  109. snowflake/cli/api/entities/streamlit_entity.py +12 -0
  110. snowflake/cli/api/entities/utils.py +357 -0
  111. snowflake/cli/api/exceptions.py +31 -5
  112. snowflake/cli/api/feature_flags.py +0 -1
  113. snowflake/cli/api/identifiers.py +41 -9
  114. snowflake/cli/api/project/definition.py +37 -6
  115. snowflake/cli/api/project/definition_conversion.py +194 -0
  116. snowflake/cli/api/project/definition_manager.py +12 -1
  117. snowflake/cli/api/project/project_verification.py +3 -3
  118. snowflake/cli/api/project/schemas/entities/{application_entity.py → application_entity_model.py} +21 -9
  119. snowflake/cli/api/project/schemas/entities/{application_package_entity.py → application_package_entity_model.py} +43 -15
  120. snowflake/cli/api/project/schemas/entities/common.py +80 -6
  121. snowflake/cli/api/project/schemas/entities/entities.py +38 -8
  122. snowflake/cli/api/project/schemas/entities/snowpark_entity.py +176 -0
  123. snowflake/cli/api/project/schemas/entities/streamlit_entity_model.py +73 -0
  124. snowflake/cli/api/project/schemas/identifier_model.py +10 -1
  125. snowflake/cli/api/project/schemas/native_app/application.py +8 -9
  126. snowflake/cli/api/project/schemas/native_app/package.py +7 -1
  127. snowflake/cli/api/project/schemas/project_definition.py +98 -27
  128. snowflake/cli/api/project/schemas/updatable_model.py +11 -3
  129. snowflake/cli/api/project/util.py +23 -6
  130. snowflake/cli/api/rendering/jinja.py +14 -8
  131. snowflake/cli/api/rendering/project_definition_templates.py +1 -1
  132. snowflake/cli/api/rendering/sql_templates.py +43 -11
  133. snowflake/cli/api/secure_path.py +16 -18
  134. snowflake/cli/api/secure_utils.py +90 -1
  135. snowflake/cli/api/sql_execution.py +48 -19
  136. snowflake/cli/api/utils/definition_rendering.py +18 -8
  137. {snowflake_cli_labs-2.8.0rc1.dist-info → snowflake_cli_labs-3.0.0rc1.dist-info}/METADATA +13 -13
  138. snowflake_cli_labs-3.0.0rc1.dist-info/RECORD +236 -0
  139. snowflake_cli_labs-3.0.0rc1.dist-info/entry_points.txt +2 -0
  140. snowflake/cli/api/commands/project_initialisation.py +0 -65
  141. snowflake/cli/app/build_and_push.sh +0 -8
  142. snowflake/cli/plugins/nativeapp/codegen/setup/native_app_setup_processor.py +0 -172
  143. snowflake/cli/plugins/nativeapp/manager.py +0 -823
  144. snowflake/cli/plugins/object_stage_deprecated/__init__.py +0 -15
  145. snowflake/cli/plugins/object_stage_deprecated/commands.py +0 -122
  146. snowflake/cli/plugins/object_stage_deprecated/plugin_spec.py +0 -32
  147. snowflake/cli/plugins/snowpark/commands.py +0 -548
  148. snowflake/cli/plugins/snowpark/common.py +0 -307
  149. snowflake/cli/plugins/snowpark/manager.py +0 -109
  150. snowflake/cli/plugins/snowpark/plugin_spec.py +0 -30
  151. snowflake/cli/plugins/snowpark/snowpark_package_paths.py +0 -65
  152. snowflake/cli/plugins/spcs/jobs/commands.py +0 -78
  153. snowflake/cli/plugins/spcs/jobs/manager.py +0 -53
  154. snowflake/cli/plugins/streamlit/plugin_spec.py +0 -30
  155. snowflake/cli/plugins/workspace/commands.py +0 -35
  156. snowflake/cli/templates/default_snowpark/.gitignore +0 -4
  157. snowflake/cli/templates/default_snowpark/app/__init__.py +0 -0
  158. snowflake/cli/templates/default_snowpark/app/common.py +0 -2
  159. snowflake/cli/templates/default_snowpark/app/functions.py +0 -15
  160. snowflake/cli/templates/default_snowpark/app/procedures.py +0 -22
  161. snowflake/cli/templates/default_snowpark/requirements.txt +0 -1
  162. snowflake/cli/templates/default_snowpark/snowflake.yml +0 -23
  163. snowflake/cli/templates/default_streamlit/.gitignore +0 -4
  164. snowflake/cli/templates/default_streamlit/common/hello.py +0 -2
  165. snowflake/cli/templates/default_streamlit/environment.yml +0 -6
  166. snowflake/cli/templates/default_streamlit/pages/my_page.py +0 -3
  167. snowflake/cli/templates/default_streamlit/snowflake.yml +0 -10
  168. snowflake/cli/templates/default_streamlit/streamlit_app.py +0 -4
  169. snowflake_cli_labs-2.8.0rc1.dist-info/RECORD +0 -240
  170. snowflake_cli_labs-2.8.0rc1.dist-info/entry_points.txt +0 -2
  171. /snowflake/cli/{app → _app}/__init__.py +0 -0
  172. /snowflake/cli/{app → _app}/api_impl/__init__.py +0 -0
  173. /snowflake/cli/{app → _app}/api_impl/plugin/__init__.py +0 -0
  174. /snowflake/cli/{app → _app}/api_impl/plugin/plugin_config_provider_impl.py +0 -0
  175. /snowflake/cli/{app → _app}/commands_registration/__init__.py +0 -0
  176. /snowflake/cli/{app → _app}/commands_registration/threadsafe.py +0 -0
  177. /snowflake/cli/{app → _app}/constants.py +0 -0
  178. /snowflake/cli/{app → _app}/dev/__init__.py +0 -0
  179. /snowflake/cli/{app → _app}/dev/commands_structure.py +0 -0
  180. /snowflake/cli/{app → _app}/dev/docs/__init__.py +0 -0
  181. /snowflake/cli/{app → _app}/dev/docs/project_definition_generate_json_schema.py +0 -0
  182. /snowflake/cli/{app → _app}/dev/docs/template_utils.py +0 -0
  183. /snowflake/cli/{app → _app}/dev/docs/templates/definition_description.rst.jinja2 +0 -0
  184. /snowflake/cli/{app → _app}/dev/docs/templates/overview.rst.jinja2 +0 -0
  185. /snowflake/cli/{app → _app}/dev/pycharm_remote_debug.py +0 -0
  186. /snowflake/cli/{app → _app}/loggers.py +0 -0
  187. /snowflake/cli/{plugins → _plugins}/__init__.py +0 -0
  188. /snowflake/cli/{plugins → _plugins}/connection/__init__.py +0 -0
  189. /snowflake/cli/{plugins → _plugins}/cortex/__init__.py +0 -0
  190. /snowflake/cli/{plugins → _plugins}/cortex/types.py +0 -0
  191. /snowflake/cli/{plugins → _plugins}/git/__init__.py +0 -0
  192. /snowflake/cli/{plugins → _plugins}/init/__init__.py +0 -0
  193. /snowflake/cli/{plugins → _plugins}/nativeapp/__init__.py +0 -0
  194. /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/__init__.py +0 -0
  195. /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/sandbox.py +0 -0
  196. /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/callback_source.py.jinja +0 -0
  197. /snowflake/cli/{plugins → _plugins}/nativeapp/codegen/snowpark/models.py +0 -0
  198. /snowflake/cli/{plugins → _plugins}/nativeapp/constants.py +0 -0
  199. /snowflake/cli/{plugins → _plugins}/nativeapp/feature_flags.py +0 -0
  200. /snowflake/cli/{plugins → _plugins}/nativeapp/policy.py +0 -0
  201. /snowflake/cli/{plugins → _plugins}/nativeapp/utils.py +0 -0
  202. /snowflake/cli/{plugins → _plugins}/nativeapp/version/__init__.py +0 -0
  203. /snowflake/cli/{plugins → _plugins}/notebook/__init__.py +0 -0
  204. /snowflake/cli/{plugins → _plugins}/notebook/exceptions.py +0 -0
  205. /snowflake/cli/{plugins → _plugins}/object/__init__.py +0 -0
  206. /snowflake/cli/{plugins → _plugins}/object/common.py +0 -0
  207. /snowflake/cli/{plugins → _plugins}/snowpark/__init__.py +0 -0
  208. /snowflake/cli/{plugins → _plugins}/snowpark/package/__init__.py +0 -0
  209. /snowflake/cli/{plugins → _plugins}/snowpark/package/utils.py +0 -0
  210. /snowflake/cli/{plugins → _plugins}/spcs/common.py +0 -0
  211. /snowflake/cli/{plugins → _plugins}/spcs/compute_pool/__init__.py +0 -0
  212. /snowflake/cli/{plugins → _plugins}/spcs/image_registry/__init__.py +0 -0
  213. /snowflake/cli/{plugins → _plugins}/spcs/image_registry/manager.py +0 -0
  214. /snowflake/cli/{plugins → _plugins}/spcs/image_repository/__init__.py +0 -0
  215. /snowflake/cli/{plugins/spcs/jobs → _plugins/spcs/services}/__init__.py +0 -0
  216. /snowflake/cli/{plugins/spcs/services → _plugins/sql}/__init__.py +0 -0
  217. /snowflake/cli/{plugins → _plugins}/sql/snowsql_templating.py +0 -0
  218. /snowflake/cli/{plugins/sql → _plugins/stage}/__init__.py +0 -0
  219. /snowflake/cli/{plugins → _plugins}/stage/md5.py +0 -0
  220. /snowflake/cli/{plugins/stage → _plugins/streamlit}/__init__.py +0 -0
  221. /snowflake/cli/{plugins/streamlit → _plugins/workspace}/__init__.py +0 -0
  222. /snowflake/cli/{plugins/workspace → api/project/schemas/entities}/__init__.py +0 -0
  223. {snowflake_cli_labs-2.8.0rc1.dist-info → snowflake_cli_labs-3.0.0rc1.dist-info}/WHEEL +0 -0
  224. {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.app.telemetry import log_command_usage
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.app.printing import print_result
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.app.telemetry import log_command_execution_error
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.app.telemetry import flush_telemetry, log_command_result
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 cli_context_manager
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
- cli_context_manager.add_typer_pre_execute_commands(command)
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 cli_context_manager.typer_pre_execute_commands:
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
@@ -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 file_permissions_are_strict
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
- private_key_path: Optional[str] = None
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.app.loggers import create_initial_loggers
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):
@@ -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 _CliGlobalContextAccess, cli_context
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 = cli_context
45
+ self._cli_context = get_cli_context()
43
46
  self._in_phase = False
44
47
 
45
48
  @property
@@ -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