Skip to content

Conversation

@kirtimanmishrazipstack
Copy link
Contributor

What

  • Removing oracle support in frontend temporarily

Why

  • Oracle is broken with wallet support not provided. Oracle support is feature yet to be picked

How

  • Simple frontend changes

Can this PR break any existing features. If yes, please list possible items. If no, please explain why. (PS: Admins do not merge the PR without this section filled)

  • N/A

Database Migrations

  • N/A

Env Config

  • N/A

Relevant Docs

Related Issues or PRs

Dependencies Versions

Notes on Testing

Screenshots

Checklist

I have read and understood the Contribution Guidelines.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 19, 2025

Summary by CodeRabbit

  • Refactor
    • Centralized import handling for optional database connectors (Redis, Oracle) with improved error management when these components are unavailable.
    • Consolidated frontend import organization for better code structure and maintainability.

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Import reorganization in frontend components consolidates debounce imports. Backend introduces a centralized import helper import_optional_connector with graceful failure handling, replacing direct try/except blocks for RedisQueue. Both RedisQueue and OracleDB are now imported via the new utility, and OracleDB is added to the unsupported connectors filtering logic.

Changes

Cohort / File(s) Summary
Frontend import consolidation
frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx, frontend/src/components/input-output/list-of-sources/ListOfSources.jsx
Reorders and consolidates debounce imports, moving from antd to lodash/debounce. Removes duplicate import occurrences. No functional logic changes.
Backend connector import helper
backend/connector_processor/connector_processor.py
Introduces import_optional_connector(module_path, class_name) function for centralized optional connector importing with graceful failure handling. Replaces top-level try/except for RedisQueue. Imports both RedisQueue and OracleDB via the new utility. Updates get_all_supported_connectors to include OracleDB in unsupported connectors calculation.

Sequence Diagram

sequenceDiagram
    participant OldFlow as Old Import Flow
    participant NewFlow as New Import Flow
    
    rect rgb(245, 245, 245)
        Note over OldFlow: Direct Import with Try/Except
        OldFlow->>OldFlow: try: import RedisQueue<br/>except ImportError: skip
    end
    
    rect rgb(240, 250, 240)
        Note over NewFlow: Centralized Import Helper
        NewFlow->>NewFlow: call import_optional_connector<br/>(module_path, class_name)
        NewFlow->>NewFlow: try: import and return class<br/>except: return None gracefully
        NewFlow->>NewFlow: RedisQueue, OracleDB imported<br/>via helper
    end
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

  • Frontend changes are repetitive import reordering with no logic modifications
  • Backend introduces a new utility function requiring understanding of the import mechanism and its integration with connector filtering
  • Special attention needed for:
    • Verification that import_optional_connector properly handles both RedisQueue and OracleDB import failures
    • Confirmation that OracleDB addition to unsupported_connectors logic is correct and doesn't inadvertently filter supported connectors

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive The title clearly describes the primary change: removing the broken Oracle connector from the frontend. However, the summary of changes shows modifications to backend connector processor code, including adding import_optional_connector and handling OracleDB imports, which are not frontend-only changes as the title suggests. Clarify whether backend changes are included. If yes, revise title to reflect full scope, e.g., 'Temporarily disable Oracle connector support in frontend and backend'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description check ✅ Passed The PR description covers most required template sections with reasonable detail. However, the 'Relevant Docs', 'Related Issues or PRs', 'Dependencies Versions', and 'Notes on Testing' sections are left incomplete or empty, which could affect reviewers' understanding of context and testing scope.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch UN-2261-remove-oracle-db-support-temparary

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx (1)

27-30: Oracle filtering logic is correct but duplicated; consider extracting to a shared utility.

The filtering logic correctly excludes the "OracleDB" connector by matching the uppercase name against "ORACLE". However, this same logic is duplicated in ListOfSources.jsx (lines 25-30).

Since this is marked as temporary, extracting it to a shared utility function would improve maintainability:

// utils/connectorFilters.js
export const shouldExcludeOracle = (item) => {
  return item?.name?.toUpperCase().includes("ORACLE");
};

Then use in both ConnectorListModal.jsx and ListOfSources.jsx:

-    // Filter out Oracle connector temporarily
-    filtered = filtered.filter((connector) => {
-      return !connector?.name?.toUpperCase().includes("ORACLE");
-    });
+    // Filter out Oracle connector temporarily
+    filtered = filtered.filter((connector) => !shouldExcludeOracle(connector));
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 1889ddd and 941a8f0.

