snowflake-cli-labs 3.0.0rc4__py3-none-any.whl → 3.0.1__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.
- README.md +21 -0
- {snowflake_cli_labs-3.0.0rc4.dist-info → snowflake_cli_labs-3.0.1.dist-info}/METADATA +6 -96
- snowflake_cli_labs-3.0.1.dist-info/RECORD +5 -0
- snowflake/cli/__about__.py +0 -17
- snowflake/cli/__init__.py +0 -13
- snowflake/cli/_app/__init__.py +0 -22
- snowflake/cli/_app/__main__.py +0 -31
- snowflake/cli/_app/api_impl/__init__.py +0 -13
- snowflake/cli/_app/api_impl/plugin/__init__.py +0 -13
- snowflake/cli/_app/api_impl/plugin/plugin_config_provider_impl.py +0 -66
- snowflake/cli/_app/cli_app.py +0 -252
- snowflake/cli/_app/commands_registration/__init__.py +0 -33
- snowflake/cli/_app/commands_registration/builtin_plugins.py +0 -50
- snowflake/cli/_app/commands_registration/command_plugins_loader.py +0 -169
- snowflake/cli/_app/commands_registration/commands_registration_with_callbacks.py +0 -105
- snowflake/cli/_app/commands_registration/exception_logging.py +0 -26
- snowflake/cli/_app/commands_registration/threadsafe.py +0 -48
- snowflake/cli/_app/commands_registration/typer_registration.py +0 -153
- snowflake/cli/_app/constants.py +0 -19
- snowflake/cli/_app/dev/__init__.py +0 -13
- snowflake/cli/_app/dev/commands_structure.py +0 -48
- snowflake/cli/_app/dev/docs/__init__.py +0 -13
- snowflake/cli/_app/dev/docs/commands_docs_generator.py +0 -118
- snowflake/cli/_app/dev/docs/generator.py +0 -35
- snowflake/cli/_app/dev/docs/project_definition_docs_generator.py +0 -58
- snowflake/cli/_app/dev/docs/project_definition_generate_json_schema.py +0 -227
- snowflake/cli/_app/dev/docs/template_utils.py +0 -23
- snowflake/cli/_app/dev/docs/templates/definition_description.rst.jinja2 +0 -38
- snowflake/cli/_app/dev/docs/templates/overview.rst.jinja2 +0 -9
- snowflake/cli/_app/dev/docs/templates/usage.rst.jinja2 +0 -67
- snowflake/cli/_app/dev/pycharm_remote_debug.py +0 -46
- snowflake/cli/_app/loggers.py +0 -199
- snowflake/cli/_app/main_typer.py +0 -62
- snowflake/cli/_app/printing.py +0 -181
- snowflake/cli/_app/secret.py +0 -9
- snowflake/cli/_app/snow_connector.py +0 -309
- snowflake/cli/_app/telemetry.py +0 -220
- snowflake/cli/_app/version_check.py +0 -74
- snowflake/cli/_plugins/__init__.py +0 -13
- snowflake/cli/_plugins/connection/__init__.py +0 -13
- snowflake/cli/_plugins/connection/commands.py +0 -353
- snowflake/cli/_plugins/connection/plugin_spec.py +0 -30
- snowflake/cli/_plugins/connection/util.py +0 -195
- snowflake/cli/_plugins/cortex/__init__.py +0 -13
- snowflake/cli/_plugins/cortex/commands.py +0 -332
- snowflake/cli/_plugins/cortex/constants.py +0 -17
- snowflake/cli/_plugins/cortex/manager.py +0 -189
- snowflake/cli/_plugins/cortex/plugin_spec.py +0 -30
- snowflake/cli/_plugins/cortex/types.py +0 -22
- snowflake/cli/_plugins/git/__init__.py +0 -13
- snowflake/cli/_plugins/git/commands.py +0 -358
- snowflake/cli/_plugins/git/manager.py +0 -151
- snowflake/cli/_plugins/git/plugin_spec.py +0 -30
- snowflake/cli/_plugins/helpers/__init__.py +0 -13
- snowflake/cli/_plugins/helpers/commands.py +0 -61
- snowflake/cli/_plugins/helpers/plugin_spec.py +0 -30
- snowflake/cli/_plugins/init/__init__.py +0 -13
- snowflake/cli/_plugins/init/commands.py +0 -248
- snowflake/cli/_plugins/init/plugin_spec.py +0 -30
- snowflake/cli/_plugins/nativeapp/__init__.py +0 -13
- snowflake/cli/_plugins/nativeapp/artifacts.py +0 -757
- snowflake/cli/_plugins/nativeapp/bundle_context.py +0 -31
- snowflake/cli/_plugins/nativeapp/codegen/__init__.py +0 -13
- snowflake/cli/_plugins/nativeapp/codegen/artifact_processor.py +0 -91
- snowflake/cli/_plugins/nativeapp/codegen/compiler.py +0 -149
- snowflake/cli/_plugins/nativeapp/codegen/sandbox.py +0 -306
- snowflake/cli/_plugins/nativeapp/codegen/setup/native_app_setup_processor.py +0 -249
- snowflake/cli/_plugins/nativeapp/codegen/setup/setup_driver.py.source +0 -59
- snowflake/cli/_plugins/nativeapp/codegen/snowpark/callback_source.py.jinja +0 -181
- snowflake/cli/_plugins/nativeapp/codegen/snowpark/extension_function_utils.py +0 -217
- snowflake/cli/_plugins/nativeapp/codegen/snowpark/models.py +0 -61
- snowflake/cli/_plugins/nativeapp/codegen/snowpark/python_processor.py +0 -523
- snowflake/cli/_plugins/nativeapp/codegen/templates/templates_processor.py +0 -114
- snowflake/cli/_plugins/nativeapp/commands.py +0 -559
- snowflake/cli/_plugins/nativeapp/common_flags.py +0 -44
- snowflake/cli/_plugins/nativeapp/constants.py +0 -27
- snowflake/cli/_plugins/nativeapp/entities/__init__.py +0 -0
- snowflake/cli/_plugins/nativeapp/entities/application.py +0 -878
- snowflake/cli/_plugins/nativeapp/entities/application_package.py +0 -1392
- snowflake/cli/_plugins/nativeapp/exceptions.py +0 -113
- snowflake/cli/_plugins/nativeapp/feature_flags.py +0 -24
- snowflake/cli/_plugins/nativeapp/manager.py +0 -415
- snowflake/cli/_plugins/nativeapp/plugin_spec.py +0 -30
- snowflake/cli/_plugins/nativeapp/policy.py +0 -53
- snowflake/cli/_plugins/nativeapp/project_model.py +0 -211
- snowflake/cli/_plugins/nativeapp/run_processor.py +0 -184
- snowflake/cli/_plugins/nativeapp/same_account_install_method.py +0 -70
- snowflake/cli/_plugins/nativeapp/teardown_processor.py +0 -70
- snowflake/cli/_plugins/nativeapp/utils.py +0 -98
- snowflake/cli/_plugins/nativeapp/v2_conversions/v2_to_v1_decorator.py +0 -262
- snowflake/cli/_plugins/nativeapp/version/__init__.py +0 -13
- snowflake/cli/_plugins/nativeapp/version/commands.py +0 -141
- snowflake/cli/_plugins/nativeapp/version/version_processor.py +0 -98
- snowflake/cli/_plugins/notebook/__init__.py +0 -13
- snowflake/cli/_plugins/notebook/commands.py +0 -86
- snowflake/cli/_plugins/notebook/exceptions.py +0 -20
- snowflake/cli/_plugins/notebook/manager.py +0 -71
- snowflake/cli/_plugins/notebook/plugin_spec.py +0 -30
- snowflake/cli/_plugins/notebook/types.py +0 -15
- snowflake/cli/_plugins/object/__init__.py +0 -13
- snowflake/cli/_plugins/object/command_aliases.py +0 -95
- snowflake/cli/_plugins/object/commands.py +0 -180
- snowflake/cli/_plugins/object/common.py +0 -85
- snowflake/cli/_plugins/object/manager.py +0 -118
- snowflake/cli/_plugins/object/plugin_spec.py +0 -30
- snowflake/cli/_plugins/snowpark/__init__.py +0 -13
- snowflake/cli/_plugins/snowpark/commands.py +0 -450
- snowflake/cli/_plugins/snowpark/common.py +0 -268
- snowflake/cli/_plugins/snowpark/models.py +0 -150
- snowflake/cli/_plugins/snowpark/package/__init__.py +0 -13
- snowflake/cli/_plugins/snowpark/package/anaconda_packages.py +0 -199
- snowflake/cli/_plugins/snowpark/package/commands.py +0 -195
- snowflake/cli/_plugins/snowpark/package/manager.py +0 -44
- snowflake/cli/_plugins/snowpark/package/utils.py +0 -26
- snowflake/cli/_plugins/snowpark/package_utils.py +0 -354
- snowflake/cli/_plugins/snowpark/plugin_spec.py +0 -30
- snowflake/cli/_plugins/snowpark/snowpark_entity.py +0 -29
- snowflake/cli/_plugins/snowpark/snowpark_entity_model.py +0 -173
- snowflake/cli/_plugins/snowpark/snowpark_project_paths.py +0 -109
- snowflake/cli/_plugins/snowpark/snowpark_shared.py +0 -59
- snowflake/cli/_plugins/snowpark/zipper.py +0 -89
- snowflake/cli/_plugins/spcs/__init__.py +0 -33
- snowflake/cli/_plugins/spcs/common.py +0 -99
- snowflake/cli/_plugins/spcs/compute_pool/__init__.py +0 -13
- snowflake/cli/_plugins/spcs/compute_pool/commands.py +0 -241
- snowflake/cli/_plugins/spcs/compute_pool/manager.py +0 -121
- snowflake/cli/_plugins/spcs/image_registry/__init__.py +0 -13
- snowflake/cli/_plugins/spcs/image_registry/commands.py +0 -65
- snowflake/cli/_plugins/spcs/image_registry/manager.py +0 -105
- snowflake/cli/_plugins/spcs/image_repository/__init__.py +0 -13
- snowflake/cli/_plugins/spcs/image_repository/commands.py +0 -202
- snowflake/cli/_plugins/spcs/image_repository/manager.py +0 -84
- snowflake/cli/_plugins/spcs/plugin_spec.py +0 -30
- snowflake/cli/_plugins/spcs/services/__init__.py +0 -13
- snowflake/cli/_plugins/spcs/services/commands.py +0 -345
- snowflake/cli/_plugins/spcs/services/manager.py +0 -208
- snowflake/cli/_plugins/sql/__init__.py +0 -13
- snowflake/cli/_plugins/sql/commands.py +0 -86
- snowflake/cli/_plugins/sql/manager.py +0 -92
- snowflake/cli/_plugins/sql/plugin_spec.py +0 -30
- snowflake/cli/_plugins/sql/snowsql_templating.py +0 -28
- snowflake/cli/_plugins/stage/__init__.py +0 -13
- snowflake/cli/_plugins/stage/commands.py +0 -264
- snowflake/cli/_plugins/stage/diff.py +0 -280
- snowflake/cli/_plugins/stage/manager.py +0 -582
- snowflake/cli/_plugins/stage/md5.py +0 -160
- snowflake/cli/_plugins/stage/plugin_spec.py +0 -30
- snowflake/cli/_plugins/stage/utils.py +0 -54
- snowflake/cli/_plugins/streamlit/__init__.py +0 -13
- snowflake/cli/_plugins/streamlit/commands.py +0 -195
- snowflake/cli/_plugins/streamlit/manager.py +0 -220
- snowflake/cli/_plugins/streamlit/plugin_spec.py +0 -30
- snowflake/cli/_plugins/streamlit/streamlit_entity.py +0 -12
- snowflake/cli/_plugins/streamlit/streamlit_entity_model.py +0 -66
- snowflake/cli/_plugins/workspace/__init__.py +0 -13
- snowflake/cli/_plugins/workspace/action_context.py +0 -18
- snowflake/cli/_plugins/workspace/commands.py +0 -306
- snowflake/cli/_plugins/workspace/manager.py +0 -74
- snowflake/cli/_plugins/workspace/plugin_spec.py +0 -30
- snowflake/cli/api/__init__.py +0 -48
- snowflake/cli/api/cli_global_context.py +0 -247
- snowflake/cli/api/commands/__init__.py +0 -13
- snowflake/cli/api/commands/alias.py +0 -23
- snowflake/cli/api/commands/common.py +0 -25
- snowflake/cli/api/commands/decorators.py +0 -369
- snowflake/cli/api/commands/execution_metadata.py +0 -40
- snowflake/cli/api/commands/experimental_behaviour.py +0 -18
- snowflake/cli/api/commands/flags.py +0 -561
- snowflake/cli/api/commands/overrideable_parameter.py +0 -143
- snowflake/cli/api/commands/snow_typer.py +0 -247
- snowflake/cli/api/commands/utils.py +0 -18
- snowflake/cli/api/config.py +0 -380
- snowflake/cli/api/connections.py +0 -216
- snowflake/cli/api/console/__init__.py +0 -17
- snowflake/cli/api/console/abc.py +0 -94
- snowflake/cli/api/console/console.py +0 -134
- snowflake/cli/api/console/enum.py +0 -17
- snowflake/cli/api/constants.py +0 -90
- snowflake/cli/api/entities/common.py +0 -56
- snowflake/cli/api/entities/utils.py +0 -370
- snowflake/cli/api/errno.py +0 -28
- snowflake/cli/api/exceptions.py +0 -190
- snowflake/cli/api/feature_flags.py +0 -54
- snowflake/cli/api/identifiers.py +0 -190
- snowflake/cli/api/metrics.py +0 -92
- snowflake/cli/api/output/__init__.py +0 -13
- snowflake/cli/api/output/formats.py +0 -20
- snowflake/cli/api/output/types.py +0 -118
- snowflake/cli/api/plugins/__init__.py +0 -13
- snowflake/cli/api/plugins/command/__init__.py +0 -72
- snowflake/cli/api/plugins/command/plugin_hook_specs.py +0 -21
- snowflake/cli/api/plugins/plugin_config.py +0 -32
- snowflake/cli/api/project/__init__.py +0 -13
- snowflake/cli/api/project/definition.py +0 -126
- snowflake/cli/api/project/definition_conversion.py +0 -395
- snowflake/cli/api/project/definition_manager.py +0 -145
- snowflake/cli/api/project/errors.py +0 -56
- snowflake/cli/api/project/project_verification.py +0 -23
- snowflake/cli/api/project/schemas/__init__.py +0 -13
- snowflake/cli/api/project/schemas/entities/__init__.py +0 -13
- snowflake/cli/api/project/schemas/entities/common.py +0 -153
- snowflake/cli/api/project/schemas/entities/entities.py +0 -61
- snowflake/cli/api/project/schemas/project_definition.py +0 -330
- snowflake/cli/api/project/schemas/template.py +0 -77
- snowflake/cli/api/project/schemas/updatable_model.py +0 -202
- snowflake/cli/api/project/schemas/v1/__init__.py +0 -0
- snowflake/cli/api/project/schemas/v1/identifier_model.py +0 -51
- snowflake/cli/api/project/schemas/v1/native_app/__init__.py +0 -0
- snowflake/cli/api/project/schemas/v1/native_app/application.py +0 -61
- snowflake/cli/api/project/schemas/v1/native_app/native_app.py +0 -93
- snowflake/cli/api/project/schemas/v1/native_app/package.py +0 -84
- snowflake/cli/api/project/schemas/v1/native_app/path_mapping.py +0 -65
- snowflake/cli/api/project/schemas/v1/snowpark/__init__.py +0 -0
- snowflake/cli/api/project/schemas/v1/snowpark/argument.py +0 -28
- snowflake/cli/api/project/schemas/v1/snowpark/callable.py +0 -69
- snowflake/cli/api/project/schemas/v1/snowpark/snowpark.py +0 -36
- snowflake/cli/api/project/schemas/v1/streamlit/__init__.py +0 -0
- snowflake/cli/api/project/schemas/v1/streamlit/streamlit.py +0 -47
- snowflake/cli/api/project/util.py +0 -278
- snowflake/cli/api/rendering/__init__.py +0 -13
- snowflake/cli/api/rendering/jinja.py +0 -118
- snowflake/cli/api/rendering/project_definition_templates.py +0 -43
- snowflake/cli/api/rendering/project_templates.py +0 -98
- snowflake/cli/api/rendering/sql_templates.py +0 -105
- snowflake/cli/api/rest_api.py +0 -178
- snowflake/cli/api/sanitizers.py +0 -43
- snowflake/cli/api/secure_path.py +0 -360
- snowflake/cli/api/secure_utils.py +0 -118
- snowflake/cli/api/sql_execution.py +0 -280
- snowflake/cli/api/utils/__init__.py +0 -13
- snowflake/cli/api/utils/cursor.py +0 -34
- snowflake/cli/api/utils/definition_rendering.py +0 -415
- snowflake/cli/api/utils/dict_utils.py +0 -73
- snowflake/cli/api/utils/error_handling.py +0 -23
- snowflake/cli/api/utils/graph.py +0 -97
- snowflake/cli/api/utils/models.py +0 -63
- snowflake/cli/api/utils/naming_utils.py +0 -13
- snowflake/cli/api/utils/path_utils.py +0 -36
- snowflake/cli/api/utils/templating_functions.py +0 -144
- snowflake/cli/api/utils/types.py +0 -35
- snowflake_cli_labs-3.0.0rc4.dist-info/RECORD +0 -242
- snowflake_cli_labs-3.0.0rc4.dist-info/entry_points.txt +0 -2
- {snowflake_cli_labs-3.0.0rc4.dist-info → snowflake_cli_labs-3.0.1.dist-info}/WHEEL +0 -0
- {snowflake_cli_labs-3.0.0rc4.dist-info → snowflake_cli_labs-3.0.1.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
|
-
)
|