omnata-plugin-devkit 0.13.8a200__tar.gz → 0.13.8a203__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.8a203}/PKG-INFO +3 -3
  2. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/pyproject.toml +6 -3
  3. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/API_LIMITS.sql.jinja +1 -2
  4. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/CONFIGURATION_FORM.sql.jinja +1 -2
  5. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/CONNECTION_FORM.sql.jinja +1 -2
  6. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/CONNECTION_TEST.sql.jinja +1 -2
  7. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/LIST_STAGES.sql.jinja +1 -2
  13. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/NETWORK_ADDRESSES.sql.jinja +1 -2
  14. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/RETRIEVE_SECRETS.sql.jinja +1 -2
  17. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/SYNC.sql.jinja +1 -2
  20. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/TUNNEL_TEST.sql.jinja +1 -2
  21. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/src/omnata_plugin_devkit/plugin_uploader.py +89 -42
  23. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/LICENSE +0 -0
  24. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/README.md +0 -0
  25. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/__init__.py +0 -0
  26. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/airbyte_wrapper.py +0 -0
  27. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/cli/__init__.py +0 -0
  28. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/development.ipynb +0 -0
  29. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/development_session.py +0 -0
  30. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/initialiser.py +0 -0
  31. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/CONFIGURE_APIS.sql.jinja +0 -0
  34. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/DROP_INTEGRATION.sql.jinja +0 -0
  40. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/DROP_SECRETS.sql.jinja +0 -0
  42. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/DROP_SPECIFICATION.sql.jinja +0 -0
  43. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/FETCH_CONNECTIONS.sql.jinja +0 -0
  44. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/jinja_templates/FETCH_SYNCS.sql.jinja +0 -0
  45. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/TEST_CALLBACK.sql.jinja +0 -0
  55. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/jinja_templates/manifest.yml.jinja +0 -0
  60. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/native_app_packaging.py +0 -0
  61. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/plugin_registration.py +0 -0
  62. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/plugin_template/icon.svg +0 -0
  63. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/plugin_template/plugin.py +0 -0
  64. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/plugin_template/plugin_development.ipynb +0 -0
  65. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/plugin_template/requirements.txt +0 -0
  66. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/__init__.py +0 -0
  67. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/__init__.py +0 -0
  68. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/__init__.py +0 -0
  69. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/config.py +0 -0
  70. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/constants.py +0 -0
  71. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/exceptions.py +0 -0
  72. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/secure_path.py +0 -0
  73. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/secure_utils.py +0 -0
  74. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/utils/__init__.py +0 -0
  75. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/api/utils/types.py +0 -0
  76. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/app/__init__.py +0 -0
  77. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/app/snow_connector.py +0 -0
  78. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/plugins/__init__.py +0 -0
  79. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/__init__.py +0 -0
  80. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/models.py +0 -0
  81. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203}/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.8a203}/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.8a203}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/venv.py +0 -0
  85. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/plugins/snowpark/zipper.py +0 -0
  86. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/snowcli/cli/templates/environment.yml.jinja +0 -0
  87. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/streamlit/plugin_configuration.py +0 -0
  88. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/src/omnata_plugin_devkit/test_step_definitions.py +0 -0
  89. {omnata_plugin_devkit-0.13.8a200 → omnata_plugin_devkit-0.13.8a203}/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.8a203
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.8a203"
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,60 @@ 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
+ for item in zip_read.infolist():
263
+ if not item.filename.startswith('.packages') and \
264
+ not item.filename.startswith('udf_direct_imports') and \
265
+ not item.filename.startswith('pydantic_core'):
266
+ if item.filename.endswith('.so'):
267
+ raise ValueError(f"Native library found in package: {item.filename}")
268
+ data = zip_read.read(item.filename)
269
+ zip_write.writestr(item, data)
258
270
  self.session.sql(
259
271
  f"put file://app.zip @{database_name}.{schema_name}.{stage_name} AUTO_COMPRESS=FALSE OVERWRITE=TRUE"
260
272
  ).collect()
261
273
 
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:
274
+ if not os.path.exists(".packages"):
275
+ raise ValueError(".packages directory not found after packaging")
276
+ subfolders = [
277
+ f.path
278
+ for f in os.scandir(".packages")
279
+ if f.is_dir() and os.path.join(".packages","omnata_plugin_runtime-") in f.path
280
+ ]
281
+ if len(subfolders) != 1:
267
282
  raise ValueError(
268
- "requirements.txt must contain a pinned omnata-plugin-runtime entry (e.g. omnata-plugin-runtime==X.Y.Z)"
283
+ "Failed to find omnata-plugin-runtime in downloaded package metadata"
269
284
  )
270
- op, omnata_plugin_runtime_version = runtime_reqs[0].specs[0]
271
- if op != "==":
285
+ subfolder = subfolders[0]
286
+ regex_matches = re.search(
287
+ r"^\.packages.omnata_plugin_runtime-(.*)\.dist-info$", subfolder
288
+ )
289
+ if regex_matches is None:
272
290
  raise ValueError(
273
- f"omnata-plugin-runtime must be pinned with '==' (got '{op}{omnata_plugin_runtime_version}')"
291
+ "Failed to parse version of omnata-plugin-runtime package from metadata"
274
292
  )