📒 Files selected for processing (2)
  • frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx (2 hunks)
  • frontend/src/components/input-output/list-of-sources/ListOfSources.jsx (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (3)
frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx (1)

2-3: LGTM: Import reorganization and debounce addition.

The import reorganization is clean, and the debounce import is correctly used on line 24 to wrap the filterConnectors function.

frontend/src/components/input-output/list-of-sources/ListOfSources.jsx (2)

3-3: LGTM: Debounce import is correctly used.

The debounce import is properly utilized on line 51 to wrap the handleInputChange function.


25-30: Oracle filtering logic is correct with appropriate conditional.

The filtering logic correctly excludes Oracle connectors temporarily, and the isConnector condition appropriately limits this filter to connector-type sources only.

Note: This logic is duplicated from ConnectorListModal.jsx (lines 27-30), as noted in the previous file review. The suggestion to extract this into a shared utility function applies here as well.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
backend/connector_processor/connector_processor.py (1)

27-36: Consider restructuring the try-except and reviewing log verbosity.

The static analysis tool suggests moving the success return (line 33) to an else block, which would make the control flow more explicit:

 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
+    else:
+        logger.info(f"Successfully imported {class_name}")
+        return connector_class

Additionally, consider whether INFO-level logging for every successful connector import is necessary, as this may create noise in production logs.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 941a8f0 and 13e0e19.

📒 Files selected for processing (4)
  • .gitignore (1 hunks)
  • backend/connector_processor/connector_processor.py (2 hunks)
  • frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx (1 hunks)
  • frontend/src/components/input-output/list-of-sources/ListOfSources.jsx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/components/input-output/list-of-sources/ListOfSources.jsx
🧰 Additional context used
🪛 Ruff (0.14.5)
backend/connector_processor/connector_processor.py

33-33: Consider moving this statement to an else block

(TRY300)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (2)
frontend/src/components/connectors/connector-list-modal/ConnectorListModal.jsx (1)

2-3: These import changes appear unrelated to the PR objective.

The changes in this file only reorder and consolidate imports without any functional modifications to connector filtering. The PR objective states "Removed broken Oracle connector option from frontend," but no Oracle-specific logic is present here. The actual Oracle removal is implemented in the backend file (connector_processor.py), which aligns with the previous reviewer's suggestion to handle this on the backend.

backend/connector_processor/connector_processor.py (1)

94-98: Implementation correctly addresses the PR objective.

The approach of adding OracleDB to the unsupported_connectors list successfully prevents it from being exposed to the frontend while gracefully handling import failures. This aligns with the previous reviewer's suggestion to handle Oracle exclusion in the backend.

Based on past review comments.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
backend/connector_processor/connector_processor.py (1)

27-36: Add return type hint and catch AttributeError.

The function should include a return type hint for better type safety. Additionally, catching only ImportError won't handle the case where the module imports successfully but the specified class doesn't exist, which would raise AttributeError.

Apply this diff:

-def import_optional_connector(module_path: str, class_name: str):
+def import_optional_connector(module_path: str, class_name: str) -> type | None:
     """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:
+    except (ImportError, AttributeError) as e:
         logger.warning(f"Failed to import {class_name}: {e}")
         return None
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 13e0e19 and 7128537.

📒 Files selected for processing (1)
  • backend/connector_processor/connector_processor.py (2 hunks)
🧰 Additional context used
🪛 GitHub Check: SonarCloud Code Analysis
backend/connector_processor/connector_processor.py

[warning] 41-41: Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=Zipstack_unstract&issues=AZqlWhcnSiy551iQeJf2&open=AZqlWhcnSiy551iQeJf2&pullRequest=1663

🪛 Ruff (0.14.5)
backend/connector_processor/connector_processor.py

33-33: Consider moving this statement to an else block

(TRY300)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (2)
backend/connector_processor/connector_processor.py (2)

39-44: LGTM! TODO comment appropriately addresses past feedback.

The TODO comment clearly explains why Oracle is temporarily excluded and references the relevant issue (UN-2261). This addresses the previous reviewer's request for an explanatory comment.

Note: The SonarCloud warning about completing the TODO is expected and serves as a tracking mechanism for when Oracle wallet support is implemented.

Based on past review comments.


97-99: LGTM! Correct handling of optional connectors.

The use of filter(None, [RedisQueue, OracleDB]) correctly removes any None values before calling get_id(), ensuring that connectors which failed to import don't cause runtime errors. This effectively excludes Oracle from the supported connectors list as intended.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 7128537 and fbd93dc.

📒 Files selected for processing (1)
  • backend/connector_processor/connector_processor.py (2 hunks)
🧰 Additional context used
🪛 GitHub Check: SonarCloud Code Analysis
backend/connector_processor/connector_processor.py

[warning] 41-41: Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=Zipstack_unstract&issues=AZqlWhcnSiy551iQeJf2&open=AZqlWhcnSiy551iQeJf2&pullRequest=1663

🪛 Ruff (0.14.5)
backend/connector_processor/connector_processor.py

33-33: Consider moving this statement to an else block

(TRY300)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (2)
backend/connector_processor/connector_processor.py (2)

98-98: LGTM! Defensive handling of optional connectors.

The use of filter(None, [RedisQueue, OracleDB]) properly handles the case where either connector fails to import and returns None. This ensures only successfully imported connectors are added to the unsupported list.


40-44: None handling is properly implemented via filter(None, ...).

The only usage of RedisQueue and OracleDB within connector_processor.py occurs at line 98, where filter(None, [RedisQueue, OracleDB]) explicitly filters out any None values before calling .get_id() on each connector. This is correct and safe. Additionally, these variables are not exported or referenced by other modules, so there are no external None handling concerns.

Comment on lines +27 to +36
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.debug(f"Successfully imported {class_name}")
return connector_class
except ImportError as e:
logger.debug(f"Failed to import {class_name}: {e}")
return None
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Prefer importlib.import_module and improve error handling.

The current implementation has a few areas for improvement:

  1. __import__ is lower-level and less maintainable than importlib.import_module
  2. Should catch AttributeError in case the class doesn't exist in the module
  3. Following the Ruff suggestion, using try/except/else is clearer than logging before return

Apply this diff:

+import importlib
+
 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])
+        module = importlib.import_module(module_path)
         connector_class = getattr(module, class_name)
+    except (ImportError, AttributeError) as e:
-        logger.debug(f"Successfully imported {class_name}")
-        return connector_class
-    except ImportError as e:
         logger.debug(f"Failed to import {class_name}: {e}")
         return None
+    else:
+        logger.debug(f"Successfully imported {class_name}")
+        return connector_class
🧰 Tools
🪛 Ruff (0.14.5)

33-33: Consider moving this statement to an else block

(TRY300)

🤖 Prompt for AI Agents
In backend/connector_processor/connector_processor.py around lines 27 to 36,
replace the low-level __import__ usage and current error handling with
importlib.import_module and a clearer try/except/else structure: import the
module via importlib.import_module(module_path) inside a try block, catch
ImportError and AttributeError separately, log appropriate debug messages
including the exception details, and in the else block retrieve the class via
getattr(module, class_name) and return it; return None only from the except
blocks so successful imports are handled in the else branch.

@github-actions
Copy link
Contributor

Test Results

Summary
  • Runner Tests: 11 passed, 0 failed (11 total)
  • SDK1 Tests: 66 passed, 0 failed (66 total)

Runner Tests - Full Report
filepath function $$\textcolor{#23d18b}{\tt{passed}}$$ SUBTOTAL
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_logs}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_cleanup}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_cleanup\_skip}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_client\_init}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config\_without\_mount}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_run\_container}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_get\_image\_for\_sidecar}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$ $$\textcolor{#23d18b}{\tt{test\_sidecar\_container}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$ $$\textcolor{#23d18b}{\tt{11}}$$ $$\textcolor{#23d18b}{\tt{11}}$$
SDK1 Tests - Full Report
filepath function $$\textcolor{#23d18b}{\tt{passed}}$$ SUBTOTAL
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_success\_on\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_on\_connection\_error}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_non\_retryable\_http\_error}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retryable\_http\_errors}}$$ $$\textcolor{#23d18b}{\tt{3}}$$ $$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_post\_method\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$ $$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_logging}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_success\_on\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_retry\_on\_errors}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$ $$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_wrapper\_methods\_retry}}$$ $$\textcolor{#23d18b}{\tt{4}}$$ $$\textcolor{#23d18b}{\tt{4}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_connection\_error\_is\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_timeout\_is\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_retryable\_status\_codes}}$$ $$\textcolor{#23d18b}{\tt{3}}$$ $$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_non\_retryable\_status\_codes}}$$ $$\textcolor{#23d18b}{\tt{5}}$$ $$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_without\_response}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_retryable\_errno}}$$ $$\textcolor{#23d18b}{\tt{5}}$$ $$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_non\_retryable\_errno}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_other\_exception\_not\_retryable}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_without\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_with\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap\_with\_jitter}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_successful\_call\_first\_attempt}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_after\_transient\_failure}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_retries\_exceeded}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_time\_exceeded}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_with\_custom\_predicate}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_no\_retry\_with\_predicate\_false}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_exception\_not\_in\_tuple\_not\_retried}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_delay\_would\_exceed\_max\_time}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_default\_configuration}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_environment\_variable\_configuration}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_retries}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_time}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_base\_delay}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_multiplier}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_jitter\_values}}$$ $$\textcolor{#23d18b}{\tt{2}}$$ $$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_exceptions\_only}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_predicate\_only}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_both\_exceptions\_and\_predicate}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_exceptions\_match\_but\_predicate\_false}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_platform\_service\_call\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_prompt\_service\_call\_exists}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_platform\_service\_decorator\_retries\_on\_connection\_error}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_prompt\_service\_decorator\_retries\_on\_timeout}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_warning\_logged\_on\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_info\_logged\_on\_success\_after\_retry}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$ $$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_exception\_logged\_on\_giving\_up}}$$ $$\textcolor{#23d18b}{\tt{1}}$$ $$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$ $$\textcolor{#23d18b}{\tt{66}}$$ $$\textcolor{#23d18b}{\tt{66}}$$

@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants