feat(database): add noop mode with config flag and update related tests (#9054)
* test: enhance agent component tests and add new fixture for database-less sessions - Added `use_noop_session` fixture to facilitate testing without a database. - Expanded `TestAgentComponent` with new tests for agent responses using the Calculator tool and validation across all OpenAI and Anthropic models. - Updated `test_component.py` to include tests for message sending without a database, ensuring proper event handling and message integrity. - Refactored existing tests for clarity and consistency. * fix: enhance user retrieval logic in get_or_create_super_user and teardown_superuser functions - Updated user retrieval in both functions to handle different result types from the database query, ensuring robustness against unexpected return values. - Added checks for `first()` method and list type to improve error handling and maintainability. * feat: add support for no-op database operations in settings - Introduced `use_noop_database` configuration option to disable all database operations, controlled by the `LANGFLOW_USE_NOOP_DATABASE` environment variable. - Updated the `use_noop_session` fixture to reflect the new environment variable for testing without a database. * feat: implement NoopSession for database-less operations - Added NoopSession class to provide a no-operation database session, allowing for testing and operation without a real database connection. - Updated DatabaseService to utilize NoopSession when the `use_noop_database` setting is enabled, ensuring all database operations are disabled in this mode. - Enhanced error handling and logging for session management, improving robustness in scenarios where the database is not in use. * refactor: update import paths for NoopSession in test files - Changed import path for NoopSession from `langflow.services.database.service` to `langflow.services.database.session` in both `test_agent_component.py` and `test_component.py`. - This refactor improves code organization and aligns with recent changes in the project structure. * feat: enhance NoopSession with result handling methods - Added an internal _NoopResult class to the NoopSession, providing methods `first()`, `all()`, and `one_or_none()` for better handling of no-operation results. - This enhancement improves the usability of NoopSession in testing scenarios by mimicking expected database query behaviors. * refactor: improve logging for NOOP database session - Changed the log level from warning to info for the NOOP database session message in the DatabaseService class. - This adjustment enhances clarity in logging, indicating that all DB operations are disabled without implying an error condition. * docs: improve docstring formatting for custom_component_update function - Reformatted the docstring for the custom_component_update function to enhance readability by breaking long lines into multiple lines. - This change improves documentation clarity, making it easier for developers to understand the function's purpose and behavior. * docs: add LANGFLOW_USE_NOOP_DATABASE environment variable documentation - Introduced documentation for the new LANGFLOW_USE_NOOP_DATABASE environment variable, which allows users to enable a no-op database mode, avoiding database connections and operations. - This addition enhances the clarity of configuration options available for Langflow, aiding users in understanding how to run flows without a database. * refactor: move NOOP database session logging to settings - Removed the logging statement from the DatabaseService class and added it to the `set_use_noop_database` field validator in the Settings class. - This change centralizes the logging for the NOOP database session, improving code organization and ensuring that the message is logged whenever the setting is applied.
This commit is contained in:
parent
d8291131ab
commit
f1e95940a5
9 changed files with 294 additions and 47 deletions
|
|
@ -76,6 +76,10 @@ def blockbuster(request):
|
|||
.can_block_in("rich/traceback.py", "_render_stack")
|
||||
.can_block_in("langchain_core/_api/internal.py", "is_caller_internal")
|
||||
.can_block_in("langchain_core/runnables/utils.py", "get_function_nonlocals")
|
||||
.can_block_in("alembic/versions", "_load_revisions")
|
||||
.can_block_in("dotenv/main.py", "find_dotenv")
|
||||
.can_block_in("alembic/script/base.py", "_load_revisions")
|
||||
.can_block_in("alembic/env.py", "_do_run_migrations")
|
||||
)
|
||||
|
||||
for func in ["os.stat", "os.path.abspath", "os.scandir", "os.listdir"]:
|
||||
|
|
@ -366,6 +370,16 @@ def deactivate_tracing(monkeypatch):
|
|||
monkeypatch.undo()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def use_noop_session(monkeypatch):
|
||||
monkeypatch.setenv("LANGFLOW_USE_NOOP_DATABASE", "1")
|
||||
# Optionally patch the Settings object if needed
|
||||
# from langflow.services.settings.base import Settings
|
||||
# monkeypatch.setattr(Settings, "use_noop_database", True)
|
||||
yield
|
||||
monkeypatch.undo()
|
||||
|
||||
|
||||
@pytest.fixture(name="client")
|
||||
async def client_fixture(
|
||||
session: Session, # noqa: ARG001
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue