datahub-agent-context 1.3.1.10rc1__py3-none-any.whl → 1.4.0rc2__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.
Files changed (42) hide show
  1. datahub_agent_context/__init__.py +11 -3
  2. datahub_agent_context/_version.py +1 -1
  3. datahub_agent_context/cli.py +152 -0
  4. datahub_agent_context/context.py +47 -34
  5. datahub_agent_context/langchain_tools/builder.py +6 -4
  6. datahub_agent_context/mcp_tools/base.py +6 -3
  7. datahub_agent_context/mcp_tools/save_document.py +634 -0
  8. datahub_agent_context/snowflake/__init__.py +0 -0
  9. datahub_agent_context/snowflake/generate_udfs.py +306 -0
  10. datahub_agent_context/snowflake/generators/__init__.py +21 -0
  11. datahub_agent_context/snowflake/generators/configuration.py +104 -0
  12. datahub_agent_context/snowflake/generators/cortex_agent.py +725 -0
  13. datahub_agent_context/snowflake/generators/network_rules.py +53 -0
  14. datahub_agent_context/snowflake/generators/stored_procedure.py +87 -0
  15. datahub_agent_context/snowflake/snowflake.py +662 -0
  16. datahub_agent_context/snowflake/udfs/__init__.py +1 -0
  17. datahub_agent_context/snowflake/udfs/add_glossary_terms.py +61 -0
  18. datahub_agent_context/snowflake/udfs/add_owners.py +59 -0
  19. datahub_agent_context/snowflake/udfs/add_structured_properties.py +57 -0
  20. datahub_agent_context/snowflake/udfs/add_tags.py +61 -0
  21. datahub_agent_context/snowflake/udfs/base.py +45 -0
  22. datahub_agent_context/snowflake/udfs/get_dataset_queries.py +68 -0
  23. datahub_agent_context/snowflake/udfs/get_entities.py +47 -0
  24. datahub_agent_context/snowflake/udfs/get_lineage.py +61 -0
  25. datahub_agent_context/snowflake/udfs/get_lineage_paths_between.py +69 -0
  26. datahub_agent_context/snowflake/udfs/get_me.py +51 -0
  27. datahub_agent_context/snowflake/udfs/grep_documents.py +70 -0
  28. datahub_agent_context/snowflake/udfs/list_schema_fields.py +80 -0
  29. datahub_agent_context/snowflake/udfs/remove_domains.py +45 -0
  30. datahub_agent_context/snowflake/udfs/remove_glossary_terms.py +57 -0
  31. datahub_agent_context/snowflake/udfs/remove_owners.py +56 -0
  32. datahub_agent_context/snowflake/udfs/remove_structured_properties.py +56 -0
  33. datahub_agent_context/snowflake/udfs/remove_tags.py +57 -0
  34. datahub_agent_context/snowflake/udfs/search_datahub.py +71 -0
  35. datahub_agent_context/snowflake/udfs/search_documents.py +58 -0
  36. datahub_agent_context/snowflake/udfs/set_domains.py +55 -0
  37. datahub_agent_context/snowflake/udfs/update_description.py +60 -0
  38. {datahub_agent_context-1.3.1.10rc1.dist-info → datahub_agent_context-1.4.0rc2.dist-info}/METADATA +21 -14
  39. datahub_agent_context-1.4.0rc2.dist-info/RECORD +66 -0
  40. datahub_agent_context-1.3.1.10rc1.dist-info/RECORD +0 -34
  41. {datahub_agent_context-1.3.1.10rc1.dist-info → datahub_agent_context-1.4.0rc2.dist-info}/WHEEL +0 -0
  42. {datahub_agent_context-1.3.1.10rc1.dist-info → datahub_agent_context-1.4.0rc2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,53 @@
1
+ """Generate Snowflake network rules SQL."""
2
+
3
+
4
+ def generate_network_rules_sql(datahub_domain: str) -> str:
5
+ """Generate network rules SQL that uses configuration variables.
6
+
7
+ Args:
8
+ datahub_domain: The domain extracted from the DataHub URL (e.g., 'fieldeng.acryl.io')
9
+ """
10
+ return f"""-- ============================================================================
11
+ -- Step 1: Network Rules and External Access Integration for DataHub API
12
+ -- ============================================================================
13
+ -- This script creates the network rule and external access integration
14
+ -- required for UDFs to make outbound calls to DataHub
15
+ --
16
+ -- Prerequisites:
17
+ -- - Run 00_configuration.sql first to set variables
18
+ -- - You must have ACCOUNTADMIN role or equivalent privileges
19
+ -- ============================================================================
20
+
21
+ -- Use the configured database and schema
22
+ USE DATABASE IDENTIFIER($SF_DATABASE);
23
+ USE SCHEMA IDENTIFIER($SF_SCHEMA);
24
+ USE WAREHOUSE IDENTIFIER($SF_WAREHOUSE);
25
+
26
+ -- Step 1: Create network rule for DataHub API
27
+ -- For EGRESS mode with external access, use HOST_PORT type with domain name
28
+ -- Note: Snowflake resolves the domain to IPs automatically
29
+ CREATE OR REPLACE NETWORK RULE datahub_api_rule
30
+ MODE = EGRESS
31
+ TYPE = HOST_PORT
32
+ VALUE_LIST = ('{datahub_domain}')
33
+ COMMENT = 'Network rule for {datahub_domain} DataHub API access';
34
+
35
+ -- Step 2: Create external access integration
36
+ CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION datahub_access
37
+ ALLOWED_NETWORK_RULES = (datahub_api_rule)
38
+ ALLOWED_AUTHENTICATION_SECRETS = (datahub_url, datahub_token)
39
+ ENABLED = TRUE
40
+ COMMENT = 'External access integration for DataHub API calls';
41
+
42
+ -- Step 3: Grant usage on integration to the specified role
43
+ GRANT USAGE ON INTEGRATION datahub_access TO ROLE IDENTIFIER($SF_ROLE);
44
+
45
+ -- Verify the setup
46
+ SHOW NETWORK RULES LIKE 'datahub_api_rule';
47
+ SHOW INTEGRATIONS LIKE 'datahub_access';
48
+
49
+ SELECT
50
+ 'Network rule and external access integration created successfully!' AS status,
51
+ '{datahub_domain}' AS datahub_domain,
52
+ $SF_DATABASE || '.' || $SF_SCHEMA AS location;
53
+ """
@@ -0,0 +1,87 @@
1
+ """Generate Snowflake stored procedure SQL."""
2
+
3
+
4
+ def generate_stored_procedure_sql() -> str:
5
+ """Generate stored procedure SQL that uses configuration variables."""
6
+ return """-- ============================================================================
7
+ -- Step 3: Create JavaScript Stored Procedure for SQL Execution
8
+ -- ============================================================================
9
+ -- This creates a stored procedure that can execute SELECT queries dynamically
10
+ -- and return results as JSON
11
+ --
12
+ -- Prerequisites:
13
+ -- - Run 00_configuration.sql first to set variables
14
+ -- ============================================================================
15
+
16
+ USE DATABASE IDENTIFIER($SF_DATABASE);
17
+ USE SCHEMA IDENTIFIER($SF_SCHEMA);
18
+ USE WAREHOUSE IDENTIFIER($SF_WAREHOUSE);
19
+
20
+ -- Create the JavaScript stored procedure (using CREATE OR REPLACE, so no need to drop first)
21
+ CREATE OR REPLACE PROCEDURE EXECUTE_DYNAMIC_SQL(SQL_TEXT STRING)
22
+ RETURNS VARIANT
23
+ LANGUAGE JAVASCRIPT
24
+ EXECUTE AS CALLER
25
+ AS
26
+ $$
27
+ // Validate that it's a SELECT query only
28
+ var queryUpper = SQL_TEXT.trim().toUpperCase();
29
+ if (!queryUpper.startsWith('SELECT')) {
30
+ return {
31
+ "success": false,
32
+ "error": "Only SELECT queries are allowed. Query must start with SELECT.",
33
+ "status": 400
34
+ };
35
+ }
36
+
37
+ try {
38
+ var stmt = snowflake.createStatement({ sqlText: SQL_TEXT });
39
+ var rs = stmt.execute();
40
+
41
+ var results = [];
42
+ var columns = [];
43
+
44
+ // Get column names from the first row metadata
45
+ var columnCount = rs.getColumnCount();
46
+ for (var i = 1; i <= columnCount; i++) {
47
+ columns.push(rs.getColumnName(i));
48
+ }
49
+
50
+ // Process all rows
51
+ while (rs.next()) {
52
+ var row = {};
53
+ for (var i = 1; i <= columnCount; i++) {
54
+ var colName = rs.getColumnName(i);
55
+ var colValue = rs.getColumnValue(i);
56
+ // Handle null values and convert to JSON-serializable format
57
+ row[colName] = colValue;
58
+ }
59
+ results.push(row);
60
+ }
61
+
62
+ return {
63
+ "success": true,
64
+ "columns": columns,
65
+ "rows": results,
66
+ "row_count": results.length
67
+ };
68
+
69
+ } catch (err) {
70
+ return {
71
+ "success": false,
72
+ "error": err.message,
73
+ "status": 500
74
+ };
75
+ }
76
+ $$;
77
+
78
+ -- Grant usage on the procedure
79
+ GRANT USAGE ON PROCEDURE EXECUTE_DYNAMIC_SQL(STRING) TO ROLE IDENTIFIER($SF_ROLE);
80
+
81
+ -- Verify it was created
82
+ DESCRIBE PROCEDURE EXECUTE_DYNAMIC_SQL(STRING);
83
+
84
+ SELECT
85
+ 'Stored procedure EXECUTE_DYNAMIC_SQL created successfully!' AS status,
86
+ $SF_DATABASE || '.' || $SF_SCHEMA || '.EXECUTE_DYNAMIC_SQL' AS procedure_name;
87
+ """