diff --git a/api/controllers/console/app/app.py b/api/controllers/console/app/app.py index c67ca57c63a..32a5edbab19 100644 --- a/api/controllers/console/app/app.py +++ b/api/controllers/console/app/app.py @@ -7,7 +7,7 @@ from flask import request from flask_restx import Resource from graphon.enums import WorkflowExecutionStatus from graphon.file import helpers as file_helpers -from pydantic import AliasChoices, BaseModel, ConfigDict, Field, computed_field, field_validator +from pydantic import AliasChoices, BaseModel, Field, computed_field, field_validator from sqlalchemy import select from sqlalchemy.orm import sessionmaker from werkzeug.exceptions import BadRequest @@ -29,6 +29,7 @@ from core.ops.ops_trace_manager import OpsTraceManager from core.rag.retrieval.retrieval_methods import RetrievalMethod from core.trigger.constants import TRIGGER_NODE_TYPES from extensions.ext_database import db +from fields.base import ResponseModel from libs.login import current_account_with_tenant, login_required from models import App, DatasetPermissionEnum, Workflow from models.model import IconType @@ -155,16 +156,6 @@ class AppTracePayload(BaseModel): type JSONValue = Any -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) - - def _to_timestamp(value: datetime | int | None) -> int | None: if isinstance(value, datetime): return int(value.timestamp()) diff --git a/api/fields/annotation_fields.py b/api/fields/annotation_fields.py index a6469507226..b2a0e92c476 100644 --- a/api/fields/annotation_fields.py +++ b/api/fields/annotation_fields.py @@ -2,7 +2,9 @@ from __future__ import annotations from datetime import datetime -from pydantic import BaseModel, ConfigDict, Field, field_validator +from pydantic import Field, field_validator + +from fields.base import ResponseModel def _to_timestamp(value: datetime | int | None) -> int | None: @@ -11,16 +13,6 @@ def _to_timestamp(value: datetime | int | None) -> int | None: return value -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) - - class Annotation(ResponseModel): id: str question: str | None = None diff --git a/api/fields/base.py b/api/fields/base.py new file mode 100644 index 00000000000..b806ab6c9c8 --- /dev/null +++ b/api/fields/base.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict + + +class ResponseModel(BaseModel): + model_config = ConfigDict( + from_attributes=True, + extra="ignore", + populate_by_name=True, + serialize_by_alias=True, + protected_namespaces=(), + ) diff --git a/api/fields/conversation_fields.py b/api/fields/conversation_fields.py index b1d1b4caac3..7878d586799 100644 --- a/api/fields/conversation_fields.py +++ b/api/fields/conversation_fields.py @@ -4,21 +4,13 @@ from datetime import datetime from typing import Any from graphon.file import File -from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator +from pydantic import Field, field_validator, model_validator + +from fields.base import ResponseModel type JSONValue = Any -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) - - class MessageFile(ResponseModel): id: str filename: str diff --git a/api/fields/end_user_fields.py b/api/fields/end_user_fields.py index df1980616aa..3851933cc2e 100644 --- a/api/fields/end_user_fields.py +++ b/api/fields/end_user_fields.py @@ -3,7 +3,9 @@ from __future__ import annotations from datetime import datetime from flask_restx import fields -from pydantic import BaseModel, ConfigDict, Field +from pydantic import Field + +from fields.base import ResponseModel simple_end_user_fields = { "id": fields.String, @@ -26,16 +28,6 @@ end_user_detail_fields = { } -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) - - class SimpleEndUser(ResponseModel): id: str type: str diff --git a/api/fields/file_fields.py b/api/fields/file_fields.py index 913fb675f9e..ad8b95e4dc5 100644 --- a/api/fields/file_fields.py +++ b/api/fields/file_fields.py @@ -2,17 +2,9 @@ from __future__ import annotations from datetime import datetime -from pydantic import BaseModel, ConfigDict, field_validator +from pydantic import field_validator - -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) +from fields.base import ResponseModel def _to_timestamp(value: datetime | int | None) -> int | None: diff --git a/api/fields/member_fields.py b/api/fields/member_fields.py index b8daa5af303..cfe0015918d 100644 --- a/api/fields/member_fields.py +++ b/api/fields/member_fields.py @@ -4,7 +4,9 @@ from datetime import datetime from flask_restx import fields from graphon.file import helpers as file_helpers -from pydantic import BaseModel, ConfigDict, computed_field, field_validator +from pydantic import computed_field, field_validator + +from fields.base import ResponseModel simple_account_fields = { "id": fields.String, @@ -27,16 +29,6 @@ def _build_avatar_url(avatar: str | None) -> str | None: return file_helpers.get_signed_file_url(avatar) -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) - - class SimpleAccount(ResponseModel): id: str name: str diff --git a/api/fields/tag_fields.py b/api/fields/tag_fields.py index 7cb64e5ca8e..a3629f477a0 100644 --- a/api/fields/tag_fields.py +++ b/api/fields/tag_fields.py @@ -1,16 +1,6 @@ from __future__ import annotations -from pydantic import BaseModel, ConfigDict - - -class ResponseModel(BaseModel): - model_config = ConfigDict( - from_attributes=True, - extra="ignore", - populate_by_name=True, - serialize_by_alias=True, - protected_namespaces=(), - ) +from fields.base import ResponseModel class DataSetTag(ResponseModel):