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.
Files changed (89) hide show
  1. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/PKG-INFO +3 -3
  2. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/pyproject.toml +6 -3
  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
  4. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONFIGURATION_FORM.sql.jinja +1 -2
  5. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONNECTION_FORM.sql.jinja +1 -2
  6. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONNECTION_TEST.sql.jinja +1 -2
  7. {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
  8. {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
  9. {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
  10. {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
  11. {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
  12. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/LIST_STAGES.sql.jinja +1 -2
  13. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/NETWORK_ADDRESSES.sql.jinja +1 -2
  14. {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
  15. {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
  16. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/RETRIEVE_SECRETS.sql.jinja +1 -2
  17. {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
  18. {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
  19. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/SYNC.sql.jinja +1 -2
  20. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/TUNNEL_TEST.sql.jinja +1 -2
  21. {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
  22. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_uploader.py +104 -42
  23. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/LICENSE +0 -0
  24. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/README.md +0 -0
  25. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/__init__.py +0 -0
  26. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/airbyte_wrapper.py +0 -0
  27. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/cli/__init__.py +0 -0
  28. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/development.ipynb +0 -0
  29. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/development_session.py +0 -0
  30. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/initialiser.py +0 -0
  31. {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
  32. {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
  33. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/CONFIGURE_APIS.sql.jinja +0 -0
  34. {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
  35. {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
  36. {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
  37. {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
  38. {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
  39. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_INTEGRATION.sql.jinja +0 -0
  40. {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
  41. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_SECRETS.sql.jinja +0 -0
  42. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/DROP_SPECIFICATION.sql.jinja +0 -0
  43. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/FETCH_CONNECTIONS.sql.jinja +0 -0
  44. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/FETCH_SYNCS.sql.jinja +0 -0
  45. {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
  46. {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
  47. {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
  48. {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
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/TEST_CALLBACK.sql.jinja +0 -0
  55. {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
  56. {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
  57. {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
  58. {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
  59. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/jinja_templates/manifest.yml.jinja +0 -0
  60. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/native_app_packaging.py +0 -0
  61. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_registration.py +0 -0
  62. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/icon.svg +0 -0
  63. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/plugin.py +0 -0
  64. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/plugin_development.ipynb +0 -0
  65. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/plugin_template/requirements.txt +0 -0
  66. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/__init__.py +0 -0
  67. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/__init__.py +0 -0
  68. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/__init__.py +0 -0
  69. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/config.py +0 -0
  70. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/constants.py +0 -0
  71. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/exceptions.py +0 -0
  72. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/secure_path.py +0 -0
  73. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/secure_utils.py +0 -0
  74. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/utils/__init__.py +0 -0
  75. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/api/utils/types.py +0 -0
  76. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/app/__init__.py +0 -0
  77. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/app/snow_connector.py +0 -0
  78. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/__init__.py +0 -0
  79. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/__init__.py +0 -0
  80. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/models.py +0 -0
  81. {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
  82. {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
  83. {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
  84. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/venv.py +0 -0
  85. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/zipper.py +0 -0
  86. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/snowcli/cli/templates/environment.yml.jinja +0 -0
  87. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/streamlit/plugin_configuration.py +0 -0
  88. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.9a204}/src/omnata_plugin_devkit/test_step_definitions.py +0 -0
  89. {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.8a200
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 (==0.12.10a374)
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 (>=4,<5)
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.8a200"
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 = "==0.12.10a374"
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 = "^4"
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
5
- ARTIFACT_REPOSITORY = snowflake.snowpark.pypi_shared_repository
4
+ RUNTIME_VERSION = '3.10'
6
5
  PACKAGES = ({{packages}})
7
6
  HANDLER = 'run'
8
7
  COMMENT = $$
@@ -1,7 +1,7 @@
1
1
  create or replace procedure PLUGIN.GET_MISSING_APP_PRIVILEGES()
2
2
  returns object
3
3
  language python
4
- RUNTIME_VERSION = '3.12'
4
+ RUNTIME_VERSION = '3.10'
5
5
  PACKAGES = ('snowflake-snowpark-python','snowflake-native-apps-permission')
6
6
  HANDLER = 'run'
7
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'
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
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.12'
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, cast
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: Optional[str],
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
- ) -> Optional[str]:
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
- plugin_tier_raw = tier_file.read_text(encoding="utf-8").strip()
181
- if plugin_tier_raw not in ["standard","premium","byo","free"]:
182
- raise ValueError(f"Invalid tier {plugin_tier_raw} in {tier_file}")
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:Optional[str] = None
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("Building app.zip from plugin source")
248
- with zipfile.ZipFile('app.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
249
- for root, dirs, files in os.walk('.'):
250
- dirs[:] = [d for d in dirs if not d.startswith('.') and d != '__pycache__' and d != 'udf_direct_imports']
251
- for fname in files:
252
- if fname.startswith('.'):
253
- continue
254
- if fname.endswith('.so'):
255
- raise ValueError(f"Native library found in package: {os.path.join(root, fname)}")
256
- full = os.path.join(root, fname)
257
- zf.write(full, os.path.relpath(full, '.'))
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
- requirements_list = package_utils.parse_requirements("requirements.txt")
263
- all_packages: List[str] = [r.line for r in requirements_list]
264
-
265
- runtime_reqs = [r for r in requirements_list if r.name == "omnata-plugin-runtime"]
266
- if len(runtime_reqs) != 1 or len(runtime_reqs[0].specs) == 0:
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
- "requirements.txt must contain a pinned omnata-plugin-runtime entry (e.g. omnata-plugin-runtime==X.Y.Z)"
298
+ "Failed to find omnata-plugin-runtime in downloaded package metadata"
269
299
  )
270
- op, omnata_plugin_runtime_version = runtime_reqs[0].specs[0]
271
- if op != "==":
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
- f"omnata-plugin-runtime must be pinned with '==' (got '{op}{omnata_plugin_runtime_version}')"
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(_inject_artifact_repository(str(udf)))
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(_inject_artifact_repository(str(udtf)))
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=all_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=all_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.