snowflake-cli-labs 3.0.0rc5__py3-none-any.whl → 3.0.2__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 (244) hide show
  1. README.md +21 -0
  2. {snowflake_cli_labs-3.0.0rc5.dist-info → snowflake_cli_labs-3.0.2.dist-info}/METADATA +6 -96
  3. snowflake_cli_labs-3.0.2.dist-info/RECORD +5 -0
  4. snowflake/cli/__about__.py +0 -17
  5. snowflake/cli/__init__.py +0 -13
  6. snowflake/cli/_app/__init__.py +0 -22
  7. snowflake/cli/_app/__main__.py +0 -31
  8. snowflake/cli/_app/api_impl/__init__.py +0 -13
  9. snowflake/cli/_app/api_impl/plugin/__init__.py +0 -13
  10. snowflake/cli/_app/api_impl/plugin/plugin_config_provider_impl.py +0 -66
  11. snowflake/cli/_app/cli_app.py +0 -252
  12. snowflake/cli/_app/commands_registration/__init__.py +0 -33
  13. snowflake/cli/_app/commands_registration/builtin_plugins.py +0 -50
  14. snowflake/cli/_app/commands_registration/command_plugins_loader.py +0 -169
  15. snowflake/cli/_app/commands_registration/commands_registration_with_callbacks.py +0 -105
  16. snowflake/cli/_app/commands_registration/exception_logging.py +0 -26
  17. snowflake/cli/_app/commands_registration/threadsafe.py +0 -48
  18. snowflake/cli/_app/commands_registration/typer_registration.py +0 -153
  19. snowflake/cli/_app/constants.py +0 -19
  20. snowflake/cli/_app/dev/__init__.py +0 -13
  21. snowflake/cli/_app/dev/commands_structure.py +0 -48
  22. snowflake/cli/_app/dev/docs/__init__.py +0 -13
  23. snowflake/cli/_app/dev/docs/commands_docs_generator.py +0 -118
  24. snowflake/cli/_app/dev/docs/generator.py +0 -35
  25. snowflake/cli/_app/dev/docs/project_definition_docs_generator.py +0 -58
  26. snowflake/cli/_app/dev/docs/project_definition_generate_json_schema.py +0 -227
  27. snowflake/cli/_app/dev/docs/template_utils.py +0 -23
  28. snowflake/cli/_app/dev/docs/templates/definition_description.rst.jinja2 +0 -38
  29. snowflake/cli/_app/dev/docs/templates/overview.rst.jinja2 +0 -9
  30. snowflake/cli/_app/dev/docs/templates/usage.rst.jinja2 +0 -67
  31. snowflake/cli/_app/dev/pycharm_remote_debug.py +0 -46
  32. snowflake/cli/_app/loggers.py +0 -199
  33. snowflake/cli/_app/main_typer.py +0 -62
  34. snowflake/cli/_app/printing.py +0 -181
  35. snowflake/cli/_app/secret.py +0 -9
  36. snowflake/cli/_app/snow_connector.py +0 -309
  37. snowflake/cli/_app/telemetry.py +0 -220
  38. snowflake/cli/_app/version_check.py +0 -74
  39. snowflake/cli/_plugins/__init__.py +0 -13
  40. snowflake/cli/_plugins/connection/__init__.py +0 -13
  41. snowflake/cli/_plugins/connection/commands.py +0 -353
  42. snowflake/cli/_plugins/connection/plugin_spec.py +0 -30
  43. snowflake/cli/_plugins/connection/util.py +0 -195
  44. snowflake/cli/_plugins/cortex/__init__.py +0 -13
  45. snowflake/cli/_plugins/cortex/commands.py +0 -332
  46. snowflake/cli/_plugins/cortex/constants.py +0 -17
  47. snowflake/cli/_plugins/cortex/manager.py +0 -189
  48. snowflake/cli/_plugins/cortex/plugin_spec.py +0 -30
  49. snowflake/cli/_plugins/cortex/types.py +0 -22
  50. snowflake/cli/_plugins/git/__init__.py +0 -13
  51. snowflake/cli/_plugins/git/commands.py +0 -358
  52. snowflake/cli/_plugins/git/manager.py +0 -151
  53. snowflake/cli/_plugins/git/plugin_spec.py +0 -30
  54. snowflake/cli/_plugins/helpers/__init__.py +0 -13
  55. snowflake/cli/_plugins/helpers/commands.py +0 -90
  56. snowflake/cli/_plugins/helpers/plugin_spec.py +0 -30
  57. snowflake/cli/_plugins/init/__init__.py +0 -13
  58. snowflake/cli/_plugins/init/commands.py +0 -248
  59. snowflake/cli/_plugins/init/plugin_spec.py +0 -30
  60. snowflake/cli/_plugins/nativeapp/__init__.py +0 -13
  61. snowflake/cli/_plugins/nativeapp/artifacts.py +0 -757
  62. snowflake/cli/_plugins/nativeapp/bundle_context.py +0 -31
  63. snowflake/cli/_plugins/nativeapp/codegen/__init__.py +0 -13
  64. snowflake/cli/_plugins/nativeapp/codegen/artifact_processor.py +0 -91
  65. snowflake/cli/_plugins/nativeapp/codegen/compiler.py +0 -149
  66. snowflake/cli/_plugins/nativeapp/codegen/sandbox.py +0 -306
  67. snowflake/cli/_plugins/nativeapp/codegen/setup/native_app_setup_processor.py +0 -249
  68. snowflake/cli/_plugins/nativeapp/codegen/setup/setup_driver.py.source +0 -59
  69. snowflake/cli/_plugins/nativeapp/codegen/snowpark/callback_source.py.jinja +0 -181
  70. snowflake/cli/_plugins/nativeapp/codegen/snowpark/extension_function_utils.py +0 -217
  71. snowflake/cli/_plugins/nativeapp/codegen/snowpark/models.py +0 -61
  72. snowflake/cli/_plugins/nativeapp/codegen/snowpark/python_processor.py +0 -523
  73. snowflake/cli/_plugins/nativeapp/codegen/templates/templates_processor.py +0 -114
  74. snowflake/cli/_plugins/nativeapp/commands.py +0 -559
  75. snowflake/cli/_plugins/nativeapp/common_flags.py +0 -44
  76. snowflake/cli/_plugins/nativeapp/constants.py +0 -27
  77. snowflake/cli/_plugins/nativeapp/entities/__init__.py +0 -0
  78. snowflake/cli/_plugins/nativeapp/entities/application.py +0 -878
  79. snowflake/cli/_plugins/nativeapp/entities/application_package.py +0 -1392
  80. snowflake/cli/_plugins/nativeapp/exceptions.py +0 -113
  81. snowflake/cli/_plugins/nativeapp/feature_flags.py +0 -24
  82. snowflake/cli/_plugins/nativeapp/manager.py +0 -415
  83. snowflake/cli/_plugins/nativeapp/plugin_spec.py +0 -30
  84. snowflake/cli/_plugins/nativeapp/policy.py +0 -53
  85. snowflake/cli/_plugins/nativeapp/project_model.py +0 -211
  86. snowflake/cli/_plugins/nativeapp/run_processor.py +0 -184
  87. snowflake/cli/_plugins/nativeapp/same_account_install_method.py +0 -70
  88. snowflake/cli/_plugins/nativeapp/teardown_processor.py +0 -70
  89. snowflake/cli/_plugins/nativeapp/utils.py +0 -98
  90. snowflake/cli/_plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py +0 -262
  91. snowflake/cli/_plugins/nativeapp/version/__init__.py +0 -13
  92. snowflake/cli/_plugins/nativeapp/version/commands.py +0 -141
  93. snowflake/cli/_plugins/nativeapp/version/version_processor.py +0 -98
  94. snowflake/cli/_plugins/notebook/__init__.py +0 -13
  95. snowflake/cli/_plugins/notebook/commands.py +0 -86
  96. snowflake/cli/_plugins/notebook/exceptions.py +0 -20
  97. snowflake/cli/_plugins/notebook/manager.py +0 -71
  98. snowflake/cli/_plugins/notebook/plugin_spec.py +0 -30
  99. snowflake/cli/_plugins/notebook/types.py +0 -15
  100. snowflake/cli/_plugins/object/__init__.py +0 -13
  101. snowflake/cli/_plugins/object/command_aliases.py +0 -95
  102. snowflake/cli/_plugins/object/commands.py +0 -180
  103. snowflake/cli/_plugins/object/common.py +0 -85
  104. snowflake/cli/_plugins/object/manager.py +0 -118
  105. snowflake/cli/_plugins/object/plugin_spec.py +0 -30
  106. snowflake/cli/_plugins/snowpark/__init__.py +0 -13
  107. snowflake/cli/_plugins/snowpark/commands.py +0 -450
  108. snowflake/cli/_plugins/snowpark/common.py +0 -268
  109. snowflake/cli/_plugins/snowpark/models.py +0 -150
  110. snowflake/cli/_plugins/snowpark/package/__init__.py +0 -13
  111. snowflake/cli/_plugins/snowpark/package/anaconda_packages.py +0 -199
  112. snowflake/cli/_plugins/snowpark/package/commands.py +0 -195
  113. snowflake/cli/_plugins/snowpark/package/manager.py +0 -44
  114. snowflake/cli/_plugins/snowpark/package/utils.py +0 -26
  115. snowflake/cli/_plugins/snowpark/package_utils.py +0 -354
  116. snowflake/cli/_plugins/snowpark/plugin_spec.py +0 -30
  117. snowflake/cli/_plugins/snowpark/snowpark_entity.py +0 -29
  118. snowflake/cli/_plugins/snowpark/snowpark_entity_model.py +0 -173
  119. snowflake/cli/_plugins/snowpark/snowpark_project_paths.py +0 -109
  120. snowflake/cli/_plugins/snowpark/snowpark_shared.py +0 -59
  121. snowflake/cli/_plugins/snowpark/zipper.py +0 -89
  122. snowflake/cli/_plugins/spcs/__init__.py +0 -33
  123. snowflake/cli/_plugins/spcs/common.py +0 -99
  124. snowflake/cli/_plugins/spcs/compute_pool/__init__.py +0 -13
  125. snowflake/cli/_plugins/spcs/compute_pool/commands.py +0 -241
  126. snowflake/cli/_plugins/spcs/compute_pool/manager.py +0 -121
  127. snowflake/cli/_plugins/spcs/image_registry/__init__.py +0 -13
  128. snowflake/cli/_plugins/spcs/image_registry/commands.py +0 -65
  129. snowflake/cli/_plugins/spcs/image_registry/manager.py +0 -105
  130. snowflake/cli/_plugins/spcs/image_repository/__init__.py +0 -13
  131. snowflake/cli/_plugins/spcs/image_repository/commands.py +0 -202
  132. snowflake/cli/_plugins/spcs/image_repository/manager.py +0 -84
  133. snowflake/cli/_plugins/spcs/plugin_spec.py +0 -30
  134. snowflake/cli/_plugins/spcs/services/__init__.py +0 -13
  135. snowflake/cli/_plugins/spcs/services/commands.py +0 -345
  136. snowflake/cli/_plugins/spcs/services/manager.py +0 -208
  137. snowflake/cli/_plugins/sql/__init__.py +0 -13
  138. snowflake/cli/_plugins/sql/commands.py +0 -86
  139. snowflake/cli/_plugins/sql/manager.py +0 -92
  140. snowflake/cli/_plugins/sql/plugin_spec.py +0 -30
  141. snowflake/cli/_plugins/sql/snowsql_templating.py +0 -28
  142. snowflake/cli/_plugins/stage/__init__.py +0 -13
  143. snowflake/cli/_plugins/stage/commands.py +0 -264
  144. snowflake/cli/_plugins/stage/diff.py +0 -280
  145. snowflake/cli/_plugins/stage/manager.py +0 -582
  146. snowflake/cli/_plugins/stage/md5.py +0 -160
  147. snowflake/cli/_plugins/stage/plugin_spec.py +0 -30
  148. snowflake/cli/_plugins/stage/utils.py +0 -54
  149. snowflake/cli/_plugins/streamlit/__init__.py +0 -13
  150. snowflake/cli/_plugins/streamlit/commands.py +0 -195
  151. snowflake/cli/_plugins/streamlit/manager.py +0 -220
  152. snowflake/cli/_plugins/streamlit/plugin_spec.py +0 -30
  153. snowflake/cli/_plugins/streamlit/streamlit_entity.py +0 -12
  154. snowflake/cli/_plugins/streamlit/streamlit_entity_model.py +0 -66
  155. snowflake/cli/_plugins/workspace/__init__.py +0 -13
  156. snowflake/cli/_plugins/workspace/action_context.py +0 -18
  157. snowflake/cli/_plugins/workspace/commands.py +0 -306
  158. snowflake/cli/_plugins/workspace/manager.py +0 -74
  159. snowflake/cli/_plugins/workspace/plugin_spec.py +0 -30
  160. snowflake/cli/api/__init__.py +0 -48
  161. snowflake/cli/api/cli_global_context.py +0 -247
  162. snowflake/cli/api/commands/__init__.py +0 -13
  163. snowflake/cli/api/commands/alias.py +0 -23
  164. snowflake/cli/api/commands/common.py +0 -25
  165. snowflake/cli/api/commands/decorators.py +0 -369
  166. snowflake/cli/api/commands/execution_metadata.py +0 -40
  167. snowflake/cli/api/commands/experimental_behaviour.py +0 -18
  168. snowflake/cli/api/commands/flags.py +0 -561
  169. snowflake/cli/api/commands/overrideable_parameter.py +0 -143
  170. snowflake/cli/api/commands/snow_typer.py +0 -247
  171. snowflake/cli/api/commands/utils.py +0 -18
  172. snowflake/cli/api/config.py +0 -380
  173. snowflake/cli/api/connections.py +0 -216
  174. snowflake/cli/api/console/__init__.py +0 -17
  175. snowflake/cli/api/console/abc.py +0 -94
  176. snowflake/cli/api/console/console.py +0 -134
  177. snowflake/cli/api/console/enum.py +0 -17
  178. snowflake/cli/api/constants.py +0 -90
  179. snowflake/cli/api/entities/common.py +0 -56
  180. snowflake/cli/api/entities/utils.py +0 -370
  181. snowflake/cli/api/errno.py +0 -28
  182. snowflake/cli/api/exceptions.py +0 -190
  183. snowflake/cli/api/feature_flags.py +0 -54
  184. snowflake/cli/api/identifiers.py +0 -190
  185. snowflake/cli/api/metrics.py +0 -92
  186. snowflake/cli/api/output/__init__.py +0 -13
  187. snowflake/cli/api/output/formats.py +0 -20
  188. snowflake/cli/api/output/types.py +0 -118
  189. snowflake/cli/api/plugins/__init__.py +0 -13
  190. snowflake/cli/api/plugins/command/__init__.py +0 -72
  191. snowflake/cli/api/plugins/command/plugin_hook_specs.py +0 -21
  192. snowflake/cli/api/plugins/plugin_config.py +0 -32
  193. snowflake/cli/api/project/__init__.py +0 -13
  194. snowflake/cli/api/project/definition.py +0 -126
  195. snowflake/cli/api/project/definition_conversion.py +0 -400
  196. snowflake/cli/api/project/definition_manager.py +0 -145
  197. snowflake/cli/api/project/errors.py +0 -56
  198. snowflake/cli/api/project/project_verification.py +0 -23
  199. snowflake/cli/api/project/schemas/__init__.py +0 -13
  200. snowflake/cli/api/project/schemas/entities/__init__.py +0 -13
  201. snowflake/cli/api/project/schemas/entities/common.py +0 -153
  202. snowflake/cli/api/project/schemas/entities/entities.py +0 -61
  203. snowflake/cli/api/project/schemas/project_definition.py +0 -330
  204. snowflake/cli/api/project/schemas/template.py +0 -77
  205. snowflake/cli/api/project/schemas/updatable_model.py +0 -202
  206. snowflake/cli/api/project/schemas/v1/__init__.py +0 -0
  207. snowflake/cli/api/project/schemas/v1/identifier_model.py +0 -51
  208. snowflake/cli/api/project/schemas/v1/native_app/__init__.py +0 -0
  209. snowflake/cli/api/project/schemas/v1/native_app/application.py +0 -61
  210. snowflake/cli/api/project/schemas/v1/native_app/native_app.py +0 -93
  211. snowflake/cli/api/project/schemas/v1/native_app/package.py +0 -84
  212. snowflake/cli/api/project/schemas/v1/native_app/path_mapping.py +0 -65
  213. snowflake/cli/api/project/schemas/v1/snowpark/__init__.py +0 -0
  214. snowflake/cli/api/project/schemas/v1/snowpark/argument.py +0 -28
  215. snowflake/cli/api/project/schemas/v1/snowpark/callable.py +0 -69
  216. snowflake/cli/api/project/schemas/v1/snowpark/snowpark.py +0 -36
  217. snowflake/cli/api/project/schemas/v1/streamlit/__init__.py +0 -0
  218. snowflake/cli/api/project/schemas/v1/streamlit/streamlit.py +0 -47
  219. snowflake/cli/api/project/util.py +0 -278
  220. snowflake/cli/api/rendering/__init__.py +0 -13
  221. snowflake/cli/api/rendering/jinja.py +0 -118
  222. snowflake/cli/api/rendering/project_definition_templates.py +0 -43
  223. snowflake/cli/api/rendering/project_templates.py +0 -98
  224. snowflake/cli/api/rendering/sql_templates.py +0 -105
  225. snowflake/cli/api/rest_api.py +0 -178
  226. snowflake/cli/api/sanitizers.py +0 -43
  227. snowflake/cli/api/secure_path.py +0 -360
  228. snowflake/cli/api/secure_utils.py +0 -118
  229. snowflake/cli/api/sql_execution.py +0 -280
  230. snowflake/cli/api/utils/__init__.py +0 -13
  231. snowflake/cli/api/utils/cursor.py +0 -34
  232. snowflake/cli/api/utils/definition_rendering.py +0 -415
  233. snowflake/cli/api/utils/dict_utils.py +0 -73
  234. snowflake/cli/api/utils/error_handling.py +0 -23
  235. snowflake/cli/api/utils/graph.py +0 -97
  236. snowflake/cli/api/utils/models.py +0 -63
  237. snowflake/cli/api/utils/naming_utils.py +0 -13
  238. snowflake/cli/api/utils/path_utils.py +0 -36
  239. snowflake/cli/api/utils/templating_functions.py +0 -144
  240. snowflake/cli/api/utils/types.py +0 -35
  241. snowflake_cli_labs-3.0.0rc5.dist-info/RECORD +0 -242
  242. snowflake_cli_labs-3.0.0rc5.dist-info/entry_points.txt +0 -2
  243. {snowflake_cli_labs-3.0.0rc5.dist-info → snowflake_cli_labs-3.0.2.dist-info}/WHEEL +0 -0
  244. {snowflake_cli_labs-3.0.0rc5.dist-info → snowflake_cli_labs-3.0.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,217 +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.
14
-
15
- from __future__ import annotations
16
-
17
- import ast
18
- from typing import (
19
- List,
20
- Optional,
21
- Sequence,
22
- Union,
23
- )
24
-
25
- from click.exceptions import ClickException
26
- from snowflake.cli._plugins.nativeapp.codegen.snowpark.models import (
27
- ExtensionFunctionTypeEnum,
28
- NativeAppExtensionFunction,
29
- )
30
- from snowflake.cli.api.project.schemas.v1.snowpark.argument import Argument
31
- from snowflake.cli.api.project.util import (
32
- is_valid_identifier,
33
- is_valid_string_literal,
34
- to_identifier,
35
- to_string_literal,
36
- )
37
-
38
- ASTDefNode = Union[ast.FunctionDef, ast.ClassDef]
39
-
40
-
41
- class MalformedExtensionFunctionError(ClickException):
42
- """Required extension function attribute is missing."""
43
-
44
- def __init__(self, message: str):
45
- super().__init__(message=message)
46
-
47
-
48
- def get_sql_object_type(extension_fn: NativeAppExtensionFunction) -> Optional[str]:
49
- if extension_fn.function_type == ExtensionFunctionTypeEnum.PROCEDURE:
50
- return "PROCEDURE"
51
- elif extension_fn.function_type in (
52
- ExtensionFunctionTypeEnum.FUNCTION,
53
- ExtensionFunctionTypeEnum.TABLE_FUNCTION,
54
- ):
55
- return "FUNCTION"
56
- elif extension_fn.function_type == extension_fn.function_type.AGGREGATE_FUNCTION:
57
- return "AGGREGATE FUNCTION"
58
- else:
59
- return None
60
-
61
-
62
- def get_sql_argument_signature(arg: Argument) -> str:
63
- formatted = f"{arg.name} {arg.arg_type}"
64
- if arg.default is not None:
65
- formatted = f"{formatted} DEFAULT {arg.default}"
66
- return formatted
67
-
68
-
69
- def get_function_type_signature_for_grant(
70
- extension_fn: NativeAppExtensionFunction,
71
- ) -> str:
72
- """
73
- Returns the type signature for the specified function, e.g. "int, varchar", suitable for inclusion in a GRANT statement.
74
- """
75
- return ", ".join([arg.arg_type for arg in extension_fn.signature])
76
-
77
-
78
- def get_qualified_object_name(extension_fn: NativeAppExtensionFunction) -> str:
79
- qualified_name = to_identifier(extension_fn.name)
80
- if extension_fn.schema_name:
81
- if is_valid_identifier(extension_fn.schema_name):
82
- qualified_name = f"{extension_fn.schema_name}.{qualified_name}"
83
- else:
84
- full_schema = ".".join(
85
- [
86
- to_identifier(schema_part)
87
- for schema_part in extension_fn.schema_name.split(".")
88
- ]
89
- )
90
- qualified_name = f"{full_schema}.{qualified_name}"
91
-
92
- return qualified_name
93
-
94
-
95
- def ensure_string_literal(value: str) -> str:
96
- """
97
- Returns the string literal representation of the given value, or the value itself if
98
- it was already a valid string literal.
99
- """
100
- if is_valid_string_literal(value):
101
- return value
102
- return to_string_literal(value)
103
-
104
-
105
- def ensure_all_string_literals(values: Sequence[str]) -> List[str]:
106
- """
107
- Ensures that all provided values are valid string literals.
108
-
109
- Returns:
110
- A list with all values transformed to be valid string literals (as necessary).
111
- """
112
- return [ensure_string_literal(value) for value in values]
113
-
114
-
115
- class _SnowparkHandlerAccumulator(ast.NodeVisitor):
116
- """
117
- A NodeVisitor that collects AST nodes corresponding to a provided list of Snowpark external functions.
118
- The returned nodes are filtered using the handlers provided for each of the Snowpark functions.
119
- Returned definitions can be either function definition or class definition AST nodes.
120
- """
121
-
122
- def __init__(self, functions: Sequence[NativeAppExtensionFunction]):
123
- self._wanted_handlers_by_name = {
124
- fn.handler.split(".")[-1]: fn for fn in functions
125
- }
126
- self.definitions: List[ASTDefNode] = []
127
-
128
- def visit_FunctionDef(self, node: ast.FunctionDef): # noqa: N802
129
- if self._want(node):
130
- self.definitions.append(node)
131
- self.generic_visit(node)
132
-
133
- def visit_ClassDef(self, node: ast.ClassDef): # noqa: N802
134
- if self._want(node):
135
- self.definitions.append(node)
136
- self.generic_visit(node)
137
-
138
- def _want(self, node: ASTDefNode) -> bool:
139
- if not node.decorator_list:
140
- # No decorators for this definition, ignore it
141
- return False
142
-
143
- return node.name in self._wanted_handlers_by_name
144
-
145
-
146
- def _get_decorator_id(node: ast.AST) -> Optional[str]:
147
- """
148
- Returns the fully qualified identifier for a decorator, e.g. "foo" or "foo.bar".
149
- """
150
- if isinstance(node, ast.Name):
151
- return node.id
152
- elif isinstance(node, ast.Attribute):
153
- return f"{_get_decorator_id(node.value)}.{node.attr}"
154
- elif isinstance(node, ast.Call):
155
- return _get_decorator_id(node.func)
156
- else:
157
- return None
158
-
159
-
160
- def _collect_ast_handler_definitions(
161
- tree: ast.AST, extension_functions: Sequence[NativeAppExtensionFunction]
162
- ) -> Sequence[ASTDefNode]:
163
- accumulator = _SnowparkHandlerAccumulator(extension_functions)
164
- accumulator.visit(tree)
165
- return accumulator.definitions
166
-
167
-
168
- def deannotate_module_source(
169
- module_source: str,
170
- extension_functions: Sequence[NativeAppExtensionFunction],
171
- annotations_to_preserve: Sequence[str] = (),
172
- ) -> str:
173
- """
174
- Removes annotations from a set of specified extension functions.
175
-
176
- Arguments:
177
- module_source (str): The source code of the module to deannotate.
178
- extension_functions (Sequence[NativeAppExtensionFunction]): The list of extension functions
179
- to deannotate. Other functions encountered will be ignored.
180
- annotations_to_preserve (Sequence[str], optional): The list of annotations to preserve. The
181
- names should appear as they are found in the source code, e.g. "foo" for @foo or
182
- "annotations.bar" for @annotations.bar.
183
-
184
- Returns:
185
- A de-annotated version of the module source if any match was found. In order to preserve
186
- line numbers, annotations are simply commented out instead of completely removed.
187
- """
188
-
189
- tree = ast.parse(module_source)
190
-
191
- definitions = _collect_ast_handler_definitions(tree, extension_functions)
192
- if not definitions:
193
- return module_source
194
-
195
- module_lines = module_source.splitlines()
196
- for definition in definitions:
197
- # Comment out all decorators. As per the python grammar, decorators must be terminated by a
198
- # new line, so the line ranges can't overlap.
199
- for decorator in definition.decorator_list:
200
- decorator_id = _get_decorator_id(decorator)
201
- if decorator_id is None:
202
- continue
203
- if annotations_to_preserve and decorator_id in annotations_to_preserve:
204
- continue
205
-
206
- # AST indices are 1-based
207
- start_lineno = decorator.lineno - 1
208
- if decorator.end_lineno is not None:
209
- end_lineno = decorator.end_lineno - 1
210
- else:
211
- end_lineno = start_lineno
212
-
213
- for lineno in range(start_lineno, end_lineno + 1):
214
- module_lines[lineno] = "#: " + module_lines[lineno]
215
-
216
- # we're writing files in text mode, so we should use '\n' regardless of the platform
217
- return "\n".join(module_lines)
@@ -1,61 +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.
14
-
15
- from __future__ import annotations
16
-
17
- from enum import Enum
18
- from typing import List, Optional
19
-
20
- from pydantic import Field
21
- from snowflake.cli.api.project.schemas.updatable_model import IdentifierField
22
- from snowflake.cli.api.project.schemas.v1.snowpark.callable import _CallableBase
23
-
24
-
25
- class ExtensionFunctionTypeEnum(str, Enum):
26
- PROCEDURE = "procedure"
27
- FUNCTION = "function"
28
- TABLE_FUNCTION = "table function"
29
- AGGREGATE_FUNCTION = "aggregate function"
30
-
31
-
32
- class NativeAppExtensionFunction(_CallableBase):
33
- function_type: ExtensionFunctionTypeEnum = Field(
34
- title="The type of extension function, one of 'procedure', 'function', 'table function' or 'aggregate function'",
35
- alias="type",
36
- )
37
- lineno: Optional[int] = Field(
38
- title="The starting line number of the extension function (1-based)",
39
- default=None,
40
- )
41
- name: Optional[str] = Field(
42
- title="The name of the extension function", default=None
43
- )
44
- packages: Optional[List[str]] = Field(
45
- title="List of packages (with optional version constraints) to be loaded for the function",
46
- default=[],
47
- )
48
- schema_name: Optional[str] = IdentifierField(
49
- title=f"Name of the schema for the function",
50
- default=None,
51
- alias="schema",
52
- )
53
- application_roles: Optional[List[str]] = Field(
54
- title="Application roles granted usage to the function",
55
- default=[],
56
- )
57
- execute_as_caller: Optional[bool] = Field(
58
- title="Determine whether the procedure is executed with the privileges of "
59
- "the owner or with the privileges of the caller",
60
- default=False,
61
- )