293
+ omnata_plugin_runtime_version = regex_matches.group(1)
294
+ anaconda_packages = package_utils.parse_requirements("requirements.snowflake.txt")
295
+ anaconda_package_names: List[str] = [
296
+ r.name
297
+ for r in anaconda_packages
298
+ ]
299
+ other_packages = package_utils.parse_requirements("requirements.other.txt")
300
+ other_package_names: List[str] = [
301
+ r.name for r in other_packages
302
+ ]
275
303
  os.chdir(original_wd)
276
304
  # icon_file_name_full = os.path.abspath(os.path.join(plugin_directory,icon_file_name))
277
305
  # print(f'Loading icon file {icon_file_name_full} into stage')
@@ -282,10 +310,37 @@ class PluginUploader:
282
310
  plugin_fqn: str = f"{manifest.developer_id}__{manifest.plugin_id}".upper()
283
311
 
284
312
  install_script = "setup_script.sql"
313
+ default_packages = ["dictdiffer", "jinja2", "requests", "pydantic","snowflake-telemetry-python"]
314
+ if len([w for w in anaconda_packages if "snowflake-snowpark-python" in w.name]) == 0:
315
+ # if not present at all, pin it to a specific version
316
+ anaconda_package_names = anaconda_package_names + ["snowflake-snowpark-python==1.22.1"]
317
+ print("snowflake-snowpark-python not present, adding to default packages")
318
+ else:
319
+ snowpark_package = [w for w in anaconda_packages if "snowflake-snowpark-python" in w.name][0]
320
+ if len(snowpark_package.specs) == 0:
321
+ print("snowflake-snowpark-python found unpinned, replacing with pinned version")
322
+ anaconda_package_names = [
323
+ w if w != "snowflake-snowpark-python" else "snowflake-snowpark-python==1.22.1"
324
+ for w in anaconda_package_names
325
+ ]
326
+ else:
327
+ print(f"{snowpark_package.name} found already pinned ({snowpark_package.line}), leaving alone")
328
+ anaconda_package_names = [
329
+ w.name if w.name != "snowflake-snowpark-python" else w.line
330
+ for w in anaconda_packages
331
+ ]
332
+ # remove snowflake-connector-python if it's found its way into the other packages or the anaconda packages
333
+ other_package_names = [
334
+ w for w in other_package_names if "snowflake-connector-python" not in w
335
+ ]
336
+ anaconda_package_names = [
337
+ w for w in anaconda_package_names if "snowflake-connector-python" not in w
338
+ ]
285
339
  has_custom_validator = (
286
340
  plugin_class_instance.outbound_record_validator.__module__ != 'omnata_plugin_runtime.omnata_plugin'
287
341
  )
288
342
  print(f"Has custom validator: {has_custom_validator} ({plugin_class_instance.outbound_record_validator.__module__})")
343
+ all_packages = list(set(default_packages + anaconda_package_names))
289
344
  packages_to_include = [
290
345
  f"'{p}'" for p in all_packages
291
346
  ]
@@ -489,7 +544,7 @@ $${}$$;
489
544
  print(f"Found {udf.language} UDF: {udf.name}, consumer facing: {udf.expose_to_consumer}")
490
545
  if udf.language == "python":
491
546
  udf.packages = all_packages
492
- setup_script.write(_inject_artifact_repository(str(udf)))
547
+ setup_script.write(str(udf))
493
548
  if udf.expose_to_consumer is True:
494
549
  setup_script.write(
495
550
  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 +570,7 @@ $${}$$;
515
570
  print(f"Found {udtf.language} UDTF: {udtf.name}, consumer facing: {udtf.expose_to_consumer}")
516
571
  if udtf.language == "python":
517
572
  udtf.packages = all_packages
518
- setup_script.write(_inject_artifact_repository(str(udtf)))
573
+ setup_script.write(str(udtf))
519
574
  if udtf.expose_to_consumer is True:
520
575
  setup_script.write(
521
576
  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 +604,8 @@ $${}$$;
549
604
  setup_script.write(
550
605
  self.plugin_info_udf_definition(
551
606
  manifest=manifest,
552
- anaconda_packages=all_packages,
553
- bundled_packages=[],
607
+ anaconda_packages=anaconda_package_names,
608
+ bundled_packages=other_package_names,
554
609
  icon_source=icon_source,
555
610
  plugin_class_name=plugin_class_name,
556
611
  has_custom_validator=has_custom_validator,
@@ -683,8 +738,8 @@ GRANT USAGE ON FUNCTION PLUGIN.TOKEN() TO application role OMNATA_MANAGEMENT;
683
738
  self.session.sql(
684
739
  self.plugin_info_udf_definition(
685
740
  manifest=manifest,
686
- anaconda_packages=all_packages,
687
- bundled_packages=[],
741
+ anaconda_packages=anaconda_package_names,
742
+ bundled_packages=other_package_names,
688
743
  icon_source=icon_source,
689
744
  plugin_class_name=plugin_class_name,
690
745
  has_custom_validator=has_custom_validator,
@@ -700,14 +755,6 @@ GRANT USAGE ON FUNCTION PLUGIN.TOKEN() TO application role OMNATA_MANAGEMENT;
700
755
  return schema_name
701
756
 
702
757
 
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
758
  def prepare_version_comment(version_comment:str):
712
759
  """
713
760
  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.