outhad-integrations 0.32.0
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.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +43 -0
- data/.ruby-version +1 -0
- data/.vscode/settings.json +5 -0
- data/README.md +76 -0
- data/Rakefile +12 -0
- data/lib/outhad/integrations/config.rb +14 -0
- data/lib/outhad/integrations/core/base_connector.rb +79 -0
- data/lib/outhad/integrations/core/constants.rb +103 -0
- data/lib/outhad/integrations/core/destination_connector.rb +20 -0
- data/lib/outhad/integrations/core/fullrefresher.rb +19 -0
- data/lib/outhad/integrations/core/http_client.rb +17 -0
- data/lib/outhad/integrations/core/http_helper.rb +36 -0
- data/lib/outhad/integrations/core/query_builder.rb +33 -0
- data/lib/outhad/integrations/core/rate_limiter.rb +19 -0
- data/lib/outhad/integrations/core/source_connector.rb +66 -0
- data/lib/outhad/integrations/core/streaming_http_client.rb +21 -0
- data/lib/outhad/integrations/core/unstructured_source_connector.rb +52 -0
- data/lib/outhad/integrations/core/utils.rb +123 -0
- data/lib/outhad/integrations/core/vector_source_connector.rb +14 -0
- data/lib/outhad/integrations/destination/airtable/client.rb +157 -0
- data/lib/outhad/integrations/destination/airtable/config/catalog.json +6 -0
- data/lib/outhad/integrations/destination/airtable/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/airtable/config/spec.json +23 -0
- data/lib/outhad/integrations/destination/airtable/icon.svg +6 -0
- data/lib/outhad/integrations/destination/airtable/schema_helper.rb +141 -0
- data/lib/outhad/integrations/destination/ais_data_store/client.rb +130 -0
- data/lib/outhad/integrations/destination/ais_data_store/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/ais_data_store/config/spec.json +68 -0
- data/lib/outhad/integrations/destination/ais_data_store/icon.svg +4 -0
- data/lib/outhad/integrations/destination/amazon_s3/client.rb +92 -0
- data/lib/outhad/integrations/destination/amazon_s3/config/catalog.json +16 -0
- data/lib/outhad/integrations/destination/amazon_s3/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/amazon_s3/config/spec.json +56 -0
- data/lib/outhad/integrations/destination/amazon_s3/icon.svg +34 -0
- data/lib/outhad/integrations/destination/databricks_lakehouse/client.rb +147 -0
- data/lib/outhad/integrations/destination/databricks_lakehouse/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/databricks_lakehouse/config/spec.json +44 -0
- data/lib/outhad/integrations/destination/databricks_lakehouse/icon.svg +65 -0
- data/lib/outhad/integrations/destination/facebook_custom_audience/client.rb +125 -0
- data/lib/outhad/integrations/destination/facebook_custom_audience/config/catalog.json +42 -0
- data/lib/outhad/integrations/destination/facebook_custom_audience/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/facebook_custom_audience/config/spec.json +28 -0
- data/lib/outhad/integrations/destination/facebook_custom_audience/icon.svg +23 -0
- data/lib/outhad/integrations/destination/google_sheets/client.rb +240 -0
- data/lib/outhad/integrations/destination/google_sheets/config/catalog.json +6 -0
- data/lib/outhad/integrations/destination/google_sheets/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/google_sheets/config/spec.json +75 -0
- data/lib/outhad/integrations/destination/google_sheets/icon.svg +1 -0
- data/lib/outhad/integrations/destination/http/client.rb +106 -0
- data/lib/outhad/integrations/destination/http/config/catalog.json +16 -0
- data/lib/outhad/integrations/destination/http/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/http/config/spec.json +24 -0
- data/lib/outhad/integrations/destination/http/icon.svg +9 -0
- data/lib/outhad/integrations/destination/hubspot/client.rb +122 -0
- data/lib/outhad/integrations/destination/hubspot/config/catalog.json +351 -0
- data/lib/outhad/integrations/destination/hubspot/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/hubspot/config/spec.json +18 -0
- data/lib/outhad/integrations/destination/hubspot/icon.svg +5 -0
- data/lib/outhad/integrations/destination/iterable/client.rb +111 -0
- data/lib/outhad/integrations/destination/iterable/config/catalog.json +47 -0
- data/lib/outhad/integrations/destination/iterable/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/iterable/config/spec.json +19 -0
- data/lib/outhad/integrations/destination/iterable/icon.svg +71 -0
- data/lib/outhad/integrations/destination/klaviyo/client.rb +119 -0
- data/lib/outhad/integrations/destination/klaviyo/config/catalog.json +103 -0
- data/lib/outhad/integrations/destination/klaviyo/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/klaviyo/config/spec.json +24 -0
- data/lib/outhad/integrations/destination/klaviyo/icon.svg +6 -0
- data/lib/outhad/integrations/destination/mailchimp/client.rb +141 -0
- data/lib/outhad/integrations/destination/mailchimp/config/catalog.json +142 -0
- data/lib/outhad/integrations/destination/mailchimp/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/mailchimp/config/spec.json +28 -0
- data/lib/outhad/integrations/destination/mailchimp/icon.svg +4 -0
- data/lib/outhad/integrations/destination/maria_db/client.rb +114 -0
- data/lib/outhad/integrations/destination/maria_db/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/maria_db/config/spec.json +48 -0
- data/lib/outhad/integrations/destination/maria_db/icon.svg +15 -0
- data/lib/outhad/integrations/destination/microsoft_dynamics/client.rb +150 -0
- data/lib/outhad/integrations/destination/microsoft_dynamics/config/catalog.json +161 -0
- data/lib/outhad/integrations/destination/microsoft_dynamics/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/microsoft_dynamics/config/spec.json +35 -0
- data/lib/outhad/integrations/destination/microsoft_dynamics/icon.svg +2 -0
- data/lib/outhad/integrations/destination/microsoft_excel/client.rb +198 -0
- data/lib/outhad/integrations/destination/microsoft_excel/config/catalog.json +7 -0
- data/lib/outhad/integrations/destination/microsoft_excel/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/microsoft_excel/config/spec.json +19 -0
- data/lib/outhad/integrations/destination/microsoft_excel/icon.svg +18 -0
- data/lib/outhad/integrations/destination/microsoft_sql/client.rb +137 -0
- data/lib/outhad/integrations/destination/microsoft_sql/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/microsoft_sql/config/spec.json +68 -0
- data/lib/outhad/integrations/destination/microsoft_sql/icon.svg +22 -0
- data/lib/outhad/integrations/destination/odoo/client.rb +109 -0
- data/lib/outhad/integrations/destination/odoo/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/odoo/config/spec.json +39 -0
- data/lib/outhad/integrations/destination/odoo/icon.svg +21 -0
- data/lib/outhad/integrations/destination/oracle_db/client.rb +112 -0
- data/lib/outhad/integrations/destination/oracle_db/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/oracle_db/config/spec.json +47 -0
- data/lib/outhad/integrations/destination/oracle_db/icon.svg +4 -0
- data/lib/outhad/integrations/destination/pinecone_db/client.rb +154 -0
- data/lib/outhad/integrations/destination/pinecone_db/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/pinecone_db/config/spec.json +32 -0
- data/lib/outhad/integrations/destination/pinecone_db/icon.svg +1 -0
- data/lib/outhad/integrations/destination/postgresql/client.rb +130 -0
- data/lib/outhad/integrations/destination/postgresql/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/postgresql/config/spec.json +68 -0
- data/lib/outhad/integrations/destination/postgresql/icon.svg +20 -0
- data/lib/outhad/integrations/destination/qdrant/client.rb +184 -0
- data/lib/outhad/integrations/destination/qdrant/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/qdrant/config/spec.json +23 -0
- data/lib/outhad/integrations/destination/qdrant/icon.svg +1 -0
- data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/client.rb +136 -0
- data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/config/catalog.json +6 -0
- data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/config/meta.json +16 -0
- data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/config/spec.json +52 -0
- data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/icon.svg +16 -0
- data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/schema_helper.rb +132 -0
- data/lib/outhad/integrations/destination/salesforce_crm/client.rb +114 -0
- data/lib/outhad/integrations/destination/salesforce_crm/config/catalog.json +320 -0
- data/lib/outhad/integrations/destination/salesforce_crm/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/salesforce_crm/config/spec.json +46 -0
- data/lib/outhad/integrations/destination/salesforce_crm/icon.svg +16 -0
- data/lib/outhad/integrations/destination/sftp/client.rb +186 -0
- data/lib/outhad/integrations/destination/sftp/config/catalog.json +16 -0
- data/lib/outhad/integrations/destination/sftp/config/meta.json +16 -0
- data/lib/outhad/integrations/destination/sftp/config/spec.json +73 -0
- data/lib/outhad/integrations/destination/sftp/icon.svg +1 -0
- data/lib/outhad/integrations/destination/slack/client.rb +125 -0
- data/lib/outhad/integrations/destination/slack/config/catalog.json +22 -0
- data/lib/outhad/integrations/destination/slack/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/slack/config/spec.json +23 -0
- data/lib/outhad/integrations/destination/slack/icon.svg +26 -0
- data/lib/outhad/integrations/destination/stripe/client.rb +94 -0
- data/lib/outhad/integrations/destination/stripe/config/catalog.json +128 -0
- data/lib/outhad/integrations/destination/stripe/config/meta.json +15 -0
- data/lib/outhad/integrations/destination/stripe/config/spec.json +18 -0
- data/lib/outhad/integrations/destination/stripe/icon.svg +10 -0
- data/lib/outhad/integrations/destination/zendesk/client.rb +132 -0
- data/lib/outhad/integrations/destination/zendesk/config/catalog.json +110 -0
- data/lib/outhad/integrations/destination/zendesk/config/meta.json +18 -0
- data/lib/outhad/integrations/destination/zendesk/config/spec.json +32 -0
- data/lib/outhad/integrations/destination/zendesk/icon.svg +63 -0
- data/lib/outhad/integrations/protocol/protocol.json +189 -0
- data/lib/outhad/integrations/protocol/protocol.rb +228 -0
- data/lib/outhad/integrations/rollout.rb +66 -0
- data/lib/outhad/integrations/service.rb +55 -0
- data/lib/outhad/integrations/source/amazon_s3/client.rb +235 -0
- data/lib/outhad/integrations/source/amazon_s3/config/meta.json +16 -0
- data/lib/outhad/integrations/source/amazon_s3/config/spec.json +119 -0
- data/lib/outhad/integrations/source/amazon_s3/icon.svg +34 -0
- data/lib/outhad/integrations/source/anthropic/client.rb +135 -0
- data/lib/outhad/integrations/source/anthropic/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/anthropic/config/meta.json +16 -0
- data/lib/outhad/integrations/source/anthropic/config/spec.json +56 -0
- data/lib/outhad/integrations/source/anthropic/icon.svg +1 -0
- data/lib/outhad/integrations/source/aws_athena/client.rb +109 -0
- data/lib/outhad/integrations/source/aws_athena/config/meta.json +16 -0
- data/lib/outhad/integrations/source/aws_athena/config/spec.json +63 -0
- data/lib/outhad/integrations/source/aws_athena/icon.svg +22 -0
- data/lib/outhad/integrations/source/aws_bedrock_model/client.rb +91 -0
- data/lib/outhad/integrations/source/aws_bedrock_model/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/aws_bedrock_model/config/meta.json +16 -0
- data/lib/outhad/integrations/source/aws_bedrock_model/config/spec.json +58 -0
- data/lib/outhad/integrations/source/aws_bedrock_model/icon.svg +1 -0
- data/lib/outhad/integrations/source/aws_sagemaker_model/client.rb +79 -0
- data/lib/outhad/integrations/source/aws_sagemaker_model/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/aws_sagemaker_model/config/meta.json +16 -0
- data/lib/outhad/integrations/source/aws_sagemaker_model/config/spec.json +52 -0
- data/lib/outhad/integrations/source/aws_sagemaker_model/icon.svg +7 -0
- data/lib/outhad/integrations/source/bigquery/client.rb +98 -0
- data/lib/outhad/integrations/source/bigquery/config/meta.json +16 -0
- data/lib/outhad/integrations/source/bigquery/config/spec.json +83 -0
- data/lib/outhad/integrations/source/bigquery/icon.svg +1 -0
- data/lib/outhad/integrations/source/clickhouse/client.rb +102 -0
- data/lib/outhad/integrations/source/clickhouse/config/meta.json +16 -0
- data/lib/outhad/integrations/source/clickhouse/config/spec.json +42 -0
- data/lib/outhad/integrations/source/clickhouse/icon.svg +25 -0
- data/lib/outhad/integrations/source/databricks/client.rb +98 -0
- data/lib/outhad/integrations/source/databricks/config/meta.json +17 -0
- data/lib/outhad/integrations/source/databricks/config/spec.json +56 -0
- data/lib/outhad/integrations/source/databricks/icon.svg +19 -0
- data/lib/outhad/integrations/source/databrics_model/client.rb +89 -0
- data/lib/outhad/integrations/source/databrics_model/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/databrics_model/config/meta.json +17 -0
- data/lib/outhad/integrations/source/databrics_model/config/spec.json +63 -0
- data/lib/outhad/integrations/source/databrics_model/icon.svg +19 -0
- data/lib/outhad/integrations/source/firecrawl/client.rb +151 -0
- data/lib/outhad/integrations/source/firecrawl/config/catalog.json +29 -0
- data/lib/outhad/integrations/source/firecrawl/config/meta.json +17 -0
- data/lib/outhad/integrations/source/firecrawl/config/spec.json +31 -0
- data/lib/outhad/integrations/source/firecrawl/icon.svg +4 -0
- data/lib/outhad/integrations/source/generic_open_ai/client.rb +118 -0
- data/lib/outhad/integrations/source/generic_open_ai/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/generic_open_ai/config/meta.json +16 -0
- data/lib/outhad/integrations/source/generic_open_ai/config/spec.json +63 -0
- data/lib/outhad/integrations/source/generic_open_ai/icon.svg +6 -0
- data/lib/outhad/integrations/source/google_vertex_model/client.rb +83 -0
- data/lib/outhad/integrations/source/google_vertex_model/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/google_vertex_model/config/meta.json +17 -0
- data/lib/outhad/integrations/source/google_vertex_model/config/spec.json +105 -0
- data/lib/outhad/integrations/source/google_vertex_model/icon.svg +2 -0
- data/lib/outhad/integrations/source/http_model/client.rb +108 -0
- data/lib/outhad/integrations/source/http_model/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/http_model/config/meta.json +16 -0
- data/lib/outhad/integrations/source/http_model/config/spec.json +70 -0
- data/lib/outhad/integrations/source/http_model/icon.svg +9 -0
- data/lib/outhad/integrations/source/intuit_quick_books/client.rb +213 -0
- data/lib/outhad/integrations/source/intuit_quick_books/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/intuit_quick_books/config/meta.json +17 -0
- data/lib/outhad/integrations/source/intuit_quick_books/config/spec.json +44 -0
- data/lib/outhad/integrations/source/intuit_quick_books/icon.svg +1 -0
- data/lib/outhad/integrations/source/maria_db/client.rb +92 -0
- data/lib/outhad/integrations/source/maria_db/config/meta.json +16 -0
- data/lib/outhad/integrations/source/maria_db/config/spec.json +48 -0
- data/lib/outhad/integrations/source/maria_db/icon.svg +15 -0
- data/lib/outhad/integrations/source/odoo/client.rb +106 -0
- data/lib/outhad/integrations/source/odoo/config/meta.json +15 -0
- data/lib/outhad/integrations/source/odoo/config/spec.json +39 -0
- data/lib/outhad/integrations/source/odoo/icon.svg +21 -0
- data/lib/outhad/integrations/source/open_ai/client.rb +118 -0
- data/lib/outhad/integrations/source/open_ai/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/open_ai/config/meta.json +16 -0
- data/lib/outhad/integrations/source/open_ai/config/spec.json +56 -0
- data/lib/outhad/integrations/source/open_ai/icon.svg +1 -0
- data/lib/outhad/integrations/source/oracle_db/client.rb +127 -0
- data/lib/outhad/integrations/source/oracle_db/config/meta.json +16 -0
- data/lib/outhad/integrations/source/oracle_db/config/spec.json +47 -0
- data/lib/outhad/integrations/source/oracle_db/icon.svg +4 -0
- data/lib/outhad/integrations/source/pinecone_db/client.rb +73 -0
- data/lib/outhad/integrations/source/pinecone_db/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/pinecone_db/config/meta.json +16 -0
- data/lib/outhad/integrations/source/pinecone_db/config/spec.json +34 -0
- data/lib/outhad/integrations/source/pinecone_db/icon.svg +2 -0
- data/lib/outhad/integrations/source/postgresql/client.rb +112 -0
- data/lib/outhad/integrations/source/postgresql/config/meta.json +16 -0
- data/lib/outhad/integrations/source/postgresql/config/spec.json +86 -0
- data/lib/outhad/integrations/source/postgresql/icon.svg +20 -0
- data/lib/outhad/integrations/source/qdrant/client.rb +86 -0
- data/lib/outhad/integrations/source/qdrant/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/qdrant/config/meta.json +16 -0
- data/lib/outhad/integrations/source/qdrant/config/spec.json +29 -0
- data/lib/outhad/integrations/source/qdrant/icon.svg +1 -0
- data/lib/outhad/integrations/source/redshift/client.rb +109 -0
- data/lib/outhad/integrations/source/redshift/config/meta.json +16 -0
- data/lib/outhad/integrations/source/redshift/config/spec.json +71 -0
- data/lib/outhad/integrations/source/redshift/icon.svg +15 -0
- data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/client.rb +133 -0
- data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/config/meta.json +18 -0
- data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/config/spec.json +53 -0
- data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/icon.svg +16 -0
- data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/schema_helper.rb +130 -0
- data/lib/outhad/integrations/source/sftp/client.rb +133 -0
- data/lib/outhad/integrations/source/sftp/config/meta.json +16 -0
- data/lib/outhad/integrations/source/sftp/config/spec.json +59 -0
- data/lib/outhad/integrations/source/sftp/icon.svg +1 -0
- data/lib/outhad/integrations/source/snowflake/client.rb +92 -0
- data/lib/outhad/integrations/source/snowflake/config/meta.json +16 -0
- data/lib/outhad/integrations/source/snowflake/config/spec.json +82 -0
- data/lib/outhad/integrations/source/snowflake/icon.svg +10 -0
- data/lib/outhad/integrations/source/watsonx_ai/client.rb +194 -0
- data/lib/outhad/integrations/source/watsonx_ai/config/catalog.json +6 -0
- data/lib/outhad/integrations/source/watsonx_ai/config/meta.json +16 -0
- data/lib/outhad/integrations/source/watsonx_ai/config/spec.json +74 -0
- data/lib/outhad/integrations/source/watsonx_ai/icon.svg +1 -0
- data/lib/outhad/integrations/source/watsonx_data/client.rb +146 -0
- data/lib/outhad/integrations/source/watsonx_data/config/meta.json +17 -0
- data/lib/outhad/integrations/source/watsonx_data/config/spec.json +72 -0
- data/lib/outhad/integrations/source/watsonx_data/icon.svg +1 -0
- data/lib/outhad/integrations.rb +129 -0
- data/outhad-integrations.gemspec +79 -0
- data/sig/outhad/integrations.rbs +6 -0
- metadata +866 -0
@@ -0,0 +1,146 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Outhad::Integrations::Source
|
4
|
+
module WatsonxData
|
5
|
+
include Outhad::Integrations::Core
|
6
|
+
API_VERSION = "2021-05-01"
|
7
|
+
class Client < SourceConnector
|
8
|
+
def check_connection(connection_config)
|
9
|
+
create_connection(connection_config)
|
10
|
+
response = execute_query(connection_config, "show catalogs")
|
11
|
+
success?(response) ? success_status : failure_status(nil)
|
12
|
+
rescue StandardError => e
|
13
|
+
handle_exception(e, { context: "WATSONX DATA:CHECK_CONNECTION:EXCEPTION", type: "error" })
|
14
|
+
failure_status(e)
|
15
|
+
end
|
16
|
+
|
17
|
+
def discover(connection_config)
|
18
|
+
connection_config = connection_config.with_indifferent_access
|
19
|
+
query = "SELECT table_name, column_name,
|
20
|
+
data_type,
|
21
|
+
is_nullable
|
22
|
+
FROM information_schema.columns
|
23
|
+
WHERE table_schema = '#{connection_config[:schema]}' AND table_catalog = '#{connection_config[:database]}'
|
24
|
+
ORDER BY table_name, ordinal_position"
|
25
|
+
response = execute_query(connection_config, query)
|
26
|
+
records = JSON.parse(response.body)["response"]["result"]
|
27
|
+
catalog = Catalog.new(streams: create_streams(records))
|
28
|
+
catalog.to_outhad_message
|
29
|
+
rescue StandardError => e
|
30
|
+
handle_exception(e, { context: "WATSONX DATA:DISCOVER:EXCEPTION", type: "error" })
|
31
|
+
end
|
32
|
+
|
33
|
+
def read(sync_config)
|
34
|
+
connection_config = sync_config.source.connection_specification
|
35
|
+
connection_config = connection_config.with_indifferent_access
|
36
|
+
query = sync_config.model.query
|
37
|
+
if connection_config[:engine] == "presto"
|
38
|
+
query = batched_query_for_presto(query, sync_config.limit, sync_config.offset) unless sync_config.limit.nil? && sync_config.offset.nil?
|
39
|
+
else
|
40
|
+
query = batched_query(query, sync_config.limit, sync_config.offset) unless sync_config.limit.nil? && sync_config.offset.nil?
|
41
|
+
end
|
42
|
+
query(connection_config, query)
|
43
|
+
rescue StandardError => e
|
44
|
+
handle_exception(e, { context: "WATSONX DATA:READ:EXCEPTION", type: "error" })
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def batched_query_for_presto(query, limit, offset)
|
50
|
+
<<~SQL
|
51
|
+
SELECT * FROM (
|
52
|
+
SELECT *, ROW_NUMBER() OVER () as rownum FROM ( #{query} ) subquery
|
53
|
+
) t
|
54
|
+
WHERE rownum > #{offset}
|
55
|
+
LIMIT #{limit}
|
56
|
+
SQL
|
57
|
+
end
|
58
|
+
|
59
|
+
def execute_query(connection_config, query)
|
60
|
+
connection_config.with_indifferent_access
|
61
|
+
get_access_token(connection_config[:api_key])
|
62
|
+
url = format(
|
63
|
+
WATSONX_DATA_QUERIES_URL,
|
64
|
+
region: connection_config[:region],
|
65
|
+
engine_id: connection_config[:engine_id]
|
66
|
+
)
|
67
|
+
headers = auth_headers(@access_token)
|
68
|
+
headers["AuthInstanceId"] = connection_config[:auth_instance_id]
|
69
|
+
send_request(
|
70
|
+
url: url,
|
71
|
+
http_method: HTTP_POST,
|
72
|
+
payload: {
|
73
|
+
sql_string: query,
|
74
|
+
catalog_name: connection_config[:database],
|
75
|
+
schema_name: connection_config[:schema]
|
76
|
+
},
|
77
|
+
headers: headers,
|
78
|
+
config: connection_config[:config]
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
def query(connection, query)
|
83
|
+
response = execute_query(connection, query)
|
84
|
+
response = JSON.parse(response.body).with_indifferent_access
|
85
|
+
records = response[:response][:result]
|
86
|
+
records.map do |row|
|
87
|
+
RecordMessage.new(data: row, emitted_at: Time.now.to_i).to_outhad_message
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def create_connection(connection_config)
|
92
|
+
connection_config
|
93
|
+
end
|
94
|
+
|
95
|
+
def create_streams(records)
|
96
|
+
group_by_table(records).map do |r|
|
97
|
+
Outhad::Integrations::Protocol::Stream.new(name: r[:tablename], action: StreamAction["fetch"], json_schema: convert_to_json_schema(r[:columns]))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def group_by_table(records)
|
102
|
+
records.group_by { |entry| entry["table_name"] }.map do |table_name, columns|
|
103
|
+
{
|
104
|
+
tablename: table_name,
|
105
|
+
columns: columns.map do |column|
|
106
|
+
{
|
107
|
+
column_name: column["column_name"],
|
108
|
+
type: column["data_type"],
|
109
|
+
optional: column["is_nullable"] == "YES"
|
110
|
+
}
|
111
|
+
end
|
112
|
+
}
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_access_token(api_key)
|
117
|
+
cache = defined?(Rails) && Rails.respond_to?(:cache) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
|
118
|
+
cache_key = "watsonx_data_#{api_key}"
|
119
|
+
cached_token = cache.read(cache_key)
|
120
|
+
if cached_token
|
121
|
+
@access_token = cached_token
|
122
|
+
else
|
123
|
+
new_token = get_iam_token(api_key)
|
124
|
+
# puts new_token
|
125
|
+
# max expiration is 3 minutes. No way to make it higher
|
126
|
+
cache.write(cache_key, new_token, expires_in: 180)
|
127
|
+
@access_token = new_token
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def get_iam_token(api_key)
|
132
|
+
uri = URI("https://iam.cloud.ibm.com/identity/token")
|
133
|
+
request = Net::HTTP::Post.new(uri)
|
134
|
+
request["Content-Type"] = "application/x-www-form-urlencoded"
|
135
|
+
request.body = "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=#{api_key}"
|
136
|
+
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
137
|
+
http.request(request)
|
138
|
+
end
|
139
|
+
|
140
|
+
raise "Failed to get IAM token: #{response.body}" unless response.is_a?(Net::HTTPSuccess)
|
141
|
+
|
142
|
+
JSON.parse(response.body)["access_token"]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"name": "WatsonxData",
|
4
|
+
"title": "WatsonX Data Endpoint",
|
5
|
+
"connector_type": "source",
|
6
|
+
"category": "Data Warehouse",
|
7
|
+
"sub_category": "Relational Database",
|
8
|
+
"documentation_url": "https://docs.squared.ai/guides/sources/data-sources/watsonx_data",
|
9
|
+
"github_issue_label": "source-watsonx-data-endpoint",
|
10
|
+
"icon": "icon.svg",
|
11
|
+
"license": "MIT",
|
12
|
+
"release_stage": "alpha",
|
13
|
+
"support_level": "community",
|
14
|
+
"tags": ["language:ruby", "outhad"]
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
{
|
2
|
+
"documentation_url": "https://docs.squared.ai/guides/sources/data-sources/watsonx_data",
|
3
|
+
"stream_type": "dynamic",
|
4
|
+
"connector_query_type": "raw_sql",
|
5
|
+
"connection_specification": {
|
6
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
7
|
+
"title": "WatsonX Data Endpoint",
|
8
|
+
"type": "object",
|
9
|
+
"required": ["api_key","region","engine","engine_id","auth_instance_id","database","schema"],
|
10
|
+
"properties": {
|
11
|
+
"api_key": {
|
12
|
+
"type": "string",
|
13
|
+
"outhad_secret": true,
|
14
|
+
"title": "API Key",
|
15
|
+
"order": 0
|
16
|
+
},
|
17
|
+
"region": {
|
18
|
+
"description": "WatsonX Data region",
|
19
|
+
"type": "string",
|
20
|
+
"title": "Region",
|
21
|
+
"order": 1
|
22
|
+
},
|
23
|
+
"engine": {
|
24
|
+
"description": "Which engine is being used? (Presto/Spark)",
|
25
|
+
"type": "string",
|
26
|
+
"title": "Engine",
|
27
|
+
"enum": ["presto"],
|
28
|
+
"default": "presto",
|
29
|
+
"order": 2
|
30
|
+
},
|
31
|
+
"engine_id": {
|
32
|
+
"description": "Engine id",
|
33
|
+
"type": "string",
|
34
|
+
"title": "Engine Id",
|
35
|
+
"order": 3
|
36
|
+
},
|
37
|
+
"auth_instance_id": {
|
38
|
+
"description": "WatsonX Data Instance CRN",
|
39
|
+
"type": "string",
|
40
|
+
"title": "Instance CRN",
|
41
|
+
"order": 4
|
42
|
+
},
|
43
|
+
"database": {
|
44
|
+
"description": "The specific database to connect to.",
|
45
|
+
"type": "string",
|
46
|
+
"title": "Database",
|
47
|
+
"order": 5
|
48
|
+
},
|
49
|
+
"schema": {
|
50
|
+
"description": "The schema within the database.",
|
51
|
+
"type": "string",
|
52
|
+
"title": "Schema",
|
53
|
+
"order": 6
|
54
|
+
},
|
55
|
+
"config": {
|
56
|
+
"title": "",
|
57
|
+
"type": "object",
|
58
|
+
"properties": {
|
59
|
+
"timeout": {
|
60
|
+
"type": "string",
|
61
|
+
"default": "30",
|
62
|
+
"title": "HTTP Timeout",
|
63
|
+
"description": "The maximum time, in seconds, to wait for a response from the server before the request is canceled.",
|
64
|
+
"order": 0
|
65
|
+
}
|
66
|
+
},
|
67
|
+
"order": 7
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg id="Watsonx-Data--Streamline-Carbon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" height="16" width="16"><desc>Watsonx Data Streamline Icon: https://streamlinehq.com</desc><defs></defs><path d="M26 24c-1.1046 0-2 .8954-2 2 0 .0764.0142.1488.0225.2229C21.7417 28.0192 18.9433 29 16 29c-2.7746 0-5.3432-.881-7.4566-2.3676.2576.0261.517.0444.7798.0444C13.5561 26.6768 17 23.233 17 19h-2c0 3.1304-2.5464 5.6768-5.6768 5.6768-2.2111 0-4.1977-1.2816-5.1318-3.2725-.1365-.2972-.2595-.6007-.3738-.9094C4.4778 20.8169 5.2174 21 6 21c2.7568 0 5-2.2432 5-5v-2H9v2c0 1.6543-1.3457 3-3 3s-3-1.3457-3-3c0-2.1152.4917-4.1328 1.4619-5.9956l-1.7744-.9238C1.5835 11.2017 1 13.5943 1 16c0 8.271 6.729 15 15 15 3.3744 0 6.5818-1.1193 9.2048-3.1662.244.106.5123.1662.7952.1662 1.1046 0 2-.8954 2-2s-.8954-2-2-2Z" fill="#000000"></path><path transform="rotate(90 22 22)" d="M21 21h2v2h-2Z" fill="#000000"></path><path transform="rotate(90 16 16)" d="M15 15h2v2h-2Z" fill="#000000"></path><path transform="rotate(-90 10 10)" d="M9 9h2v2H9Z" fill="#000000"></path><path d="M16 1c-3.3744 0-6.5818 1.1193-9.2048 3.1662C6.5512 4.0602 6.2829 4 6 4c-1.1046 0-2 .8954-2 2s.8954 2 2 2 2-.8954 2-2c0-.0764-.0142-.1488-.0225-.2229C10.2583 3.9808 13.0567 3 16 3c2.7708 0 5.3363.8784 7.4481 2.3613-.249-.0242-.5005-.038-.7547-.038-4.2329 0-7.6768 3.4438-7.6768 7.6768h2c0-3.1304 2.5464-5.6768 5.6768-5.6768 2.0554 0 3.9068 1.0953 4.9186 2.8651.2153.4283.4053.8701.5729 1.3237C27.5234 11.1887 26.7844 11 26 11c-2.7568 0-5 2.2432-5 5v2h2v-2c0-1.6543 1.3457-3 3-3s3 1.3457 3 3c0 2.1152-.4917 4.1328-1.4619 5.9956l1.7744.9238C30.4165 20.7983 31 18.4057 31 16c0-8.271-6.729-15-15-15Z" fill="#000000"></path><path id="_Transparent_Rectangle_" d="M0 0h32v32H0Z" fill="none"></path></svg>
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "dry-struct"
|
5
|
+
require "dry-schema"
|
6
|
+
require "dry-types"
|
7
|
+
require "odbc"
|
8
|
+
require "sequel"
|
9
|
+
require "byebug"
|
10
|
+
require "net/http"
|
11
|
+
require "uri"
|
12
|
+
require "active_support/core_ext/hash/indifferent_access"
|
13
|
+
require "restforce"
|
14
|
+
require "logger"
|
15
|
+
require "slack-ruby-client"
|
16
|
+
require "git"
|
17
|
+
require "ruby-limiter"
|
18
|
+
require "hubspot-api-client"
|
19
|
+
require "google/apis/sheets_v4"
|
20
|
+
require "stringio"
|
21
|
+
require "stripe"
|
22
|
+
require "net/sftp"
|
23
|
+
require "csv"
|
24
|
+
require "securerandom"
|
25
|
+
require "aws-sdk-athena"
|
26
|
+
require "zip"
|
27
|
+
require "zendesk_api"
|
28
|
+
require "faraday"
|
29
|
+
require "base64"
|
30
|
+
require "aws-sdk-s3"
|
31
|
+
require "duckdb"
|
32
|
+
require "iterable-api-client"
|
33
|
+
require "aws-sdk-sts"
|
34
|
+
require "ruby-oci8"
|
35
|
+
require "aws-sdk-sagemaker"
|
36
|
+
require "aws-sdk-sagemakerruntime"
|
37
|
+
require "google/cloud/ai_platform/v1"
|
38
|
+
require "grpc"
|
39
|
+
require "MailchimpMarketing"
|
40
|
+
require "aws-sdk-bedrockruntime"
|
41
|
+
require "pinecone"
|
42
|
+
require "intuit-oauth"
|
43
|
+
require "nokogiri"
|
44
|
+
require "xmlrpc/client"
|
45
|
+
|
46
|
+
# Service
|
47
|
+
require_relative "integrations/config"
|
48
|
+
require_relative "integrations/rollout"
|
49
|
+
require_relative "integrations/service"
|
50
|
+
|
51
|
+
# Core
|
52
|
+
require_relative "integrations/core/constants"
|
53
|
+
require_relative "integrations/core/utils"
|
54
|
+
require_relative "integrations/core/rate_limiter"
|
55
|
+
require_relative "integrations/core/fullrefresher"
|
56
|
+
require_relative "integrations/protocol/protocol"
|
57
|
+
require_relative "integrations/core/base_connector"
|
58
|
+
require_relative "integrations/core/source_connector"
|
59
|
+
require_relative "integrations/core/destination_connector"
|
60
|
+
require_relative "integrations/core/http_helper"
|
61
|
+
require_relative "integrations/core/http_client"
|
62
|
+
require_relative "integrations/core/streaming_http_client"
|
63
|
+
require_relative "integrations/core/query_builder"
|
64
|
+
require_relative "integrations/core/unstructured_source_connector"
|
65
|
+
require_relative "integrations/core/vector_source_connector"
|
66
|
+
|
67
|
+
# Source
|
68
|
+
require_relative "integrations/source/snowflake/client"
|
69
|
+
require_relative "integrations/source/redshift/client"
|
70
|
+
require_relative "integrations/source/bigquery/client"
|
71
|
+
require_relative "integrations/source/postgresql/client"
|
72
|
+
require_relative "integrations/source/databricks/client"
|
73
|
+
require_relative "integrations/source/salesforce_consumer_goods_cloud/client"
|
74
|
+
require_relative "integrations/source/aws_athena/client"
|
75
|
+
require_relative "integrations/source/clickhouse/client"
|
76
|
+
require_relative "integrations/source/amazon_s3/client"
|
77
|
+
require_relative "integrations/source/maria_db/client"
|
78
|
+
require_relative "integrations/source/oracle_db/client"
|
79
|
+
require_relative "integrations/source/databrics_model/client"
|
80
|
+
require_relative "integrations/source/aws_sagemaker_model/client"
|
81
|
+
require_relative "integrations/source/google_vertex_model/client"
|
82
|
+
require_relative "integrations/source/http_model/client"
|
83
|
+
require_relative "integrations/source/open_ai/client"
|
84
|
+
require_relative "integrations/source/sftp/client"
|
85
|
+
require_relative "integrations/source/watsonx_ai/client"
|
86
|
+
require_relative "integrations/source/watsonx_data/client"
|
87
|
+
require_relative "integrations/source/anthropic/client"
|
88
|
+
require_relative "integrations/source/aws_bedrock_model/client"
|
89
|
+
require_relative "integrations/source/generic_open_ai/client"
|
90
|
+
require_relative "integrations/source/intuit_quick_books/client"
|
91
|
+
require_relative "integrations/source/pinecone_db/client"
|
92
|
+
require_relative "integrations/source/qdrant/client"
|
93
|
+
require_relative "integrations/source/firecrawl/client"
|
94
|
+
require_relative "integrations/source/odoo/client"
|
95
|
+
|
96
|
+
# Destination
|
97
|
+
require_relative "integrations/destination/klaviyo/client"
|
98
|
+
require_relative "integrations/destination/salesforce_crm/client"
|
99
|
+
require_relative "integrations/destination/facebook_custom_audience/client"
|
100
|
+
require_relative "integrations/destination/slack/client"
|
101
|
+
require_relative "integrations/destination/hubspot/client"
|
102
|
+
require_relative "integrations/destination/google_sheets/client"
|
103
|
+
require_relative "integrations/destination/airtable/client"
|
104
|
+
require_relative "integrations/destination/stripe/client"
|
105
|
+
require_relative "integrations/destination/salesforce_consumer_goods_cloud/client"
|
106
|
+
require_relative "integrations/destination/sftp/client"
|
107
|
+
require_relative "integrations/destination/postgresql/client"
|
108
|
+
require_relative "integrations/destination/zendesk/client"
|
109
|
+
require_relative "integrations/destination/http/client"
|
110
|
+
require_relative "integrations/destination/iterable/client"
|
111
|
+
require_relative "integrations/destination/maria_db/client"
|
112
|
+
require_relative "integrations/destination/databricks_lakehouse/client"
|
113
|
+
require_relative "integrations/destination/oracle_db/client"
|
114
|
+
require_relative "integrations/destination/microsoft_excel/client"
|
115
|
+
require_relative "integrations/destination/microsoft_sql/client"
|
116
|
+
require_relative "integrations/destination/mailchimp/client"
|
117
|
+
require_relative "integrations/destination/ais_data_store/client"
|
118
|
+
require_relative "integrations/destination/amazon_s3/client"
|
119
|
+
require_relative "integrations/destination/microsoft_dynamics/client"
|
120
|
+
require_relative "integrations/destination/qdrant/client"
|
121
|
+
require_relative "integrations/destination/pinecone_db/client"
|
122
|
+
require_relative "integrations/destination/odoo/client"
|
123
|
+
|
124
|
+
module Outhad
|
125
|
+
module Integrations
|
126
|
+
class Error < StandardError; end
|
127
|
+
# Your code goes here...
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/outhad/integrations/rollout"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "outhad-integrations"
|
7
|
+
spec.version = Outhad::Integrations::VERSION
|
8
|
+
spec.authors = ["Tanzi"]
|
9
|
+
spec.email = ["tanzi@outhad.com"]
|
10
|
+
|
11
|
+
spec.summary = "Integration suite for open source reverse ETL platform"
|
12
|
+
spec.description = "Outhad Integrations is a comprehensive Ruby gem designed to facilitate seamless connectivity between various data sources and SaaS platforms."
|
13
|
+
|
14
|
+
spec.homepage = "https://www.outhad.com/"
|
15
|
+
spec.license = "MIT"
|
16
|
+
spec.required_ruby_version = ">= 2.6.0"
|
17
|
+
|
18
|
+
# spec.metadata["allowed_push_host"] = nil
|
19
|
+
spec.metadata["github_repo"] = "https://github.com/tanzil7890/outhad"
|
20
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
21
|
+
spec.metadata["source_code_uri"] = "https://github.com/tanzil7890/outhad/tree/main/integrations"
|
22
|
+
#spec.metadata["changelog_uri"] = "https://github.com/Outhad/outhad/blob/main/integrations/CHANGELOG.md"
|
23
|
+
|
24
|
+
# Specify which files should be added to the gem when it is released.
|
25
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
26
|
+
spec.files = Dir.chdir(__dir__) do
|
27
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
28
|
+
(File.expand_path(f) == __FILE__) ||
|
29
|
+
f.start_with?(*%w[bin/ test/ spec/ features/ .git .circleci appveyor Gemfile vendor/])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
spec.bindir = "exe"
|
33
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
34
|
+
spec.require_paths = ["lib"]
|
35
|
+
|
36
|
+
spec.add_runtime_dependency "activesupport"
|
37
|
+
spec.add_runtime_dependency "async-websocket"
|
38
|
+
spec.add_runtime_dependency "aws-sdk-athena"
|
39
|
+
spec.add_runtime_dependency "aws-sdk-cloudwatchlogs"
|
40
|
+
spec.add_runtime_dependency "aws-sdk-s3"
|
41
|
+
spec.add_runtime_dependency "aws-sdk-sts"
|
42
|
+
spec.add_runtime_dependency "aws-sigv4"
|
43
|
+
spec.add_runtime_dependency "csv"
|
44
|
+
spec.add_runtime_dependency "dry-schema"
|
45
|
+
spec.add_runtime_dependency "dry-struct"
|
46
|
+
spec.add_runtime_dependency "dry-types"
|
47
|
+
spec.add_runtime_dependency "duckdb"
|
48
|
+
spec.add_runtime_dependency "git"
|
49
|
+
spec.add_runtime_dependency "google-apis-sheets_v4"
|
50
|
+
spec.add_runtime_dependency "google-cloud-ai_platform-v1"
|
51
|
+
spec.add_runtime_dependency "google-cloud-bigquery"
|
52
|
+
spec.add_runtime_dependency "grpc"
|
53
|
+
spec.add_runtime_dependency "hubspot-api-client"
|
54
|
+
spec.add_runtime_dependency "iterable-api-client"
|
55
|
+
spec.add_runtime_dependency "MailchimpMarketing"
|
56
|
+
spec.add_runtime_dependency "net-sftp"
|
57
|
+
spec.add_runtime_dependency "pg"
|
58
|
+
spec.add_runtime_dependency "rake"
|
59
|
+
spec.add_runtime_dependency "restforce"
|
60
|
+
spec.add_runtime_dependency "ruby-limiter"
|
61
|
+
spec.add_runtime_dependency "ruby-oci8"
|
62
|
+
spec.add_runtime_dependency "ruby-odbc"
|
63
|
+
spec.add_runtime_dependency "rubyzip"
|
64
|
+
spec.add_runtime_dependency "sequel"
|
65
|
+
spec.add_runtime_dependency "slack-ruby-client"
|
66
|
+
spec.add_runtime_dependency "stripe"
|
67
|
+
spec.add_runtime_dependency "tiny_tds"
|
68
|
+
spec.add_runtime_dependency "zendesk_api"
|
69
|
+
|
70
|
+
spec.add_development_dependency "byebug"
|
71
|
+
spec.add_development_dependency "rspec"
|
72
|
+
spec.add_development_dependency "rubocop"
|
73
|
+
spec.add_development_dependency "simplecov"
|
74
|
+
spec.add_development_dependency "simplecov_json_formatter"
|
75
|
+
spec.add_development_dependency "webmock"
|
76
|
+
|
77
|
+
# For more information and examples about making a new gem, check out our
|
78
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
79
|
+
end
|