From 941a8f0802ce4818a150d5ef4b32478f67eca259 Mon Sep 17 00:00:00 2001 From: kirtimanmishrazipstack Date: Tue, 18 Nov 2025 20:44:27 +0530 Subject: [PATCH 1/6] removing oracle support in frontend --- .../connector-list-modal/ConnectorListModal.jsx | 9 +++++++-- .../input-output/list-of-sources/ListOfSources.jsx | 9 ++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx b/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx index 57a63449cb..5d08f80aec 100644 --- a/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx +++ b/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx @@ -1,8 +1,8 @@ import { SearchOutlined } from "@ant-design/icons"; -import { Input, Row, Col, Tabs, Typography, Spin } from "antd"; +import { Col, Input, Row, Spin, Tabs, Typography } from "antd"; +import debounce from "lodash/debounce"; import PropTypes from "prop-types"; import { useEffect, useState } from "react"; -import debounce from "lodash/debounce"; import { ConnectorCard } from "../connector-card/ConnectorCard"; import "./ConnectorListModal.css"; @@ -24,6 +24,11 @@ function ConnectorListModal({ const filterConnectors = debounce((searchText, mode) => { let filtered = [...connectors]; + // Filter out Oracle connector temporarily + filtered = filtered.filter((connector) => { + return !connector?.name?.toUpperCase().includes("ORACLE"); + }); + // Filter by search text if (searchText?.trim()) { const searchUpper = searchText.toUpperCase().trim(); diff --git a/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx b/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx index 41f75e5c17..96b48544d6 100644 --- a/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx +++ b/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx @@ -1,8 +1,8 @@ import { SearchOutlined } from "@ant-design/icons"; import { Input, List, Segmented } from "antd"; +import debounce from "lodash/debounce"; import PropTypes from "prop-types"; import { useEffect, useState } from "react"; -import debounce from "lodash/debounce"; import { DataSourceCard } from "../data-source-card/DataSourceCard"; import "./ListOfSources.css"; @@ -22,6 +22,13 @@ function ListOfSources({ useEffect(() => { let filteredList = [...sourcesList]; + // Filter out Oracle connector temporarily + if (isConnector) { + filteredList = filteredList.filter((source) => { + return !source?.name?.toUpperCase().includes("ORACLE"); + }); + } + // Apply mode filter if selected if (localModeFilter && isConnector && !connectorMode) { filteredList = filteredList.filter((source) => { From 13e0e19a42ee56008e0624338830dc747c112a39 Mon Sep 17 00:00:00 2001 From: kirtimanmishrazipstack Date: Fri, 21 Nov 2025 12:35:07 +0530 Subject: [PATCH 2/6] adding oracle unsupported connector to backend --- .gitignore | 2 ++ .../connector_processor.py | 26 ++++++++++++++----- .../ConnectorListModal.jsx | 5 ---- .../list-of-sources/ListOfSources.jsx | 7 ----- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 80c568a0f4..024c65527c 100644 --- a/.gitignore +++ b/.gitignore @@ -632,6 +632,8 @@ workers/pluggable_worker/* frontend/src/plugins/* frontend/public/llm-whisperer/ +# Prompt-service +prompt-service/plugins/* # TODO: Ensure its made generic to abstract subfolder and file names # Static content diff --git a/backend/connector_processor/connector_processor.py b/backend/connector_processor/connector_processor.py index 10b6374c9e..bced685bc8 100644 --- a/backend/connector_processor/connector_processor.py +++ b/backend/connector_processor/connector_processor.py @@ -21,14 +21,28 @@ from unstract.connectors.exceptions import ConnectorError, FSAccessDeniedError from unstract.connectors.filesystems.ucs import UnstractCloudStorage -try: - from unstract.connectors.queues.redis import RedisQueue -except ImportError: - RedisQueue = None - logger = logging.getLogger(__name__) +def import_optional_connector(module_path: str, class_name: str): + """Import connector class with graceful error handling.""" + try: + module = __import__(module_path, fromlist=[class_name]) + connector_class = getattr(module, class_name) + logger.info(f"Successfully imported {class_name}") + return connector_class + except ImportError as e: + logger.warning(f"Failed to import {class_name}: {e}") + return None + + +# Import optional connectors +RedisQueue = import_optional_connector("unstract.connectors.queues.redis", "RedisQueue") +OracleDB = import_optional_connector( + "unstract.connectors.databases.oracle_db", "OracleDB" +) + + def fetch_connectors_by_key_value( key: str, value: Any, connector_mode: ConnectorMode | None = None ) -> list[UnstractConnector]: @@ -80,7 +94,7 @@ def get_all_supported_connectors( # TODO: Remove RedisQueue from the list of connectors and use separately instead # HACK: Connectors that are marked active but not supported explicitly unsupported_connectors = [ - connector.get_id() for connector in filter(None, [RedisQueue]) + connector.get_id() for connector in filter(None, [RedisQueue, OracleDB]) ] if type == ConnectorKeys.INPUT: diff --git a/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx b/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx index 5d08f80aec..dd163d224b 100644 --- a/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx +++ b/frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx @@ -24,11 +24,6 @@ function ConnectorListModal({ const filterConnectors = debounce((searchText, mode) => { let filtered = [...connectors]; - // Filter out Oracle connector temporarily - filtered = filtered.filter((connector) => { - return !connector?.name?.toUpperCase().includes("ORACLE"); - }); - // Filter by search text if (searchText?.trim()) { const searchUpper = searchText.toUpperCase().trim(); diff --git a/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx b/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx index 96b48544d6..3b0f8b495b 100644 --- a/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx +++ b/frontend/src/components/input-output/list-of-sources/ListOfSources.jsx @@ -22,13 +22,6 @@ function ListOfSources({ useEffect(() => { let filteredList = [...sourcesList]; - // Filter out Oracle connector temporarily - if (isConnector) { - filteredList = filteredList.filter((source) => { - return !source?.name?.toUpperCase().includes("ORACLE"); - }); - } - // Apply mode filter if selected if (localModeFilter && isConnector && !connectorMode) { filteredList = filteredList.filter((source) => { From 712853737ddfc946f3980fd019f162f83f3c881d Mon Sep 17 00:00:00 2001 From: kirtimanmishrazipstack Date: Fri, 21 Nov 2025 13:07:44 +0530 Subject: [PATCH 3/6] adding oracle unsupported connector to backend --- backend/connector_processor/connector_processor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/connector_processor/connector_processor.py b/backend/connector_processor/connector_processor.py index bced685bc8..7a1b57d24d 100644 --- a/backend/connector_processor/connector_processor.py +++ b/backend/connector_processor/connector_processor.py @@ -38,6 +38,7 @@ def import_optional_connector(module_path: str, class_name: str): # Import optional connectors RedisQueue = import_optional_connector("unstract.connectors.queues.redis", "RedisQueue") +# TODO(UN-2261): Oracle temporarily excluded due to missing wallet support OracleDB = import_optional_connector( "unstract.connectors.databases.oracle_db", "OracleDB" ) From 709c75690602527ff57d71dd6f05f354ca98f380 Mon Sep 17 00:00:00 2001 From: kirtimanmishrazipstack Date: Fri, 21 Nov 2025 13:24:42 +0530 Subject: [PATCH 4/6] small change --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 024c65527c..0691fbcd9c 100644 --- a/.gitignore +++ b/.gitignore @@ -632,9 +632,6 @@ workers/pluggable_worker/* frontend/src/plugins/* frontend/public/llm-whisperer/ -# Prompt-service -prompt-service/plugins/* - # TODO: Ensure its made generic to abstract subfolder and file names # Static content backend/onboarding_static/* From 34cae24a943cc8ce89743c40915c0d007a463284 Mon Sep 17 00:00:00 2001 From: kirtimanmishrazipstack Date: Fri, 21 Nov 2025 13:25:36 +0530 Subject: [PATCH 5/6] small change --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0691fbcd9c..80c568a0f4 100644 --- a/.gitignore +++ b/.gitignore @@ -632,6 +632,7 @@ workers/pluggable_worker/* frontend/src/plugins/* frontend/public/llm-whisperer/ + # TODO: Ensure its made generic to abstract subfolder and file names # Static content backend/onboarding_static/* From fbd93dccbc4974b8f4d09850172d74fa97f06092 Mon Sep 17 00:00:00 2001 From: kirtimanmishrazipstack Date: Fri, 21 Nov 2025 17:22:34 +0530 Subject: [PATCH 6/6] small change PR review --- backend/connector_processor/connector_processor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/connector_processor/connector_processor.py b/backend/connector_processor/connector_processor.py index 7a1b57d24d..c0d7d26f50 100644 --- a/backend/connector_processor/connector_processor.py +++ b/backend/connector_processor/connector_processor.py @@ -29,10 +29,10 @@ def import_optional_connector(module_path: str, class_name: str): try: module = __import__(module_path, fromlist=[class_name]) connector_class = getattr(module, class_name) - logger.info(f"Successfully imported {class_name}") + logger.debug(f"Successfully imported {class_name}") return connector_class except ImportError as e: - logger.warning(f"Failed to import {class_name}: {e}") + logger.debug(f"Failed to import {class_name}: {e}") return None