mirror of
https://github.com/langgenius/dify.git
synced 2026-10-16 15:35:32 +08:00
chore: add some type (#37173)
This commit is contained in:
@@ -32,7 +32,7 @@ logger = logging.getLogger(__name__)
|
||||
@click.command("setup-system-tool-oauth-client", help="Setup system tool oauth client.")
|
||||
@click.option("--provider", prompt=True, help="Provider name")
|
||||
@click.option("--client-params", prompt=True, help="Client Params")
|
||||
def setup_system_tool_oauth_client(provider, client_params):
|
||||
def setup_system_tool_oauth_client(provider: str, client_params: str):
|
||||
"""
|
||||
Setup system tool oauth client
|
||||
"""
|
||||
@@ -79,7 +79,7 @@ def setup_system_tool_oauth_client(provider, client_params):
|
||||
@click.command("setup-system-trigger-oauth-client", help="Setup system trigger oauth client.")
|
||||
@click.option("--provider", prompt=True, help="Provider name")
|
||||
@click.option("--client-params", prompt=True, help="Client Params")
|
||||
def setup_system_trigger_oauth_client(provider, client_params):
|
||||
def setup_system_trigger_oauth_client(provider: str, client_params: str):
|
||||
"""
|
||||
Setup system trigger oauth client
|
||||
"""
|
||||
@@ -129,7 +129,7 @@ def setup_system_trigger_oauth_client(provider, client_params):
|
||||
@click.command("setup-datasource-oauth-client", help="Setup datasource oauth client.")
|
||||
@click.option("--provider", prompt=True, help="Provider name")
|
||||
@click.option("--client-params", prompt=True, help="Client Params")
|
||||
def setup_datasource_oauth_client(provider, client_params):
|
||||
def setup_datasource_oauth_client(provider: str, client_params: str):
|
||||
"""
|
||||
Setup datasource oauth client
|
||||
"""
|
||||
|
||||
@@ -20,8 +20,8 @@ class ProviderTokenNotInitError(ValueError):
|
||||
|
||||
description = "Provider Token Not Init"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.description = args[0] if args else self.description
|
||||
def __init__(self, *args: object, **kwargs: object):
|
||||
self.description = str(args[0]) if args else self.description
|
||||
|
||||
|
||||
class QuotaExceededError(ValueError):
|
||||
|
||||
@@ -541,7 +541,7 @@ class IndexingRunner:
|
||||
return text_docs
|
||||
|
||||
@staticmethod
|
||||
def filter_string(text):
|
||||
def filter_string(text: str):
|
||||
text = re.sub(r"<\|", "<", text)
|
||||
text = re.sub(r"\|>", ">", text)
|
||||
text = re.sub(r"[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]", "", text)
|
||||
|
||||
@@ -86,7 +86,7 @@ def on_user_loaded(_sender, user: Union["Account", "EndUser"]):
|
||||
|
||||
|
||||
@worker_init.connect(weak=False)
|
||||
def init_celery_worker(*args, **kwargs):
|
||||
def init_celery_worker(*args: object, **kwargs: object):
|
||||
if dify_config.ENABLE_OTEL:
|
||||
from opentelemetry.instrumentation.celery import CeleryInstrumentor
|
||||
from opentelemetry.metrics import get_meter_provider
|
||||
|
||||
+1
-1
@@ -348,7 +348,7 @@ class TestAlibabaCloudMySQLVector(unittest.TestCase):
|
||||
|
||||
# Simulate table doesn't exist error on delete
|
||||
|
||||
def execute_side_effect(*args, **kwargs):
|
||||
def execute_side_effect[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
if "DELETE" in args[0]:
|
||||
raise MySQLError(errno=1146, msg="Table doesn't exist")
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ from pymochow.model.schema import HNSWParams, VectorIndex
|
||||
from pymochow.model.table import Table
|
||||
|
||||
|
||||
class AttrDict(UserDict):
|
||||
def __getattr__(self, item):
|
||||
class AttrDict[K, V](UserDict[K, V]):
|
||||
def __getattr__(self, item: K):
|
||||
return self.get(item)
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ def _build_fake_pymochow_modules():
|
||||
pymochow_model_table = types.ModuleType("pymochow.model.table")
|
||||
|
||||
class _SimpleObject:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.args = args
|
||||
for key, value in kwargs.items():
|
||||
setattr(self, key, value)
|
||||
|
||||
@@ -20,7 +20,7 @@ def _build_fake_psycopg2_modules():
|
||||
psycopg2_pool = types.ModuleType("psycopg2.pool")
|
||||
|
||||
class SimpleConnectionPool:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
self.getconn = MagicMock()
|
||||
|
||||
@@ -67,7 +67,7 @@ class _FakeBeginContext:
|
||||
|
||||
|
||||
def _sessionmaker_factory(calls, execute_results=None):
|
||||
def _sessionmaker(*args, **kwargs):
|
||||
def _sessionmaker[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
session = _FakeSessionContext(calls=calls, execute_results=execute_results)
|
||||
return MagicMock(begin=MagicMock(return_value=_FakeBeginContext(session)))
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ def _build_fake_psycopg2_modules():
|
||||
psycopg2_pool = types.ModuleType("psycopg2.pool")
|
||||
|
||||
class SimpleConnectionPool:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
self.getconn = MagicMock()
|
||||
|
||||
@@ -9,7 +9,7 @@ from celery import shared_task
|
||||
from sqlalchemy import delete, select
|
||||
from sqlalchemy.engine import CursorResult
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.orm import Session, sessionmaker
|
||||
|
||||
from configs import dify_config
|
||||
from core.db.session_factory import session_factory
|
||||
@@ -103,7 +103,7 @@ def remove_app_and_related_data_task(self, tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_model_configs(tenant_id: str, app_id: str):
|
||||
def del_model_config(session, model_config_id: str):
|
||||
def del_model_config(session: Session, model_config_id: str):
|
||||
session.execute(
|
||||
delete(AppModelConfig)
|
||||
.where(AppModelConfig.id == model_config_id)
|
||||
@@ -119,7 +119,7 @@ def _delete_app_model_configs(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_site(tenant_id: str, app_id: str):
|
||||
def del_site(session, site_id: str):
|
||||
def del_site(session: Session, site_id: str):
|
||||
session.execute(delete(Site).where(Site.id == site_id).execution_options(synchronize_session=False))
|
||||
|
||||
_delete_records(
|
||||
@@ -131,7 +131,7 @@ def _delete_app_site(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_mcp_servers(tenant_id: str, app_id: str):
|
||||
def del_mcp_server(session, mcp_server_id: str):
|
||||
def del_mcp_server(session: Session, mcp_server_id: str):
|
||||
session.execute(
|
||||
delete(AppMCPServer).where(AppMCPServer.id == mcp_server_id).execution_options(synchronize_session=False)
|
||||
)
|
||||
@@ -145,7 +145,7 @@ def _delete_app_mcp_servers(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_api_tokens(tenant_id: str, app_id: str):
|
||||
def del_api_token(session, api_token_id: str):
|
||||
def del_api_token(session: Session, api_token_id: str):
|
||||
# Fetch token details for cache invalidation
|
||||
token_obj = session.scalar(select(ApiToken).where(ApiToken.id == api_token_id).limit(1))
|
||||
if token_obj:
|
||||
@@ -165,7 +165,7 @@ def _delete_app_api_tokens(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_installed_apps(tenant_id: str, app_id: str):
|
||||
def del_installed_app(session, installed_app_id: str):
|
||||
def del_installed_app(session: Session, installed_app_id: str):
|
||||
session.execute(
|
||||
delete(InstalledApp).where(InstalledApp.id == installed_app_id).execution_options(synchronize_session=False)
|
||||
)
|
||||
@@ -191,7 +191,7 @@ def _delete_app_stars(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_recommended_apps(tenant_id: str, app_id: str):
|
||||
def del_recommended_app(session, recommended_app_id: str):
|
||||
def del_recommended_app(session: Session, recommended_app_id: str):
|
||||
session.execute(
|
||||
delete(RecommendedApp)
|
||||
.where(RecommendedApp.id == recommended_app_id)
|
||||
@@ -207,7 +207,7 @@ def _delete_recommended_apps(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_annotation_data(tenant_id: str, app_id: str):
|
||||
def del_annotation_hit_history(session, annotation_hit_history_id: str):
|
||||
def del_annotation_hit_history(session: Session, annotation_hit_history_id: str):
|
||||
session.execute(
|
||||
delete(AppAnnotationHitHistory)
|
||||
.where(AppAnnotationHitHistory.id == annotation_hit_history_id)
|
||||
@@ -221,7 +221,7 @@ def _delete_app_annotation_data(tenant_id: str, app_id: str):
|
||||
"annotation hit history",
|
||||
)
|
||||
|
||||
def del_annotation_setting(session, annotation_setting_id: str):
|
||||
def del_annotation_setting(session: Session, annotation_setting_id: str):
|
||||
session.execute(
|
||||
delete(AppAnnotationSetting)
|
||||
.where(AppAnnotationSetting.id == annotation_setting_id)
|
||||
@@ -237,7 +237,7 @@ def _delete_app_annotation_data(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_dataset_joins(tenant_id: str, app_id: str):
|
||||
def del_dataset_join(session, dataset_join_id: str):
|
||||
def del_dataset_join(session: Session, dataset_join_id: str):
|
||||
session.execute(
|
||||
delete(AppDatasetJoin)
|
||||
.where(AppDatasetJoin.id == dataset_join_id)
|
||||
@@ -253,7 +253,7 @@ def _delete_app_dataset_joins(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_workflows(tenant_id: str, app_id: str):
|
||||
def del_workflow(session, workflow_id: str):
|
||||
def del_workflow(session: Session, workflow_id: str):
|
||||
session.execute(delete(Workflow).where(Workflow.id == workflow_id).execution_options(synchronize_session=False))
|
||||
|
||||
_delete_records(
|
||||
@@ -304,7 +304,7 @@ def _delete_app_workflow_node_executions(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_workflow_app_logs(tenant_id: str, app_id: str):
|
||||
def del_workflow_app_log(session, workflow_app_log_id: str):
|
||||
def del_workflow_app_log(session: Session, workflow_app_log_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowAppLog)
|
||||
.where(WorkflowAppLog.id == workflow_app_log_id)
|
||||
@@ -320,7 +320,7 @@ def _delete_app_workflow_app_logs(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_workflow_archive_logs(tenant_id: str, app_id: str):
|
||||
def del_workflow_archive_log(session, workflow_archive_log_id: str):
|
||||
def del_workflow_archive_log(session: Session, workflow_archive_log_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowArchiveLog)
|
||||
.where(WorkflowArchiveLog.id == workflow_archive_log_id)
|
||||
@@ -361,7 +361,7 @@ def _delete_archived_workflow_run_files(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_conversations(tenant_id: str, app_id: str):
|
||||
def del_conversation(session, conversation_id: str):
|
||||
def del_conversation(session: Session, conversation_id: str):
|
||||
session.execute(
|
||||
delete(PinnedConversation)
|
||||
.where(PinnedConversation.conversation_id == conversation_id)
|
||||
@@ -388,7 +388,7 @@ def _delete_conversation_variables(*, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_messages(tenant_id: str, app_id: str):
|
||||
def del_message(session, message_id: str):
|
||||
def del_message(session: Session, message_id: str):
|
||||
session.execute(
|
||||
delete(MessageFeedback)
|
||||
.where(MessageFeedback.message_id == message_id)
|
||||
@@ -428,7 +428,7 @@ def _delete_app_messages(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_workflow_tool_providers(tenant_id: str, app_id: str):
|
||||
def del_tool_provider(session, tool_provider_id: str):
|
||||
def del_tool_provider(session: Session, tool_provider_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowToolProvider)
|
||||
.where(WorkflowToolProvider.id == tool_provider_id)
|
||||
@@ -444,7 +444,7 @@ def _delete_workflow_tool_providers(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_app_tag_bindings(tenant_id: str, app_id: str):
|
||||
def del_tag_binding(session, tag_binding_id: str):
|
||||
def del_tag_binding(session: Session, tag_binding_id: str):
|
||||
session.execute(
|
||||
delete(TagBinding).where(TagBinding.id == tag_binding_id).execution_options(synchronize_session=False)
|
||||
)
|
||||
@@ -458,7 +458,7 @@ def _delete_app_tag_bindings(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_end_users(tenant_id: str, app_id: str):
|
||||
def del_end_user(session, end_user_id: str):
|
||||
def del_end_user(session: Session, end_user_id: str):
|
||||
session.execute(delete(EndUser).where(EndUser.id == end_user_id).execution_options(synchronize_session=False))
|
||||
|
||||
_delete_records(
|
||||
@@ -470,7 +470,7 @@ def _delete_end_users(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_trace_app_configs(tenant_id: str, app_id: str):
|
||||
def del_trace_app_config(session, trace_app_config_id: str):
|
||||
def del_trace_app_config(session: Session, trace_app_config_id: str):
|
||||
session.execute(
|
||||
delete(TraceAppConfig)
|
||||
.where(TraceAppConfig.id == trace_app_config_id)
|
||||
@@ -639,7 +639,7 @@ def _delete_draft_variable_offload_data(file_ids: list[str]) -> int:
|
||||
|
||||
|
||||
def _delete_app_triggers(tenant_id: str, app_id: str):
|
||||
def del_app_trigger(session, trigger_id: str):
|
||||
def del_app_trigger(session: Session, trigger_id: str):
|
||||
session.execute(
|
||||
delete(AppTrigger).where(AppTrigger.id == trigger_id).execution_options(synchronize_session=False)
|
||||
)
|
||||
@@ -653,7 +653,7 @@ def _delete_app_triggers(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_workflow_plugin_triggers(tenant_id: str, app_id: str):
|
||||
def del_plugin_trigger(session, trigger_id: str):
|
||||
def del_plugin_trigger(session: Session, trigger_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowPluginTrigger)
|
||||
.where(WorkflowPluginTrigger.id == trigger_id)
|
||||
@@ -669,7 +669,7 @@ def _delete_workflow_plugin_triggers(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_workflow_webhook_triggers(tenant_id: str, app_id: str):
|
||||
def del_webhook_trigger(session, trigger_id: str):
|
||||
def del_webhook_trigger(session: Session, trigger_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowWebhookTrigger)
|
||||
.where(WorkflowWebhookTrigger.id == trigger_id)
|
||||
@@ -685,7 +685,7 @@ def _delete_workflow_webhook_triggers(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_workflow_schedule_plans(tenant_id: str, app_id: str):
|
||||
def del_schedule_plan(session, plan_id: str):
|
||||
def del_schedule_plan(session: Session, plan_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowSchedulePlan)
|
||||
.where(WorkflowSchedulePlan.id == plan_id)
|
||||
@@ -701,7 +701,7 @@ def _delete_workflow_schedule_plans(tenant_id: str, app_id: str):
|
||||
|
||||
|
||||
def _delete_workflow_trigger_logs(tenant_id: str, app_id: str):
|
||||
def del_trigger_log(session, log_id: str):
|
||||
def del_trigger_log(session: Session, log_id: str):
|
||||
session.execute(
|
||||
delete(WorkflowTriggerLog)
|
||||
.where(WorkflowTriggerLog.id == log_id)
|
||||
@@ -716,7 +716,9 @@ def _delete_workflow_trigger_logs(tenant_id: str, app_id: str):
|
||||
)
|
||||
|
||||
|
||||
def _delete_records(query_sql: str, params: dict[str, Any], delete_func: Callable, name: str) -> None:
|
||||
def _delete_records(
|
||||
query_sql: str, params: dict[str, Any], delete_func: Callable[[Session, str], None], name: str
|
||||
) -> None:
|
||||
while True:
|
||||
with session_factory.create_session() as session:
|
||||
rs = session.execute(sa.text(query_sql), params)
|
||||
|
||||
@@ -98,7 +98,7 @@ def test_run_completion_dispatches_to_completion_handler(
|
||||
):
|
||||
app = app_with_mode("completion")
|
||||
|
||||
captured: dict = {}
|
||||
captured = {}
|
||||
|
||||
def _fake_generate(*, app_model, user, args, invoke_from, streaming):
|
||||
captured["mode"] = app_model.mode
|
||||
|
||||
@@ -176,7 +176,7 @@ class TestScheduleServiceIntegration:
|
||||
with pytest.MonkeyPatch.context() as monkeypatch:
|
||||
calls: list[tuple] = []
|
||||
|
||||
def _track(*args, **kwargs):
|
||||
def _track[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
calls.append((args, kwargs))
|
||||
return datetime(2026, 1, 9, 10, 0, 0)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ class _TrackedSessionContext:
|
||||
self._opened_sessions.append(self._session)
|
||||
original_close = self._session.close
|
||||
|
||||
def _tracked_close(*args, **kwargs):
|
||||
def _tracked_close[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
self._closed_sessions.append(self._session)
|
||||
return original_close(*args, **kwargs)
|
||||
|
||||
@@ -70,7 +70,7 @@ def session_close_tracker():
|
||||
|
||||
original_create_session = task_module.session_factory.create_session
|
||||
|
||||
def _tracked_create_session(*args, **kwargs):
|
||||
def _tracked_create_session[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
original_context_manager = original_create_session(*args, **kwargs)
|
||||
return _TrackedSessionContext(original_context_manager, opened_sessions, closed_sessions)
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ def load_balancing_module(monkeypatch: pytest.MonkeyPatch):
|
||||
monkeypatch.setattr(wraps, "setup_required", _noop)
|
||||
monkeypatch.setattr(wraps, "account_initialization_required", _noop)
|
||||
|
||||
def _noop_route(*args, **kwargs): # type: ignore[override]
|
||||
def _noop_route[**P](*args: P.args, **kwargs: P.kwargs): # type: ignore[override]
|
||||
def _decorator(cls):
|
||||
return cls
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class TestAdvancedChatAppConfigManager:
|
||||
|
||||
def test_config_validate_filters_keys(self):
|
||||
def _add_key(key, value):
|
||||
def _inner(*args, **kwargs):
|
||||
def _inner[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
config = kwargs.get("config") if kwargs else args[-1]
|
||||
config = {**config, key: value}
|
||||
return config, [key]
|
||||
|
||||
@@ -711,7 +711,7 @@ class TestAdvancedChatAppGeneratorInternals:
|
||||
generator._get_message = MagicMock(return_value=_make_message(message_id="msg", conversation_id="conv"))
|
||||
|
||||
@contextmanager
|
||||
def _fake_context(*args, **kwargs):
|
||||
def _fake_context[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
monkeypatch.setattr("core.app.apps.advanced_chat.app_generator.preserve_flask_contexts", _fake_context)
|
||||
@@ -763,7 +763,7 @@ class TestAdvancedChatAppGeneratorInternals:
|
||||
sqlite_session.commit()
|
||||
|
||||
@contextmanager
|
||||
def _fake_context(*args, **kwargs):
|
||||
def _fake_context[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
monkeypatch.setattr("core.app.apps.advanced_chat.app_generator.preserve_flask_contexts", _fake_context)
|
||||
@@ -814,7 +814,7 @@ class TestAdvancedChatAppGeneratorInternals:
|
||||
generator._get_message = MagicMock(return_value=_make_message(message_id="msg", conversation_id="conv"))
|
||||
|
||||
@contextmanager
|
||||
def _fake_context(*args, **kwargs):
|
||||
def _fake_context[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
monkeypatch.setattr("core.app.apps.advanced_chat.app_generator.preserve_flask_contexts", _fake_context)
|
||||
@@ -893,7 +893,7 @@ class TestAdvancedChatAppGeneratorInternals:
|
||||
sqlite_session.commit()
|
||||
|
||||
@contextmanager
|
||||
def _fake_context(*args, **kwargs):
|
||||
def _fake_context[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
monkeypatch.setattr("core.app.apps.advanced_chat.app_generator.preserve_flask_contexts", _fake_context)
|
||||
@@ -935,7 +935,7 @@ class TestAdvancedChatAppGeneratorInternals:
|
||||
sqlite_session.commit()
|
||||
|
||||
@contextmanager
|
||||
def _fake_context(*args, **kwargs):
|
||||
def _fake_context[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
def _make_runner(error: Exception):
|
||||
@@ -1149,7 +1149,7 @@ class TestAdvancedChatAppGeneratorInternals:
|
||||
monkeypatch.setattr("core.app.apps.advanced_chat.app_generator.AdvancedChatAppRunner", _Runner)
|
||||
|
||||
@contextmanager
|
||||
def _fake_context(*args, **kwargs):
|
||||
def _fake_context[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
monkeypatch.setattr("core.app.apps.advanced_chat.app_generator.preserve_flask_contexts", _fake_context)
|
||||
|
||||
@@ -334,7 +334,7 @@ class TestGenerateWorker:
|
||||
@pytest.fixture(autouse=True)
|
||||
def patch_context(self, mocker: MockerFixture):
|
||||
@contextlib.contextmanager
|
||||
def ctx_manager(*args, **kwargs):
|
||||
def ctx_manager[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
mocker.patch("libs.flask_utils.preserve_flask_contexts", ctx_manager)
|
||||
|
||||
@@ -259,7 +259,7 @@ class TestAgentChatAppGeneratorWorker:
|
||||
@pytest.fixture(autouse=True)
|
||||
def patch_context(self, mocker: MockerFixture):
|
||||
@contextlib.contextmanager
|
||||
def ctx_manager(*args, **kwargs):
|
||||
def ctx_manager[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield
|
||||
|
||||
mocker.patch("core.app.apps.agent_chat.app_generator.preserve_flask_contexts", ctx_manager)
|
||||
|
||||
@@ -91,7 +91,7 @@ class TestChatAppConfigManager:
|
||||
config = {"extra": 1}
|
||||
|
||||
def _add_key(key, value):
|
||||
def _inner(*args, **kwargs):
|
||||
def _inner[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
config = args[-1]
|
||||
config = {**config, key: value}
|
||||
return config, [key]
|
||||
|
||||
@@ -25,7 +25,7 @@ class DummyGenerateEntity:
|
||||
|
||||
|
||||
class DummyQueueManager:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.published = []
|
||||
|
||||
def publish_error(self, error, pub_from):
|
||||
|
||||
@@ -149,7 +149,7 @@ def _persist_worker_records(session: Session) -> None:
|
||||
session.commit()
|
||||
|
||||
|
||||
def _dummy_preserve(*args, **kwargs):
|
||||
def _dummy_preserve[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
return contextlib.nullcontext()
|
||||
|
||||
|
||||
|
||||
@@ -199,7 +199,7 @@ def test_message_cycle_manager_uses_new_conversation_flag(monkeypatch: pytest.Mo
|
||||
def start(self):
|
||||
self.started = True
|
||||
|
||||
def fake_thread(*args, **kwargs):
|
||||
def fake_thread[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
thread = DummyThread(**kwargs)
|
||||
captured["thread"] = thread
|
||||
return thread
|
||||
|
||||
@@ -14,7 +14,7 @@ from models import Tenant
|
||||
|
||||
|
||||
class DummyQueueManager(AppQueueManager):
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.published = []
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class TestWorkflowAppConfigManager:
|
||||
|
||||
def test_config_validate_filters_keys(self):
|
||||
def _add_key(key, value):
|
||||
def _inner(*args, **kwargs):
|
||||
def _inner[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
# Support both positional and keyword arguments for config
|
||||
if "config" in kwargs:
|
||||
config = kwargs["config"]
|
||||
|
||||
@@ -468,7 +468,7 @@ class TestWorkflowGenerateTaskPipeline:
|
||||
pipeline._process_stream_response = lambda **kwargs: iter([PingStreamResponse(task_id="task")])
|
||||
|
||||
class _Publisher:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.calls = 0
|
||||
|
||||
def check_and_get_audio(self, *, block=False):
|
||||
@@ -628,7 +628,7 @@ class TestWorkflowGenerateTaskPipeline:
|
||||
blocking_reads = []
|
||||
|
||||
class _Publisher:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def check_and_get_audio(self, *, block=False):
|
||||
@@ -662,7 +662,7 @@ class TestWorkflowGenerateTaskPipeline:
|
||||
pipeline._process_stream_response = lambda **kwargs: iter([])
|
||||
|
||||
class _Publisher:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def check_and_get_audio(self, *, block=False):
|
||||
|
||||
+9
-9
@@ -415,7 +415,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
_set_method(pipeline, "_save_message", lambda **kwargs: None)
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
@@ -589,7 +589,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
return self._items
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.calls = 0
|
||||
|
||||
def __enter__(self):
|
||||
@@ -675,7 +675,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
_set_method(pipeline, "error_to_stream_response", lambda err: ErrorStreamResponse(task_id="task", err=err))
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
@@ -763,7 +763,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
agent_thought = _agent_thought()
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
@@ -1186,7 +1186,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
)
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
@@ -1522,7 +1522,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
return []
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
@@ -1561,7 +1561,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
return []
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
@@ -1624,7 +1624,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
return self._items
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
self.calls = 0
|
||||
|
||||
def __enter__(self):
|
||||
@@ -1686,7 +1686,7 @@ class TestEasyUiBasedGenerateTaskPipeline:
|
||||
)
|
||||
|
||||
class _Session:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
|
||||
@@ -30,7 +30,7 @@ class TestExternalDataFetch:
|
||||
# This approach is robust regardless of thread scheduling order
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
def factory_side_effect(*args, **kwargs):
|
||||
def factory_side_effect[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
variable = kwargs.get("variable")
|
||||
mock_instance = MagicMock()
|
||||
if variable == "var1":
|
||||
|
||||
@@ -629,7 +629,7 @@ class TestPostWriter:
|
||||
call_count = {"n": 0}
|
||||
original_get = write_queue.get
|
||||
|
||||
def patched_get(*args, **kwargs):
|
||||
def patched_get[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
call_count["n"] += 1
|
||||
if call_count["n"] == 1:
|
||||
raise queue.Empty
|
||||
|
||||
@@ -933,7 +933,7 @@ class TestHandlePostRequestNew:
|
||||
|
||||
def _stream_ctx(self, mock_response):
|
||||
@contextmanager
|
||||
def _stream(*args, **kwargs):
|
||||
def _stream[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield mock_response
|
||||
|
||||
return _stream
|
||||
@@ -1388,7 +1388,7 @@ class TestPostWriterNew:
|
||||
|
||||
original_get = c2s.get
|
||||
|
||||
def patched_get(*args, **kwargs):
|
||||
def patched_get[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
call_count["n"] += 1
|
||||
if call_count["n"] == 1:
|
||||
raise queue.Empty
|
||||
|
||||
@@ -62,7 +62,7 @@ class ReceiveNotification(RootModel[Union[CancelledNotification, MockNotificatio
|
||||
|
||||
|
||||
class MockSession(BaseSession[MockRequest, MockNotification, MockResult, ReceiveRequest, ReceiveNotification]):
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.received_requests = []
|
||||
self.received_notifications = []
|
||||
|
||||
@@ -150,7 +150,7 @@ class TestOutputModeration:
|
||||
output_moderation.is_final_chunk = True
|
||||
|
||||
# To avoid infinite loop, we'll set thread_running to False after one iteration
|
||||
def side_effect(*args, **kwargs):
|
||||
def side_effect[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
output_moderation.thread_running = False
|
||||
return mock_moderation.return_value
|
||||
|
||||
@@ -182,7 +182,7 @@ class TestOutputModeration:
|
||||
|
||||
with patch.object(OutputModeration, "moderation") as mock_moderation:
|
||||
# Use side_effect to change thread_running on second call
|
||||
def side_effect(*args, **kwargs):
|
||||
def side_effect[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
if mock_moderation.call_count > 1:
|
||||
output_moderation.thread_running = False
|
||||
return None
|
||||
@@ -221,7 +221,7 @@ class TestOutputModeration:
|
||||
# Return None (exception or no rule)
|
||||
mock_moderation.return_value = None
|
||||
|
||||
def side_effect(*args, **kwargs):
|
||||
def side_effect[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
output_moderation.thread_running = False
|
||||
|
||||
mock_moderation.side_effect = side_effect
|
||||
|
||||
@@ -64,7 +64,7 @@ class TestOAuthHandler:
|
||||
handler = OAuthHandler()
|
||||
captured_data = {}
|
||||
|
||||
def fake_stream(*args, **kwargs):
|
||||
def fake_stream[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
captured_data.update(kwargs["data"])
|
||||
return iter([SimpleNamespace(credentials={"token": "abc"}, metadata={}, expires_at=1)])
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ class TestPluginTriggerClient:
|
||||
client = PluginTriggerClient()
|
||||
provider = _trigger_provider("remote")
|
||||
|
||||
def fake_request(*args, **kwargs):
|
||||
def fake_request[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
transformer = kwargs["transformer"]
|
||||
payload = {
|
||||
"data": [
|
||||
@@ -94,7 +94,7 @@ class TestPluginTriggerClient:
|
||||
client = PluginTriggerClient()
|
||||
provider = _trigger_provider("provider")
|
||||
|
||||
def fake_request(*args, **kwargs):
|
||||
def fake_request[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
transformer = kwargs["transformer"]
|
||||
payload = {"data": {"declaration": {"events": [{"identity": {"provider": "old"}}]}}}
|
||||
transformed = transformer(payload)
|
||||
|
||||
@@ -1284,7 +1284,7 @@ class TestPluginRuntimeAdvancedScenarios:
|
||||
# Arrange
|
||||
call_count = 0
|
||||
|
||||
def side_effect(*args, **kwargs):
|
||||
def side_effect[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
nonlocal call_count
|
||||
call_count += 1
|
||||
if call_count < 3:
|
||||
|
||||
@@ -66,7 +66,7 @@ class TestCSVExtractor:
|
||||
def test_extract_wraps_unicode_error_when_autodetect_disabled(self, monkeypatch: pytest.MonkeyPatch):
|
||||
extractor = CSVExtractor("dummy.csv", autodetect_encoding=False)
|
||||
|
||||
def raise_decode(*args, **kwargs):
|
||||
def raise_decode[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
raise UnicodeDecodeError("utf-8", b"x", 0, 1, "decode error")
|
||||
|
||||
monkeypatch.setattr("builtins.open", raise_decode)
|
||||
@@ -102,7 +102,7 @@ class TestCSVExtractor:
|
||||
def test_extract_autodetect_encoding_all_attempts_fail_returns_empty(self, monkeypatch: pytest.MonkeyPatch):
|
||||
extractor = CSVExtractor("dummy.csv", autodetect_encoding=True)
|
||||
|
||||
def always_raise(*args, **kwargs):
|
||||
def always_raise[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
raise UnicodeDecodeError("utf-8", b"x", 0, 1, "decode error")
|
||||
|
||||
monkeypatch.setattr("builtins.open", always_raise)
|
||||
|
||||
@@ -36,7 +36,7 @@ class _ExtractorFactory:
|
||||
calls = self.calls
|
||||
|
||||
class DummyExtractor:
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
calls.append((name, args, kwargs))
|
||||
|
||||
def extract(self):
|
||||
|
||||
@@ -5,6 +5,7 @@ from unittest.mock import Mock, patch
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
from flask import Flask
|
||||
from sqlalchemy import event
|
||||
from sqlalchemy.orm import Session
|
||||
from werkzeug.datastructures import FileStorage
|
||||
@@ -95,7 +96,9 @@ class TestQAIndexProcessor:
|
||||
splitter = Mock()
|
||||
splitter.split_documents.return_value = [split_node]
|
||||
|
||||
def _append_document(flask_app, tenant_id, document_node, all_qa_documents, document_language):
|
||||
def _append_document(
|
||||
flask_app: Flask, tenant_id, document_node, all_qa_documents: list[Document], document_language
|
||||
):
|
||||
all_qa_documents.append(Document(page_content="Q1", metadata={"answer": "A1"}))
|
||||
|
||||
with (
|
||||
@@ -142,7 +145,7 @@ class TestQAIndexProcessor:
|
||||
splitter = Mock()
|
||||
splitter.split_documents.return_value = [split_node]
|
||||
|
||||
def _append_document(flask_app, tenant_id, document_node, all_qa_documents, document_language):
|
||||
def _append_document(flask_app: Flask, tenant_id, document_node, all_qa_documents, document_language):
|
||||
all_qa_documents.append(Document(page_content=f"Q-{document_node.page_content}", metadata={"answer": "A"}))
|
||||
|
||||
with (
|
||||
|
||||
@@ -83,7 +83,7 @@ def _tool_yaml() -> dict[str, Any]:
|
||||
def test_builtin_tool_provider_init_load_tools_and_basic_accessors(monkeypatch: pytest.MonkeyPatch):
|
||||
yaml_payloads = [_provider_yaml(), _tool_yaml()]
|
||||
|
||||
def _load_yaml(*args, **kwargs):
|
||||
def _load_yaml[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
return yaml_payloads.pop(0)
|
||||
|
||||
monkeypatch.setattr("core.tools.builtin_tool.provider.load_yaml_file_cached", _load_yaml)
|
||||
|
||||
@@ -12,7 +12,7 @@ class _FakeToolFileManager:
|
||||
|
||||
last_call: dict[str, Any] | None = None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__[**P](self, *args: P.args, **kwargs: P.kwargs):
|
||||
pass
|
||||
|
||||
def create_file_by_raw(
|
||||
|
||||
@@ -1685,7 +1685,7 @@ def test_run_datasource_node_preview_raises_for_stream_non_string(
|
||||
|
||||
runtime = mocker.Mock()
|
||||
|
||||
def _bad_stream_generator(*args, **kwargs):
|
||||
def _bad_stream_generator[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
yield DatasourceMessage(
|
||||
type=DatasourceMessage.MessageType.VARIABLE,
|
||||
message=DatasourceMessage.VariableMessage(variable_name="content", variable_value=1, stream=True),
|
||||
|
||||
@@ -1537,7 +1537,7 @@ class TestBillingServiceSubscriptionOperations:
|
||||
}
|
||||
|
||||
# Second chunk fails - need to create a mock that raises when called
|
||||
def side_effect_func(*args, **kwargs):
|
||||
def side_effect_func[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
if mock_send_request.call_count == 1:
|
||||
return first_chunk_response
|
||||
else:
|
||||
@@ -1561,7 +1561,7 @@ class TestBillingServiceSubscriptionOperations:
|
||||
tenant_ids = [f"tenant-{i}" for i in range(250)]
|
||||
|
||||
# All chunks fail
|
||||
def side_effect_func(*args, **kwargs):
|
||||
def side_effect_func[**P](*args: P.args, **kwargs: P.kwargs):
|
||||
raise ValueError("API error")
|
||||
|
||||
mock_send_request.side_effect = side_effect_func
|
||||
|
||||
Reference in New Issue
Block a user