omnata-plugin-devkit 0.13.8a200__tar.gz → 0.13.9a204__tar.gz
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.
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/PKG-INFO +3 -3
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/pyproject.toml +6 -3
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/API_LIMITS.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONFIGURATION_FORM.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONNECTION_FORM.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONNECTION_TEST.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONSTRUCT_FORM_OPTION.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CREATE_BILLING_EVENTS.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CREATE_GENERIC_SECRET_OBJECT.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/GET_MISSING_APP_PRIVILEGES.sql.jinja +1 -1
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/INBOUND_LIST_STREAMS.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/LIST_STAGES.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/NETWORK_ADDRESSES.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/NGROK_POST_TUNNEL_FIELDS.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/OUTBOUND_RECORD_VALIDATOR.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/RETRIEVE_SECRETS.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/RETRIEVE_SECRETS_UDF.sql.jinja +1 -1
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/SET_CONNECTION_OBJECTS.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/SYNC.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/TUNNEL_TEST.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/UPDATE_GENERIC_SECRET_OBJECT.sql.jinja +1 -2
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_uploader.py +104 -42
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/LICENSE +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/README.md +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/airbyte_wrapper.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/cli/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/development.ipynb +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/development_session.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/initialiser.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/ASSIGN_OUTBOUND_TARGET_TYPE.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CHECK_CONNECTION_PROGRESS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONFIGURE_APIS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CREATE_GENERIC_SECRET_OBJECT_FROM_EXISTING.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CREATE_NETWORK_RULE_OBJECT.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CREATE_NETWORK_RULE_OBJECT_FROM_EXISTING.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CREATE_OAUTH_SECRET_OBJECT.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_CONFIGURATION_DEFINITION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_INTEGRATION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_NETWORK_RULES.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_SECRETS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_SPECIFICATION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/FETCH_CONNECTIONS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/FETCH_SYNCS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/FETCH_SYNC_BRANCHES.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/LIST_APP_SPECIFICATIONS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/PENDING_API_CONFIGURATION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/POST_INSTALL_ACTIONS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/RENAME_CONNECTION_METHODS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/RETRIEVE_NETWORK_RULE_OBJECT.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/SET_EAI_ACTIVE.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/SET_EAI_SPECIFICATION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/SET_SI_SPECIFICATION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/TEST_CALLBACK.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/TEST_OAUTH_TOKEN_EXISTS.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/UPDATE_API_CONFIGURATION.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/UPDATE_GENERIC_SECRET_OBJECT_OLD.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/UPDATE_NETWORK_RULE_OBJECT.sql.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/manifest.yml.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/native_app_packaging.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_registration.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/icon.svg +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/plugin.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/plugin_development.ipynb +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/requirements.txt +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/config.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/constants.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/exceptions.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/secure_path.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/secure_utils.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/utils/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/utils/types.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/app/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/app/snow_connector.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/models.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/package/__init__.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/package_utils.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/snowpark_shared.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/venv.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/zipper.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/templates/environment.yml.jinja +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/streamlit/plugin_configuration.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/test_step_definitions.py +0 -0
- {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omnata-plugin-devkit
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.9a204
|
|
4
4
|
Summary:
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: James Weakley
|
|
@@ -13,14 +13,14 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Requires-Dist: behave (>=1.2,<2.0)
|
|
15
15
|
Requires-Dist: behave_pandas (>=0.5.0,<0.6.0)
|
|
16
|
-
Requires-Dist: omnata-plugin-runtime (
|
|
16
|
+
Requires-Dist: omnata-plugin-runtime (>=0.12.5)
|
|
17
17
|
Requires-Dist: omnata_cli (>=0.2.3,<0.3.0)
|
|
18
18
|
Requires-Dist: pyparsing (>=3.0)
|
|
19
19
|
Requires-Dist: python-slugify (>=8,<9)
|
|
20
20
|
Requires-Dist: requirements-parser (==0.13.0)
|
|
21
21
|
Requires-Dist: snowflake-connector-python[pandas] (<=4.3.0)
|
|
22
22
|
Requires-Dist: tabulate (>=0.9,<0.10)
|
|
23
|
-
Requires-Dist: vcrpy (>=
|
|
23
|
+
Requires-Dist: vcrpy (>=7,<8)
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
|
|
26
26
|
# omnata-plugin-devkit
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "omnata-plugin-devkit"
|
|
3
|
-
version = "0.13.
|
|
3
|
+
version = "0.13.9a204"
|
|
4
4
|
description = ""
|
|
5
5
|
authors = ["James Weakley <james.weakley@omnata.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -10,9 +10,12 @@ packages = [{ include = "omnata_plugin_devkit", from = "src" }]
|
|
|
10
10
|
# support 3.10 - 3.13
|
|
11
11
|
python = ">=3.10, <=3.13"
|
|
12
12
|
omnata_cli = "^0.2.3"
|
|
13
|
-
omnata-plugin-runtime = "
|
|
13
|
+
omnata-plugin-runtime = ">=0.12.5"
|
|
14
|
+
#pandas = "^2,<=2.3.3"
|
|
15
|
+
#numpy = "<=2.3.5"
|
|
16
|
+
#jinja2 = "^3,<=3.1.6"
|
|
14
17
|
python-slugify = "^8"
|
|
15
|
-
vcrpy = "^
|
|
18
|
+
vcrpy = "^7"
|
|
16
19
|
tabulate = "^0.9"
|
|
17
20
|
behave = "^1.2"
|
|
18
21
|
behave_pandas = "^0.5.0"
|
|
@@ -6,8 +6,7 @@ create or replace procedure PLUGIN.API_LIMITS(
|
|
|
6
6
|
OTHER_SECRETS_NAME VARCHAR)
|
|
7
7
|
returns object
|
|
8
8
|
language python
|
|
9
|
-
RUNTIME_VERSION = '3.
|
|
10
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
9
|
+
RUNTIME_VERSION = '3.10'
|
|
11
10
|
PACKAGES = ({{packages}})
|
|
12
11
|
IMPORTS = ('/app.zip')
|
|
13
12
|
HANDLER = 'run'
|
|
@@ -2,8 +2,7 @@ create or replace procedure PLUGIN.CONFIGURATION_FORM(
|
|
|
2
2
|
CONNECTION_FORM_REQUEST OBJECT)
|
|
3
3
|
returns object
|
|
4
4
|
language python
|
|
5
|
-
RUNTIME_VERSION = '3.
|
|
6
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
5
|
+
RUNTIME_VERSION = '3.10'
|
|
7
6
|
PACKAGES = ({{packages}})
|
|
8
7
|
IMPORTS = ('/app.zip')
|
|
9
8
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.CONNECTION_FORM(CONNECTIVITY_OPTION VARCHAR)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -7,8 +7,7 @@ create or replace procedure PLUGIN.CONNECTION_TEST(
|
|
|
7
7
|
OTHER_SECRETS_NAME VARCHAR)
|
|
8
8
|
returns object
|
|
9
9
|
language python
|
|
10
|
-
RUNTIME_VERSION = '3.
|
|
11
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
10
|
+
RUNTIME_VERSION = '3.10'
|
|
12
11
|
PACKAGES = ({{packages}})
|
|
13
12
|
IMPORTS = ('/app.zip')
|
|
14
13
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.CONSTRUCT_FORM_OPTION(FUNCTION_NAME VARCHAR,STORED_VALUES ARRAY)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.CREATE_BILLING_EVENTS(BILLING_EVENT_REQUEST OBJECT)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.CREATE_GENERIC_SECRET_OBJECT(SECRET_NAME VARCHAR, SECRET_CONTENTS VARCHAR)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
HANDLER = 'run'
|
|
8
7
|
COMMENT = $$
|
|
@@ -8,8 +8,7 @@ create or replace procedure PLUGIN.INBOUND_LIST_STREAMS(
|
|
|
8
8
|
SELECTED_STREAMS ARRAY)
|
|
9
9
|
returns table(RESULT object)
|
|
10
10
|
language python
|
|
11
|
-
RUNTIME_VERSION = '3.
|
|
12
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
11
|
+
RUNTIME_VERSION = '3.10'
|
|
13
12
|
PACKAGES = ({{packages}})
|
|
14
13
|
IMPORTS = ('/app.zip')
|
|
15
14
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.LIST_STAGES()
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -5,8 +5,7 @@ create or replace procedure PLUGIN.NETWORK_ADDRESSES(
|
|
|
5
5
|
)
|
|
6
6
|
returns object
|
|
7
7
|
language python
|
|
8
|
-
RUNTIME_VERSION = '3.
|
|
9
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
8
|
+
RUNTIME_VERSION = '3.10'
|
|
10
9
|
PACKAGES = ({{packages}})
|
|
11
10
|
IMPORTS = ('/app.zip')
|
|
12
11
|
HANDLER = 'run'
|
|
@@ -6,8 +6,7 @@ create or replace procedure PLUGIN.NGROK_POST_TUNNEL_FIELDS(
|
|
|
6
6
|
FUNCTION_NAME VARCHAR)
|
|
7
7
|
returns object
|
|
8
8
|
language python
|
|
9
|
-
RUNTIME_VERSION = '3.
|
|
10
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
9
|
+
RUNTIME_VERSION = '3.10'
|
|
11
10
|
PACKAGES = ({{packages}})
|
|
12
11
|
IMPORTS = ('/app.zip')
|
|
13
12
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace function PLUGIN.OUTBOUND_RECORD_VALIDATOR(SYNC_PARAMETERS OBJECT,FIELD_MAPPINGS OBJECT,TRANSFORM_RECORD OBJECT,SOURCE_TYPES OBJECT)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.RETRIEVE_SECRETS(OAUTH_SECRET_NAME VARCHAR,OTHER_SECRETS_NAME VARCHAR)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
create or replace function PLUGIN.RETRIEVE_SECRETS_UDF(OAUTH_SECRET_NAME VARCHAR,OTHER_SECRETS_NAME VARCHAR)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
5
5
|
HANDLER = 'run'
|
|
6
6
|
COMMENT = $$
|
|
7
7
|
Allows this plugin to retrieve its own secrets during CONFIGURE_API calls.
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.SET_CONNECTION_OBJECTS(PARAMETERS OBJECT)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.SYNC(SYNC_REQUEST OBJECT)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -2,8 +2,7 @@ create or replace procedure PLUGIN.TUNNEL_TEST(TUNNEL_TYPE VARCHAR,
|
|
|
2
2
|
OTHER_SECRETS_NAME VARCHAR)
|
|
3
3
|
returns object
|
|
4
4
|
language python
|
|
5
|
-
RUNTIME_VERSION = '3.
|
|
6
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
5
|
+
RUNTIME_VERSION = '3.10'
|
|
7
6
|
PACKAGES = ({{packages}})
|
|
8
7
|
IMPORTS = ('/app.zip')
|
|
9
8
|
HANDLER = 'run'
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
create or replace procedure PLUGIN.UPDATE_GENERIC_SECRET_OBJECT(SECRET_NAME VARCHAR,SECRET_CONTENTS VARCHAR,MERGE_WITH_OTHER_SECRET VARCHAR)
|
|
2
2
|
returns object
|
|
3
3
|
language python
|
|
4
|
-
RUNTIME_VERSION = '3.
|
|
5
|
-
ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
|
|
4
|
+
RUNTIME_VERSION = '3.10'
|
|
6
5
|
PACKAGES = ({{packages}})
|
|
7
6
|
IMPORTS = ('/app.zip')
|
|
8
7
|
HANDLER = 'run'
|
|
@@ -14,6 +14,7 @@ import distutils.core
|
|
|
14
14
|
import inspect
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
17
|
+
import re
|
|
17
18
|
import shutil
|
|
18
19
|
import sys
|
|
19
20
|
import typing
|
|
@@ -21,7 +22,7 @@ import zipfile
|
|
|
21
22
|
import copy
|
|
22
23
|
import uuid
|
|
23
24
|
from pathlib import Path
|
|
24
|
-
from typing import Any, Dict, List, Literal, Optional
|
|
25
|
+
from typing import Any, Dict, List, Literal, Optional
|
|
25
26
|
|
|
26
27
|
from pathlib import Path
|
|
27
28
|
|
|
@@ -33,6 +34,8 @@ from omnata_plugin_runtime.omnata_plugin import (
|
|
|
33
34
|
UDFDefinition, UDTFDefinition
|
|
34
35
|
)
|
|
35
36
|
from omnata_plugin_devkit.snowcli.cli.plugins.snowpark import package_utils
|
|
37
|
+
from omnata_plugin_devkit.snowcli.cli.plugins.snowpark import snowpark_shared
|
|
38
|
+
from omnata_plugin_devkit.snowcli.cli.plugins.snowpark.models import PypiOption
|
|
36
39
|
from snowflake.snowpark import Session
|
|
37
40
|
import importlib.metadata
|
|
38
41
|
|
|
@@ -64,7 +67,7 @@ class PluginUploader:
|
|
|
64
67
|
manifest: PluginManifest,
|
|
65
68
|
anaconda_packages: List[str],
|
|
66
69
|
bundled_packages: List[str],
|
|
67
|
-
icon_source:
|
|
70
|
+
icon_source: str,
|
|
68
71
|
plugin_class_name: str,
|
|
69
72
|
has_custom_validator: bool,
|
|
70
73
|
plugin_runtime_version: str,
|
|
@@ -121,7 +124,7 @@ class PluginUploader:
|
|
|
121
124
|
version_comment: str = "",
|
|
122
125
|
log_level: str = "INFO",
|
|
123
126
|
udf_directory_override: Optional[str] = None,
|
|
124
|
-
) ->
|
|
127
|
+
) -> str:
|
|
125
128
|
"""
|
|
126
129
|
Creates a stage and uploads the latest plugin artifacts, Omnata runtime etc.
|
|
127
130
|
If the schema name is not provided, the plugin_id from the manifest will be used.
|
|
@@ -177,10 +180,9 @@ class PluginUploader:
|
|
|
177
180
|
else:
|
|
178
181
|
tier_file = Path(os.path.join(plugin_directory, "tier.txt"))
|
|
179
182
|
if tier_file.exists():
|
|
180
|
-
|
|
181
|
-
if
|
|
182
|
-
raise ValueError(f"Invalid tier {
|
|
183
|
-
plugin_tier = cast(Literal["byo","free","standard","premium"], plugin_tier_raw)
|
|
183
|
+
plugin_tier = tier_file.read_text(encoding="utf-8").strip()
|
|
184
|
+
if plugin_tier not in ["standard","premium","byo","free"]:
|
|
185
|
+
raise ValueError(f"Invalid tier {plugin_tier} in {tier_file}")
|
|
184
186
|
print(f"Using plugin tier: {plugin_tier}")
|
|
185
187
|
license_url_file = Path(os.path.join(plugin_directory, "license_url.txt"))
|
|
186
188
|
license_url: Optional[str] = (
|
|
@@ -212,7 +214,7 @@ class PluginUploader:
|
|
|
212
214
|
# do checks first
|
|
213
215
|
|
|
214
216
|
icon_file_name = "icon.svg"
|
|
215
|
-
icon_source
|
|
217
|
+
icon_source = None
|
|
216
218
|
if os.path.exists(os.path.join(plugin_directory, icon_file_name)):
|
|
217
219
|
print("Using icon from icon.svg")
|
|
218
220
|
with open(
|
|
@@ -244,34 +246,75 @@ class PluginUploader:
|
|
|
244
246
|
if os.path.exists("build.zip"):
|
|
245
247
|
os.remove("build.zip")
|
|
246
248
|
|
|
247
|
-
print("
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
249
|
+
print("Creating Snowpark package for Snowflake")
|
|
250
|
+
# we allow native libraries to be included in the package, but then check ourselves
|
|
251
|
+
snowpark_shared.snowpark_package(
|
|
252
|
+
source=Path('.'),
|
|
253
|
+
artifact_file=Path('build.zip'),
|
|
254
|
+
pypi_download=PypiOption.YES,
|
|
255
|
+
check_anaconda_for_pypi_deps=True,
|
|
256
|
+
package_native_libraries=PypiOption.YES,
|
|
257
|
+
)
|
|
258
|
+
with zipfile.ZipFile('build.zip', 'r') as zip_read:
|
|
259
|
+
with zipfile.ZipFile('app.zip', 'w') as zip_write:
|
|
260
|
+
# Copy each file, skipping those in the specified folder
|
|
261
|
+
# some packages are named inconsistently which makes them hard to remove from the artifact
|
|
262
|
+
# Track directories we've emitted so each is added exactly once.
|
|
263
|
+
# zipimport's namespace-package detection (_is_dir) checks for
|
|
264
|
+
# '<path>/' as a key in the zip's TOC. Without these directory
|
|
265
|
+
# entries, namespace packages bundled inside app.zip (e.g. the
|
|
266
|
+
# google.* tree shipped by plugins that vendor google-ads) are
|
|
267
|
+
# invisible to Snowpark's importer, even though every file is
|
|
268
|
+
# present, because zipfile.write() does not emit directory
|
|
269
|
+
# entries by default.
|
|
270
|
+
emitted_dirs = set()
|
|
271
|
+
for item in zip_read.infolist():
|
|
272
|
+
if not item.filename.startswith('.packages') and \
|
|
273
|
+
not item.filename.startswith('udf_direct_imports') and \
|
|
274
|
+
not item.filename.startswith('pydantic_core'):
|
|
275
|
+
if item.filename.endswith('.so'):
|
|
276
|
+
raise ValueError(f"Native library found in package: {item.filename}")
|
|
277
|
+
parts = item.filename.split('/')
|
|
278
|
+
for i in range(1, len(parts)):
|
|
279
|
+
dir_entry = '/'.join(parts[:i]) + '/'
|
|
280
|
+
if dir_entry not in emitted_dirs:
|
|
281
|
+
zip_write.writestr(dir_entry, b'')
|
|
282
|
+
emitted_dirs.add(dir_entry)
|
|
283
|
+
data = zip_read.read(item.filename)
|
|
284
|
+
zip_write.writestr(item, data)
|
|
258
285
|
self.session.sql(
|
|
259
286
|
f"put file://app.zip @{database_name}.{schema_name}.{stage_name} AUTO_COMPRESS=FALSE OVERWRITE=TRUE"
|
|
260
287
|
).collect()
|
|
261
288
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
289
|
+
if not os.path.exists(".packages"):
|
|
290
|
+
raise ValueError(".packages directory not found after packaging")
|
|
291
|
+
subfolders = [
|
|
292
|
+
f.path
|
|
293
|
+
for f in os.scandir(".packages")
|
|
294
|
+
if f.is_dir() and os.path.join(".packages","omnata_plugin_runtime-") in f.path
|
|
295
|
+
]
|
|
296
|
+
if len(subfolders) != 1:
|
|
267
297
|
raise ValueError(
|
|
268
|
-
"
|
|
298
|
+
"Failed to find omnata-plugin-runtime in downloaded package metadata"
|
|
269
299
|
)
|
|
270
|
-
|
|
271
|
-
|
|
300
|
+
subfolder = subfolders[0]
|
|
301
|
+
regex_matches = re.search(
|
|
302
|
+
r"^\.packages.omnata_plugin_runtime-(.*)\.dist-info$", subfolder
|
|
303
|
+
)
|
|
304
|
+
if regex_matches is None:
|
|
272
305
|
raise ValueError(
|
|
273
|
-
|
|
306
|
+
"Failed to parse version of omnata-plugin-runtime package from metadata"
|
|
274
307
|
)
|
|
308
|
+
omnata_plugin_runtime_version = regex_matches.group(1)
|
|
309
|
+
anaconda_packages = package_utils.parse_requirements("requirements.snowflake.txt")
|
|
310
|
+
anaconda_package_names: List[str] = [
|
|
311
|
+
r.name
|
|
312
|
+
for r in anaconda_packages
|
|
313
|
+
]
|
|
314
|
+
other_packages = package_utils.parse_requirements("requirements.other.txt")
|
|
315
|
+
other_package_names: List[str] = [
|
|
316
|
+
r.name for r in other_packages
|
|
317
|
+
]
|
|
275
318
|
os.chdir(original_wd)
|
|
276
319
|
# icon_file_name_full = os.path.abspath(os.path.join(plugin_directory,icon_file_name))
|
|
277
320
|
# print(f'Loading icon file {icon_file_name_full} into stage')
|
|
@@ -282,10 +325,37 @@ class PluginUploader:
|
|
|
282
325
|
plugin_fqn: str = f"{manifest.developer_id}__{manifest.plugin_id}".upper()
|
|
283
326
|
|
|
284
327
|
install_script = "setup_script.sql"
|
|
328
|
+
default_packages = ["dictdiffer", "jinja2", "requests", "pydantic","snowflake-telemetry-python"]
|
|
329
|
+
if len([w for w in anaconda_packages if "snowflake-snowpark-python" in w.name]) == 0:
|
|
330
|
+
# if not present at all, pin it to a specific version
|
|
331
|
+
anaconda_package_names = anaconda_package_names + ["snowflake-snowpark-python==1.22.1"]
|
|
332
|
+
print("snowflake-snowpark-python not present, adding to default packages")
|
|
333
|
+
else:
|
|
334
|
+
snowpark_package = [w for w in anaconda_packages if "snowflake-snowpark-python" in w.name][0]
|
|
335
|
+
if len(snowpark_package.specs) == 0:
|
|
336
|
+
print("snowflake-snowpark-python found unpinned, replacing with pinned version")
|
|
337
|
+
anaconda_package_names = [
|
|
338
|
+
w if w != "snowflake-snowpark-python" else "snowflake-snowpark-python==1.22.1"
|
|
339
|
+
for w in anaconda_package_names
|
|
340
|
+
]
|
|
341
|
+
else:
|
|
342
|
+
print(f"{snowpark_package.name} found already pinned ({snowpark_package.line}), leaving alone")
|
|
343
|
+
anaconda_package_names = [
|
|
344
|
+
w.name if w.name != "snowflake-snowpark-python" else w.line
|
|
345
|
+
for w in anaconda_packages
|
|
346
|
+
]
|
|
347
|
+
# remove snowflake-connector-python if it's found its way into the other packages or the anaconda packages
|
|
348
|
+
other_package_names = [
|
|
349
|
+
w for w in other_package_names if "snowflake-connector-python" not in w
|
|
350
|
+
]
|
|
351
|
+
anaconda_package_names = [
|
|
352
|
+
w for w in anaconda_package_names if "snowflake-connector-python" not in w
|
|
353
|
+
]
|
|
285
354
|
has_custom_validator = (
|
|
286
355
|
plugin_class_instance.outbound_record_validator.__module__ != 'omnata_plugin_runtime.omnata_plugin'
|
|
287
356
|
)
|
|
288
357
|
print(f"Has custom validator: {has_custom_validator} ({plugin_class_instance.outbound_record_validator.__module__})")
|
|
358
|
+
all_packages = list(set(default_packages + anaconda_package_names))
|
|
289
359
|
packages_to_include = [
|
|
290
360
|
f"'{p}'" for p in all_packages
|
|
291
361
|
]
|
|
@@ -489,7 +559,7 @@ $${}$$;
|
|
|
489
559
|
print(f"Found {udf.language} UDF: {udf.name}, consumer facing: {udf.expose_to_consumer}")
|
|
490
560
|
if udf.language == "python":
|
|
491
561
|
udf.packages = all_packages
|
|
492
|
-
setup_script.write(
|
|
562
|
+
setup_script.write(str(udf))
|
|
493
563
|
if udf.expose_to_consumer is True:
|
|
494
564
|
setup_script.write(
|
|
495
565
|
f"grant usage on function UDFS.{function_signature(input=udf,include_name=True,include_params='data_types_only',connection_parameter='leave')} to application role CONSUMER_FUNCTION_CALLER;\n"
|
|
@@ -515,7 +585,7 @@ $${}$$;
|
|
|
515
585
|
print(f"Found {udtf.language} UDTF: {udtf.name}, consumer facing: {udtf.expose_to_consumer}")
|
|
516
586
|
if udtf.language == "python":
|
|
517
587
|
udtf.packages = all_packages
|
|
518
|
-
setup_script.write(
|
|
588
|
+
setup_script.write(str(udtf))
|
|
519
589
|
if udtf.expose_to_consumer is True:
|
|
520
590
|
setup_script.write(
|
|
521
591
|
f"grant usage on function UDFS.{function_signature(input=udtf,include_name=True,include_params='data_types_only',connection_parameter='leave')} to application role CONSUMER_FUNCTION_CALLER;\n"
|
|
@@ -549,8 +619,8 @@ $${}$$;
|
|
|
549
619
|
setup_script.write(
|
|
550
620
|
self.plugin_info_udf_definition(
|
|
551
621
|
manifest=manifest,
|
|
552
|
-
anaconda_packages=
|
|
553
|
-
bundled_packages=
|
|
622
|
+
anaconda_packages=anaconda_package_names,
|
|
623
|
+
bundled_packages=other_package_names,
|
|
554
624
|
icon_source=icon_source,
|
|
555
625
|
plugin_class_name=plugin_class_name,
|
|
556
626
|
has_custom_validator=has_custom_validator,
|
|
@@ -683,8 +753,8 @@ GRANT USAGE ON FUNCTION PLUGIN.TOKEN() TO application role OMNATA_MANAGEMENT;
|
|
|
683
753
|
self.session.sql(
|
|
684
754
|
self.plugin_info_udf_definition(
|
|
685
755
|
manifest=manifest,
|
|
686
|
-
anaconda_packages=
|
|
687
|
-
bundled_packages=
|
|
756
|
+
anaconda_packages=anaconda_package_names,
|
|
757
|
+
bundled_packages=other_package_names,
|
|
688
758
|
icon_source=icon_source,
|
|
689
759
|
plugin_class_name=plugin_class_name,
|
|
690
760
|
has_custom_validator=has_custom_validator,
|
|
@@ -700,14 +770,6 @@ GRANT USAGE ON FUNCTION PLUGIN.TOKEN() TO application role OMNATA_MANAGEMENT;
|
|
|
700
770
|
return schema_name
|
|
701
771
|
|
|
702
772
|
|
|
703
|
-
def _inject_artifact_repository(udf_sql: str) -> str:
|
|
704
|
-
return udf_sql.replace(
|
|
705
|
-
"PACKAGES = (",
|
|
706
|
-
"ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository\nPACKAGES = (",
|
|
707
|
-
1,
|
|
708
|
-
)
|
|
709
|
-
|
|
710
|
-
|
|
711
773
|
def prepare_version_comment(version_comment:str):
|
|
712
774
|
"""
|
|
713
775
|
The manifest file takes a comment, but since it's in YAML you have to do a bunch of silly work to make it valid and multiline.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|