chore(api): align Python support with 3.12 (#34419)

Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
This commit is contained in:
99
2026-04-02 13:07:32 +08:00
committed by GitHub
parent cb9ee5903a
commit 8f9dbf269e
97 changed files with 410 additions and 1441 deletions

View File

@@ -5,12 +5,11 @@ import secrets
import uuid
from datetime import UTC, datetime, timedelta
from hashlib import sha256
from typing import Any, cast
from typing import Any, TypedDict, cast
from pydantic import BaseModel, TypeAdapter
from sqlalchemy import func, select
from sqlalchemy.orm import Session
from typing_extensions import TypedDict
class InvitationData(TypedDict):

View File

@@ -1,7 +1,5 @@
from abc import ABC, abstractmethod
from typing import Any
from typing_extensions import TypedDict
from typing import Any, TypedDict
class AuthCredentials(TypedDict):

View File

@@ -2,13 +2,12 @@ import json
import logging
import os
from collections.abc import Sequence
from typing import Literal
from typing import Literal, TypedDict
import httpx
from pydantic import TypeAdapter
from sqlalchemy import select
from tenacity import retry, retry_if_exception_type, stop_before_delay, wait_fixed
from typing_extensions import TypedDict
from werkzeug.exceptions import InternalServerError
from core.helper.http_client_pooling import get_pooled_http_client

View File

@@ -1,7 +1,7 @@
import contextlib
import logging
from collections.abc import Callable, Sequence
from typing import Any, Union
from typing import Any
from graphon.variables.types import SegmentType
from sqlalchemy import asc, desc, func, or_, select
@@ -37,7 +37,7 @@ class ConversationService:
*,
session: Session,
app_model: App,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
last_id: str | None,
limit: int,
invoke_from: InvokeFrom,
@@ -119,7 +119,7 @@ class ConversationService:
cls,
app_model: App,
conversation_id: str,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
name: str | None,
auto_generate: bool,
):
@@ -159,7 +159,7 @@ class ConversationService:
return conversation
@classmethod
def get_conversation(cls, app_model: App, conversation_id: str, user: Union[Account, EndUser] | None):
def get_conversation(cls, app_model: App, conversation_id: str, user: Account | EndUser | None):
conversation = db.session.scalar(
select(Conversation)
.where(
@@ -179,7 +179,7 @@ class ConversationService:
return conversation
@classmethod
def delete(cls, app_model: App, conversation_id: str, user: Union[Account, EndUser] | None):
def delete(cls, app_model: App, conversation_id: str, user: Account | EndUser | None):
"""
Delete a conversation only if it belongs to the given user and app context.
@@ -209,7 +209,7 @@ class ConversationService:
cls,
app_model: App,
conversation_id: str,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
limit: int,
last_id: str | None,
variable_name: str | None = None,
@@ -278,7 +278,7 @@ class ConversationService:
app_model: App,
conversation_id: str,
variable_id: str,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
new_value: Any,
):
"""

View File

@@ -1,5 +1,4 @@
from collections.abc import Sequence
from typing import Union
from graphon.model_runtime.entities.model_entities import ModelType
from pydantic import TypeAdapter
@@ -57,7 +56,7 @@ class MessageService:
def pagination_by_first_id(
cls,
app_model: App,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
conversation_id: str,
first_id: str | None,
limit: int,
@@ -117,7 +116,7 @@ class MessageService:
def pagination_by_last_id(
cls,
app_model: App,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
last_id: str | None,
limit: int,
conversation_id: str | None = None,
@@ -170,7 +169,7 @@ class MessageService:
*,
app_model: App,
message_id: str,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
rating: FeedbackRating | None,
content: str | None,
):
@@ -221,7 +220,7 @@ class MessageService:
return [record.to_dict() for record in feedbacks]
@classmethod
def get_message(cls, app_model: App, user: Union[Account, EndUser] | None, message_id: str):
def get_message(cls, app_model: App, user: Account | EndUser | None, message_id: str):
message = db.session.scalar(
select(Message)
.where(
@@ -241,7 +240,7 @@ class MessageService:
@classmethod
def get_suggested_questions_after_answer(
cls, app_model: App, user: Union[Account, EndUser] | None, message_id: str, invoke_from: InvokeFrom
cls, app_model: App, user: Account | EndUser | None, message_id: str, invoke_from: InvokeFrom
) -> list[str]:
if not user:
raise ValueError("user cannot be None")

View File

@@ -5,7 +5,7 @@ import time
from collections.abc import Mapping, Sequence
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
from typing import Any
from typing import Any, TypedDict
from uuid import uuid4
import click
@@ -14,7 +14,6 @@ import tqdm
from flask import Flask, current_app
from pydantic import TypeAdapter
from sqlalchemy.orm import Session
from typing_extensions import TypedDict
from core.agent.entities import AgentToolEntity
from core.helper import marketplace

View File

@@ -13,13 +13,12 @@ from collections.abc import Callable
from concurrent.futures import ThreadPoolExecutor
from dataclasses import dataclass
from datetime import datetime
from typing import Any, cast
from typing import Any, TypedDict, cast
import click
from pydantic import TypeAdapter
from sqlalchemy.dialects.postgresql import insert as pg_insert
from sqlalchemy.engine import CursorResult
from typing_extensions import TypedDict
class _TableInfo(TypedDict, total=False):

View File

@@ -1,5 +1,3 @@
from typing import Union
from sqlalchemy import select
from extensions.ext_database import db
@@ -14,7 +12,7 @@ from services.message_service import MessageService
class SavedMessageService:
@classmethod
def pagination_by_last_id(
cls, app_model: App, user: Union[Account, EndUser] | None, last_id: str | None, limit: int
cls, app_model: App, user: Account | EndUser | None, last_id: str | None, limit: int
) -> InfiniteScrollPagination:
if not user:
raise ValueError("User is required")
@@ -34,7 +32,7 @@ class SavedMessageService:
)
@classmethod
def save(cls, app_model: App, user: Union[Account, EndUser] | None, message_id: str):
def save(cls, app_model: App, user: Account | EndUser | None, message_id: str):
if not user:
return
saved_message = db.session.scalar(
@@ -64,7 +62,7 @@ class SavedMessageService:
db.session.commit()
@classmethod
def delete(cls, app_model: App, user: Union[Account, EndUser] | None, message_id: str):
def delete(cls, app_model: App, user: Account | EndUser | None, message_id: str):
if not user:
return
saved_message = db.session.scalar(

View File

@@ -1,11 +1,10 @@
import json
import logging
from typing import Any, cast
from typing import Any, TypedDict, cast
from graphon.model_runtime.utils.encoders import jsonable_encoder
from httpx import get
from sqlalchemy import select
from typing_extensions import TypedDict
from core.entities.provider_entities import ProviderConfig
from core.tools.__base.tool_runtime import ToolRuntime

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
import dataclasses
from abc import ABC, abstractmethod
from collections.abc import Mapping
from typing import Any, Generic, TypeAlias, TypeVar, overload
from typing import Any, overload
from graphon.file import File
from graphon.nodes.variable_assigner.common.helpers import UpdatedVariable
@@ -43,12 +43,9 @@ class _PCKeys:
CHILD_CONTENTS = "child_contents"
_T = TypeVar("_T")
@dataclasses.dataclass(frozen=True)
class _PartResult(Generic[_T]):
value: _T
class _PartResult[T]:
value: T
value_size: int
truncated: bool
@@ -61,7 +58,7 @@ class UnknownTypeError(Exception):
pass
JSONTypes: TypeAlias = int | float | str | list[object] | dict[str, object] | None | bool
type JSONTypes = int | float | str | list[object] | dict[str, object] | None | bool
@dataclasses.dataclass(frozen=True)

View File

@@ -1,5 +1,3 @@
from typing import Union
from sqlalchemy import select
from sqlalchemy.orm import Session
@@ -20,7 +18,7 @@ class WebConversationService:
*,
session: Session,
app_model: App,
user: Union[Account, EndUser] | None,
user: Account | EndUser | None,
last_id: str | None,
limit: int,
invoke_from: InvokeFrom,
@@ -61,7 +59,7 @@ class WebConversationService:
)
@classmethod
def pin(cls, app_model: App, conversation_id: str, user: Union[Account, EndUser] | None):
def pin(cls, app_model: App, conversation_id: str, user: Account | EndUser | None):
if not user:
return
pinned_conversation = db.session.scalar(
@@ -93,7 +91,7 @@ class WebConversationService:
db.session.commit()
@classmethod
def unpin(cls, app_model: App, conversation_id: str, user: Union[Account, EndUser] | None):
def unpin(cls, app_model: App, conversation_id: str, user: Account | EndUser | None):
if not user:
return
pinned_conversation = db.session.scalar(

View File

@@ -1,5 +1,5 @@
import json
from typing import Any
from typing import Any, TypedDict
from graphon.file import FileUploadConfig
from graphon.model_runtime.entities.llm_entities import LLMMode
@@ -7,7 +7,6 @@ from graphon.model_runtime.utils.encoders import jsonable_encoder
from graphon.nodes import BuiltinNodeTypes
from graphon.variables.input_entities import VariableEntity
from sqlalchemy import select
from typing_extensions import TypedDict
from core.app.app_config.entities import (
DatasetEntity,

View File

@@ -1,12 +1,11 @@
import json
import uuid
from datetime import datetime
from typing import Any
from typing import Any, TypedDict
from graphon.enums import WorkflowExecutionStatus
from sqlalchemy import and_, func, or_, select
from sqlalchemy.orm import Session
from typing_extensions import TypedDict
from models import Account, App, EndUser, TenantAccountJoin, WorkflowAppLog, WorkflowArchiveLog, WorkflowRun
from models.enums import AppTriggerType, CreatorUserRole