omnata-plugin-devkit 0.10.16a110__py3-none-any.whl → 0.10.17a120__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ CREATE or replace PROCEDURE PLUGIN.FETCH_CONNECTIONS()
2
+ RETURNS TABLE()
3
+ LANGUAGE SQL
4
+ as
5
+ DECLARE
6
+
7
+ CONNECTIONS resultset;
8
+ SYNC_ENGINE_DATABASE_NAME varchar;
9
+ PROC_NAME varchar;
10
+ PLUGIN_REGISTRATION_EXCEPTION EXCEPTION (-20001, 'Plugin is not registered to a sync engine instance');
11
+ c1 CURSOR FOR select min(APPLICATION_NAME) from DATA.OMNATA_REGISTRATION;
12
+ BEGIN
13
+
14
+ OPEN c1;
15
+ FETCH c1 INTO SYNC_ENGINE_DATABASE_NAME;
16
+ IF (:SYNC_ENGINE_DATABASE_NAME = null) THEN
17
+ RAISE PLUGIN_REGISTRATION_EXCEPTION;
18
+ END IF;
19
+
20
+ select CONCAT(:SYNC_ENGINE_DATABASE_NAME,'.API.PLUGIN_FETCH_CONNECTIONS') into :PROC_NAME;
21
+
22
+ CONNECTIONS:= (call IDENTIFIER(:PROC_NAME)(current_database(),PLUGIN.TOKEN()));
23
+
24
+ RETURN TABLE(CONNECTIONS);
25
+
26
+ END;
@@ -0,0 +1,24 @@
1
+ CREATE or replace PROCEDURE PLUGIN.FETCH_SYNCS(CONNECTION_ID NUMERIC(38,0) DEFAULT NULL)
2
+ RETURNS TABLE()
3
+ LANGUAGE SQL
4
+ as
5
+ DECLARE
6
+
7
+ SYNCS resultset;
8
+ SYNC_ENGINE_DATABASE_NAME varchar;
9
+ PROC_NAME varchar;
10
+ PLUGIN_REGISTRATION_EXCEPTION EXCEPTION (-20001, 'Plugin is not registered to a sync engine instance');
11
+ c1 CURSOR FOR select min(APPLICATION_NAME) from DATA.OMNATA_REGISTRATION;
12
+ BEGIN
13
+
14
+ OPEN c1;
15
+ FETCH c1 INTO SYNC_ENGINE_DATABASE_NAME;
16
+ IF (:SYNC_ENGINE_DATABASE_NAME = null) THEN
17
+ RAISE PLUGIN_REGISTRATION_EXCEPTION;
18
+ END IF;
19
+
20
+ select CONCAT(:SYNC_ENGINE_DATABASE_NAME,'.API.PLUGIN_FETCH_SYNCS') into :PROC_NAME;
21
+
22
+ SYNCS:= (call IDENTIFIER(:PROC_NAME)(current_database(),PLUGIN.TOKEN(),:CONNECTION_ID));
23
+
24
+ RETURN TABLE(SYNCS);
@@ -0,0 +1,26 @@
1
+ CREATE or replace PROCEDURE PLUGIN.FETCH_SYNC_BRANCHES(SYNC_ID numeric)
2
+ RETURNS TABLE()
3
+ LANGUAGE SQL
4
+ as
5
+ DECLARE
6
+
7
+ SYNC_BRANCHES resultset;
8
+ SYNC_ENGINE_DATABASE_NAME varchar;
9
+ PROC_NAME varchar;
10
+ PLUGIN_REGISTRATION_EXCEPTION EXCEPTION (-20001, 'Plugin is not registered to a sync engine instance');
11
+ c1 CURSOR FOR select min(APPLICATION_NAME) from DATA.OMNATA_REGISTRATION;
12
+ BEGIN
13
+
14
+ OPEN c1;
15
+ FETCH c1 INTO SYNC_ENGINE_DATABASE_NAME;
16
+ IF (:SYNC_ENGINE_DATABASE_NAME = null) THEN
17
+ RAISE PLUGIN_REGISTRATION_EXCEPTION;
18
+ END IF;
19
+
20
+ select CONCAT(:SYNC_ENGINE_DATABASE_NAME,'.API.PLUGIN_FETCH_SYNC_BRANCHES') into :PROC_NAME;
21
+
22
+ SYNC_BRANCHES:= (call IDENTIFIER(:PROC_NAME)(current_database(),PLUGIN.TOKEN(),:SYNC_ID));
23
+
24
+ RETURN TABLE(SYNC_BRANCHES);
25
+
26
+ END;
@@ -25,8 +25,3 @@ configuration:
25
25
  - type: DEBUG_LOGS
26
26
  sharing: OPTIONAL
27
27
 
28
- privileges:
29
- - CREATE EXTERNAL ACCESS INTEGRATION:
30
- description: "To connect to external application endpoints, as configured by the user (required)"
31
- - CREATE SECURITY INTEGRATION:
32
- description: "To create OAuth integration, as configured by the user (optional, only required if OAuth connectivity is needed)"
@@ -469,12 +469,13 @@ class PluginUploader:
469
469
  "CONFIGURE_APIS",
470
470
  "UPDATE_API_CONFIGURATION",
471
471
  "PENDING_API_CONFIGURATION",
472
+ "FETCH_CONNECTIONS",
473
+ "FETCH_SYNCS",
474
+ "FETCH_SYNC_BRANCHES",
472
475
  "TEST_CALLBACK",
473
476
  "LIST_STAGES",
474
- "CREATE_EXTERNAL_ACCESS_INTEGRATION",
475
477
  "CREATE_GENERIC_SECRET_OBJECT",
476
478
  "CREATE_GENERIC_SECRET_OBJECT_FROM_EXISTING",
477
- "DROP_EXTERNAL_ACCESS_OBJECTS",
478
479
  "UPDATE_GENERIC_SECRET_OBJECT_OLD",
479
480
  "CREATE_OAUTH_SECRET_OBJECT",
480
481
  "CREATE_NETWORK_RULE_OBJECT",
@@ -576,9 +577,14 @@ $${}$$;
576
577
  os.chdir(direct_imports_path)
577
578
  # upload all files in the directory to the stage
578
579
  for path in sorted(Path(".").rglob("*")):
579
- print(f"Uploading {path} to stage")
580
+ # don't try to upload directories, only files
581
+ if path.is_dir():
582
+ continue
583
+ # figure out the path
584
+ relative_path = str(f"/{path.parent}") if path.parent != Path(".") else ""
585
+ print(f"Uploading {path} to stage under {relative_path}")
580
586
  self.session.sql(
581
- f"put file://{path} @{database_name}.{schema_name}.{stage_name} AUTO_COMPRESS=FALSE OVERWRITE=TRUE"
587
+ f"put file://{path} @{database_name}.{schema_name}.{stage_name}{relative_path} AUTO_COMPRESS=FALSE OVERWRITE=TRUE"
582
588
  ).collect()
583
589
  os.chdir(cwd)
584
590
 
@@ -676,13 +682,13 @@ GRANT USAGE ON FUNCTION PLUGIN.TOKEN() TO application role OMNATA_MANAGEMENT;
676
682
  }
677
683
  )
678
684
  manifest_file.write(content)
679
- custom_manifest_privileges = os.path.join(plugin_directory, "custom_manifest_privileges.yml")
685
+ custom_manifest_privileges = os.path.join(plugin_directory, "custom_manifest_section.yml")
680
686
  if os.path.exists(custom_manifest_privileges):
681
- print("Adding manifest privileges from custom_manifest_privileges.yml")
687
+ print("Adding manifest privileges from custom_manifest_section.yml")
682
688
  with open(
683
689
  custom_manifest_privileges, "r", encoding="utf-8"
684
690
  ) as custom_manifest_privileges_stream:
685
- setup_script.write(custom_manifest_privileges_stream.read() + "\n")
691
+ manifest_file.write(custom_manifest_privileges_stream.read() + "\n")
686
692
 
687
693
 
688
694
  print("Uploading app manifest to stage")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: omnata-plugin-devkit
3
- Version: 0.10.16a110
3
+ Version: 0.10.17a120
4
4
  Summary:
5
5
  Author: James Weakley
6
6
  Author-email: james.weakley@omnata.com
@@ -12,13 +12,14 @@ omnata_plugin_devkit/jinja_templates/CONNECTION_FORM.sql.jinja,sha256=OYHptcBx-T
12
12
  omnata_plugin_devkit/jinja_templates/CONNECTION_TEST.sql.jinja,sha256=JhBowvlAHBatQy3FsBismuUytlDddRFGj67ajVwHDgc,2993
13
13
  omnata_plugin_devkit/jinja_templates/CONSTRUCT_FORM_OPTION.sql.jinja,sha256=3LyQa01qTQuhH7zniDKDXgkgXUBiOe7TbK429Cydnq4,1497
14
14
  omnata_plugin_devkit/jinja_templates/CREATE_BILLING_EVENTS.sql.jinja,sha256=LXxe63MeamQeXmaFnT-76IeQ8CSrHcc0wK7u7UV_sAU,1487
15
- omnata_plugin_devkit/jinja_templates/CREATE_EXTERNAL_ACCESS_INTEGRATION.sql.jinja,sha256=10eRgr2YINTZ5o-7AUf9gdqfK1NjGYHwfw6B5yPu1DY,1968
16
15
  omnata_plugin_devkit/jinja_templates/CREATE_GENERIC_SECRET_OBJECT.sql.jinja,sha256=gH2V2aE3LWdFRoRwg6iJJJPCa06_LtflmGf8kjetcmE,900
17
16
  omnata_plugin_devkit/jinja_templates/CREATE_GENERIC_SECRET_OBJECT_FROM_EXISTING.sql.jinja,sha256=48xprYeO_Be9tFIFfsh6sDJQBvsr0DUnJdJJbiawdus,1646
18
17
  omnata_plugin_devkit/jinja_templates/CREATE_NETWORK_RULE_OBJECT.sql.jinja,sha256=uZfxdQBFGwYGg2dHaluTDVT_Gn5QHRCApgVnpSqxbvU,1688
19
18
  omnata_plugin_devkit/jinja_templates/CREATE_NETWORK_RULE_OBJECT_FROM_EXISTING.sql.jinja,sha256=U_AbqK1EBakA7KD-kkQCRBdN0dIG-tmoWZAq1YN0jwc,1466
20
19
  omnata_plugin_devkit/jinja_templates/CREATE_OAUTH_SECRET_OBJECT.sql.jinja,sha256=JeLx-g3ojY-gvrIHM1oR6xplZE_DsN0x5NSCCw5WARc,1292
21
- omnata_plugin_devkit/jinja_templates/DROP_EXTERNAL_ACCESS_OBJECTS.sql.jinja,sha256=d2DUqzARDS8EG0mcEV9NGb18oyjwOJHwjc3U0jYSWSA,2279
20
+ omnata_plugin_devkit/jinja_templates/FETCH_CONNECTIONS.sql.jinja,sha256=8nmhK6YiJt-6HZnMHNCQ_D0N2XMeMU3zchb97Tl9Rdg,706
21
+ omnata_plugin_devkit/jinja_templates/FETCH_SYNCS.sql.jinja,sha256=cOiV_IpvrJfkfOXciY7ghiIN8W5n3wuCOZ9MalTnoyU,726
22
+ omnata_plugin_devkit/jinja_templates/FETCH_SYNC_BRANCHES.sql.jinja,sha256=2jEL5GmLkxU9ospU-RFI5lkhRwPdWE7126BBC-Q6z8A,740
22
23
  omnata_plugin_devkit/jinja_templates/INBOUND_LIST_STREAMS.sql.jinja,sha256=GO3dUIYelkySrySAZVXeK03al9y83J8jI8LYA_TGtEg,4194
23
24
  omnata_plugin_devkit/jinja_templates/LIST_STAGES.sql.jinja,sha256=J2E4Gy5GkkJoiVlD-e1mu_DQNXTUw9WqWWZDwXKDV8k,903
24
25
  omnata_plugin_devkit/jinja_templates/NETWORK_ADDRESSES.sql.jinja,sha256=Wqc5yiFlz9bCWKAgOeIVxFrlrd6LBNgehunmDjDQJ-k,2378
@@ -38,14 +39,14 @@ omnata_plugin_devkit/jinja_templates/UPDATE_API_CONFIGURATION.sql.jinja,sha256=R
38
39
  omnata_plugin_devkit/jinja_templates/UPDATE_GENERIC_SECRET_OBJECT.sql.jinja,sha256=3sPKUcwiwiWQvN19JGFN0sSM_2yGt-WYDDYed-f94Tk,1819
39
40
  omnata_plugin_devkit/jinja_templates/UPDATE_GENERIC_SECRET_OBJECT_OLD.sql.jinja,sha256=_5aUbAHSXgcBO4ZXuWD85MoKdbNECqYpiMC1ufIMLYw,716
40
41
  omnata_plugin_devkit/jinja_templates/UPDATE_NETWORK_RULE_OBJECT.sql.jinja,sha256=5WrpdpBGX5LMJ-SWAySmfMzEk0dphawOmbdwA1iAOFA,1249
41
- omnata_plugin_devkit/jinja_templates/manifest.yml.jinja,sha256=EsVZ1KRxMJsP2VDtRfnz18COy349JVmBrUUOLxF4LR4,926
42
+ omnata_plugin_devkit/jinja_templates/manifest.yml.jinja,sha256=UZ6Q2wIx3MimDeDDL--_BtfQwdfJsB7ssC8eS7Sk_nI,603
42
43
  omnata_plugin_devkit/native_app_packaging.py,sha256=Htjh_7PBUPI21ylpYYSQHikcP7o3kL7EW8CRWASEF84,4840
