From de47d43b65e4c5b5af908820ccc2e5319f0f15c5 Mon Sep 17 00:00:00 2001 From: krishkantiuj-ren Date: Mon, 1 Jun 2026 11:45:19 +0800 Subject: [PATCH] refactor: convert isinstance chains to match/case syntax (#36862) Co-authored-by: krishkantiuj-ren Co-authored-by: Asuka Minato --- api/core/app/apps/base_app_queue_manager.py | 24 ++++++++-------- api/core/rag/retrieval/dataset_retrieval.py | 31 +++++++++++---------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/api/core/app/apps/base_app_queue_manager.py b/api/core/app/apps/base_app_queue_manager.py index d1771452c5..4bf29da6e3 100644 --- a/api/core/app/apps/base_app_queue_manager.py +++ b/api/core/app/apps/base_app_queue_manager.py @@ -209,14 +209,16 @@ class AppQueueManager(ABC): def _check_for_sqlalchemy_models(self, data: Any): # from entity to dict or list - if isinstance(data, dict): - for value in data.values(): - self._check_for_sqlalchemy_models(value) - elif isinstance(data, list): - for item in data: - self._check_for_sqlalchemy_models(item) - else: - if isinstance(data, DeclarativeMeta) or hasattr(data, "_sa_instance_state"): - raise TypeError( - "Critical Error: Passing SQLAlchemy Model instances that cause thread safety issues is not allowed." - ) + match data: + case dict(): + for value in data.values(): + self._check_for_sqlalchemy_models(value) + case list(): + for item in data: + self._check_for_sqlalchemy_models(item) + case _: + if isinstance(data, DeclarativeMeta) or hasattr(data, "_sa_instance_state"): + raise TypeError( + "Critical Error: Passing SQLAlchemy Model instances that" + " cause thread safety issues is not allowed." + ) diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index dae6f63b7b..f3fd2d4d8f 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -1525,16 +1525,18 @@ class DatasetRetrieval: filters.append(json_field.like(f"%{escaped_value}", escape="\\")) case "is" | "=": - if isinstance(value, str): - filters.append(json_field == value) - elif isinstance(value, (int, float)): - filters.append(DatasetDocument.doc_metadata[metadata_name].as_float() == value) + match value: + case str(): + filters.append(json_field == value) + case int() | float(): + filters.append(DatasetDocument.doc_metadata[metadata_name].as_float() == value) case "is not" | "≠": - if isinstance(value, str): - filters.append(json_field != value) - elif isinstance(value, (int, float)): - filters.append(DatasetDocument.doc_metadata[metadata_name].as_float() != value) + match value: + case str(): + filters.append(json_field != value) + case int() | float(): + filters.append(DatasetDocument.doc_metadata[metadata_name].as_float() != value) case "empty": filters.append(DatasetDocument.doc_metadata[metadata_name].is_(None)) @@ -1707,12 +1709,13 @@ class DatasetRetrieval: usage = None for result in invoke_result: text = result.delta.message.content - if isinstance(text, str): - full_text += text - elif isinstance(text, list): - for i in text: - if i.data: - full_text += i.data + match text: + case str(): + full_text += text + case list(): + for i in text: + if i.data: + full_text += i.data if not model: model = result.model