43
44
  omnata_plugin_devkit/plugin_registration.py,sha256=1oINmXBuRFFTD4TdAriGjJL-qHh3C_k1Z_EN7eFDI_M,2572
44
45
  omnata_plugin_devkit/plugin_template/icon.svg,sha256=xEXOqutQhh8JaKU3xgyx9Weq1KwFNeIkI8OVzyerLz4,596
45
46
  omnata_plugin_devkit/plugin_template/plugin.py,sha256=VI2J64tRvrwuUbCHaB7SCO-QMisyeO1qTlamr9me_iM,15465
46
47
  omnata_plugin_devkit/plugin_template/plugin_development.ipynb,sha256=8_rkQnwWKe31MQp2rbM4ySjtET3FlAQcJVW8ix5Bh50,2912
47
48
  omnata_plugin_devkit/plugin_template/requirements.txt,sha256=nWMMGhIC_HIZHWTImksSLNU9mIAh0HlQHFVAS0rUKnA,30
48
- omnata_plugin_devkit/plugin_uploader.py,sha256=r30KQO-8LEb5PXcqN_fVoE1IxWbybfGa3uUHuhgli3Q,42247
49
+ omnata_plugin_devkit/plugin_uploader.py,sha256=8q4hrxvCibF7fikkhLp4nKILugCx6Fk16k2TbLiyhog,42558
49
50
  omnata_plugin_devkit/snowcli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
51
  omnata_plugin_devkit/snowcli/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
52
  omnata_plugin_devkit/snowcli/cli/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -70,7 +71,7 @@ omnata_plugin_devkit/snowcli/cli/templates/environment.yml.jinja,sha256=LRT00o5J
70
71
  omnata_plugin_devkit/streamlit/plugin_configuration.py,sha256=k89uspeQ_t5_Wbb_aXRL-fvbypXtax_r40oxxqB6fKc,100172
71
72
  omnata_plugin_devkit/test_step_definitions.py,sha256=Und60RpAn0YcJn-i1FpzUzVHRPnDB5QqO6YnZm2l6aw,53205
72
73
  omnata_plugin_devkit/utils.py,sha256=pFUltWEcb7Wxq0TPUdjvNPZG0AXHVrU-fZ874Q-EgUU,1378
73
- omnata_plugin_devkit-0.10.16a110.dist-info/LICENSE,sha256=rGaMQG3R3F5-JGDp_-rlMKpDIkg5n0SI4kctTk8eZSI,56
74
- omnata_plugin_devkit-0.10.16a110.dist-info/METADATA,sha256=QR7n6l7Gi3oQIkpjHVlHWKQcT6J43dp_6K-qBrLG_Hk,1192
75
- omnata_plugin_devkit-0.10.16a110.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
76
- omnata_plugin_devkit-0.10.16a110.dist-info/RECORD,,
74
+ omnata_plugin_devkit-0.10.17a120.dist-info/LICENSE,sha256=rGaMQG3R3F5-JGDp_-rlMKpDIkg5n0SI4kctTk8eZSI,56
75
+ omnata_plugin_devkit-0.10.17a120.dist-info/METADATA,sha256=ECZDVQd9GBHKRcvGdnGCotjOCO2VTHN_aaf9h5KDyFk,1192
76
+ omnata_plugin_devkit-0.10.17a120.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
77
+ omnata_plugin_devkit-0.10.17a120.dist-info/RECORD,,
@@ -1,52 +0,0 @@
1
- create or replace procedure PLUGIN.CREATE_EXTERNAL_ACCESS_INTEGRATION(
2
- EAI_NAME varchar,
3
- SECRET_NAMES ARRAY,
4
- NETWORK_RULE_NAMES ARRAY)
5
- returns object
6
- language javascript
7
- COMMENT = $$
8
- Creates an external access integration, bound to the provided secret(s) and network rule(s)
9
- $$
10
- execute as owner
11
- as
12
- $$
13
- try{
14
- if (SECRET_NAMES === null || SECRET_NAMES === undefined || SECRET_NAMES.length==0){
15
- throw new Error('Secret names parameter must contain at least one secret');
16
- }
17
- if (NETWORK_RULE_NAMES === null || NETWORK_RULE_NAMES === undefined || NETWORK_RULE_NAMES.length==0){
18
- throw new Error('Network rule names parameter must contain at least one secret');
19
- }
20
- var bindings = [EAI_NAME];
21
- const secretNamesClauses = SECRET_NAMES.map((s)=>{return `'${s}'`}).join(',');
22
- const networkRuleNamesClauses = NETWORK_RULE_NAMES.map((n)=>{return `'${n}'`}).join(',');
23
- snowflake.createStatement( {
24
- sqlText: `CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION IDENTIFIER(?)
25
- ALLOWED_NETWORK_RULES = (${networkRuleNamesClauses})
26
- ALLOWED_AUTHENTICATION_SECRETS = (${secretNamesClauses})
27
- ENABLED = true`,
28
- binds:bindings
29
- } ).execute();
30
- snowflake.createStatement( {
31
- sqlText: `GRANT USAGE ON INTEGRATION IDENTIFIER(?) TO APPLICATION ROLE OMNATA_MANAGEMENT`,
32
- binds:[EAI_NAME]
33
- } ).execute();
34
- return {
35
- "success": true,
36
- "data": null
37
- }
38
- }
39
- catch(e){
40
- if (String(e).indexOf('Insufficient privileges to operate on account') > -1){
41
- e = 'You must grant the plugin application the CREATE EXTERNAL ACCESS INTEGRATION privilege in order to proceed';
42
- }
43
- return {
44
- "success": false,
45
- "error": `CREATE_EXTERNAL_ACCESS_INTEGRATION: ${String(e)}`
46
- }
47
- }
48
- $$
49
- ;
50
-
51
- grant usage on procedure PLUGIN.CREATE_EXTERNAL_ACCESS_INTEGRATION(VARCHAR,ARRAY,ARRAY)
52
- to application role OMNATA_MANAGEMENT;
@@ -1,82 +0,0 @@
1
- create or replace procedure PLUGIN.DROP_EXTERNAL_ACCESS_OBJECTS(
2
- EAI_NAME varchar,
3
- SECRET_NAMES ARRAY,
4
- NETWORK_RULE_NAMES ARRAY)
5
- returns object
6
- language javascript
7
- COMMENT = $$
8
- Drops an external access integration, and associated secrets/network rules.
9
- Due to Snowflake privilege model changes over time, this is an opportunistic deletion.
10
- Instead of erroring it will create event log
11
- errors and provide successflags back to the caller.
12
- $$
13
- execute as owner
14
- as
15
- $$
16
- try{
17
- var droppedEai = false;
18
- try{
19
- snowflake.createStatement( {
20
- sqlText: `DROP EXTERNAL ACCESS INTEGRATION IDENTIFIER(?)`,
21
- binds:[EAI_NAME]
22
- } ).execute();
23
- droppedEai = true;
24
- }
25
- catch(e){
26
- snowflake.log("error", e.message);
27
- }
28
-
29
- var droppedSecrets = false;
30
- try{
31
- if (SECRET_NAMES !== null && SECRET_NAMES !== undefined && SECRET_NAMES.length > 0){
32
- for (let i = 0; i < SECRET_NAMES.length; i++) {
33
- const secretName = SECRET_NAMES[i];
34
- snowflake.createStatement( {
35
- sqlText: `DROP SECRET IDENTIFIER(?)`,
36
- binds:[secretName]
37
- } ).execute();
38
- }
39
- droppedSecrets = true;
40
- }
41
- }
42
- catch(e){
43
- snowflake.log("error", e.message);
44
- }
45
-
46
- var droppedNetworkRules=false;
47
- try{
48
- if (NETWORK_RULE_NAMES !== null && NETWORK_RULE_NAMES !== undefined && NETWORK_RULE_NAMES.length > 0){
49
- for (let i = 0; i < NETWORK_RULE_NAMES.length; i++) {
50
- const ruleName = NETWORK_RULE_NAMES[i];
51
- snowflake.createStatement( {
52
- sqlText: `DROP NETWORK RULE IDENTIFIER(?)`,
53
- binds:[ruleName]
54
- } ).execute();
55
- }
56
- droppedNetworkRules = true;
57
- }
58
- }
59
- catch(e){
60
- snowflake.log("error", e.message);
61
- }
62
-
63
- return {
64
- "success": true,
65
- "data": {
66
- "droppedEai":droppedEai,
67
- "droppedSecrets":droppedSecrets,
68
- "droppedNetworkRules": droppedNetworkRules
69
- }
70
- }
71
- }
72
- catch(e){
73
- return {
74
- "success": false,
75
- "error": `DROP_EXTERNAL_ACCESS_OBJECTS: ${String(e)}`
76
- }
77
- }
78
- $$
79
- ;
80
-
81
- grant usage on procedure PLUGIN.DROP_EXTERNAL_ACCESS_OBJECTS(VARCHAR,ARRAY,ARRAY)
82
- to application role OMNATA_MANAGEMENT;