add typing to all wraps (#25405)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
eb52216a9c
commit
38057b1b0e
8 changed files with 61 additions and 46 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Optional, Union
|
from typing import Optional, ParamSpec, TypeVar, Union
|
||||||
|
|
||||||
from controllers.console.app.error import AppNotFoundError
|
from controllers.console.app.error import AppNotFoundError
|
||||||
from extensions.ext_database import db
|
from extensions.ext_database import db
|
||||||
|
|
@ -8,6 +8,9 @@ from libs.login import current_user
|
||||||
from models import App, AppMode
|
from models import App, AppMode
|
||||||
from models.account import Account
|
from models.account import Account
|
||||||
|
|
||||||
|
P = ParamSpec("P")
|
||||||
|
R = TypeVar("R")
|
||||||
|
|
||||||
|
|
||||||
def _load_app_model(app_id: str) -> Optional[App]:
|
def _load_app_model(app_id: str) -> Optional[App]:
|
||||||
assert isinstance(current_user, Account)
|
assert isinstance(current_user, Account)
|
||||||
|
|
@ -19,10 +22,10 @@ def _load_app_model(app_id: str) -> Optional[App]:
|
||||||
return app_model
|
return app_model
|
||||||
|
|
||||||
|
|
||||||
def get_app_model(view: Optional[Callable] = None, *, mode: Union[AppMode, list[AppMode], None] = None):
|
def get_app_model(view: Optional[Callable[P, R]] = None, *, mode: Union[AppMode, list[AppMode], None] = None):
|
||||||
def decorator(view_func):
|
def decorator(view_func: Callable[P, R]):
|
||||||
@wraps(view_func)
|
@wraps(view_func)
|
||||||
def decorated_view(*args, **kwargs):
|
def decorated_view(*args: P.args, **kwargs: P.kwargs):
|
||||||
if not kwargs.get("app_id"):
|
if not kwargs.get("app_id"):
|
||||||
raise ValueError("missing app_id in path parameters")
|
raise ValueError("missing app_id in path parameters")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Optional
|
from typing import Optional, ParamSpec, TypeVar
|
||||||
|
|
||||||
from flask import current_app, request
|
from flask import current_app, request
|
||||||
from flask_login import user_logged_in
|
from flask_login import user_logged_in
|
||||||
|
|
@ -14,6 +14,9 @@ from libs.login import _get_user
|
||||||
from models.account import Tenant
|
from models.account import Tenant
|
||||||
from models.model import EndUser
|
from models.model import EndUser
|
||||||
|
|
||||||
|
P = ParamSpec("P")
|
||||||
|
R = TypeVar("R")
|
||||||
|
|
||||||
|
|
||||||
def get_user(tenant_id: str, user_id: str | None) -> EndUser:
|
def get_user(tenant_id: str, user_id: str | None) -> EndUser:
|
||||||
"""
|
"""
|
||||||
|
|
@ -52,19 +55,19 @@ def get_user(tenant_id: str, user_id: str | None) -> EndUser:
|
||||||
return user_model
|
return user_model
|
||||||
|
|
||||||
|
|
||||||
def get_user_tenant(view: Optional[Callable] = None):
|
def get_user_tenant(view: Optional[Callable[P, R]] = None):
|
||||||
def decorator(view_func):
|
def decorator(view_func: Callable[P, R]):
|
||||||
@wraps(view_func)
|
@wraps(view_func)
|
||||||
def decorated_view(*args, **kwargs):
|
def decorated_view(*args: P.args, **kwargs: P.kwargs):
|
||||||
# fetch json body
|
# fetch json body
|
||||||
parser = reqparse.RequestParser()
|
parser = reqparse.RequestParser()
|
||||||
parser.add_argument("tenant_id", type=str, required=True, location="json")
|
parser.add_argument("tenant_id", type=str, required=True, location="json")
|
||||||
parser.add_argument("user_id", type=str, required=True, location="json")
|
parser.add_argument("user_id", type=str, required=True, location="json")
|
||||||
|
|
||||||
kwargs = parser.parse_args()
|
p = parser.parse_args()
|
||||||
|
|
||||||
user_id = kwargs.get("user_id")
|
user_id: Optional[str] = p.get("user_id")
|
||||||
tenant_id = kwargs.get("tenant_id")
|
tenant_id: str = p.get("tenant_id")
|
||||||
|
|
||||||
if not tenant_id:
|
if not tenant_id:
|
||||||
raise ValueError("tenant_id is required")
|
raise ValueError("tenant_id is required")
|
||||||
|
|
@ -107,9 +110,9 @@ def get_user_tenant(view: Optional[Callable] = None):
|
||||||
return decorator(view)
|
return decorator(view)
|
||||||
|
|
||||||
|
|
||||||
def plugin_data(view: Optional[Callable] = None, *, payload_type: type[BaseModel]):
|
def plugin_data(view: Optional[Callable[P, R]] = None, *, payload_type: type[BaseModel]):
|
||||||
def decorator(view_func):
|
def decorator(view_func: Callable[P, R]):
|
||||||
def decorated_view(*args, **kwargs):
|
def decorated_view(*args: P.args, **kwargs: P.kwargs):
|
||||||
try:
|
try:
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
|
||||||
|
|
@ -46,9 +46,9 @@ def enterprise_inner_api_only(view: Callable[P, R]):
|
||||||
return decorated
|
return decorated
|
||||||
|
|
||||||
|
|
||||||
def enterprise_inner_api_user_auth(view):
|
def enterprise_inner_api_user_auth(view: Callable[P, R]):
|
||||||
@wraps(view)
|
@wraps(view)
|
||||||
def decorated(*args, **kwargs):
|
def decorated(*args: P.args, **kwargs: P.kwargs):
|
||||||
if not dify_config.INNER_API:
|
if not dify_config.INNER_API:
|
||||||
return view(*args, **kwargs)
|
return view(*args, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class ModelProviderAvailableModelApi(Resource):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@validate_dataset_token
|
@validate_dataset_token
|
||||||
def get(self, _, model_type):
|
def get(self, _, model_type: str):
|
||||||
"""Get available models by model type.
|
"""Get available models by model type.
|
||||||
|
|
||||||
Returns a list of available models for the specified model type.
|
Returns a list of available models for the specified model type.
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from collections.abc import Callable
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from enum import StrEnum, auto
|
from enum import StrEnum, auto
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Optional, ParamSpec, TypeVar
|
from typing import Concatenate, Optional, ParamSpec, TypeVar
|
||||||
|
|
||||||
from flask import current_app, request
|
from flask import current_app, request
|
||||||
from flask_login import user_logged_in
|
from flask_login import user_logged_in
|
||||||
|
|
@ -25,6 +25,7 @@ from services.feature_service import FeatureService
|
||||||
|
|
||||||
P = ParamSpec("P")
|
P = ParamSpec("P")
|
||||||
R = TypeVar("R")
|
R = TypeVar("R")
|
||||||
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
class WhereisUserArg(StrEnum):
|
class WhereisUserArg(StrEnum):
|
||||||
|
|
@ -42,10 +43,10 @@ class FetchUserArg(BaseModel):
|
||||||
required: bool = False
|
required: bool = False
|
||||||
|
|
||||||
|
|
||||||
def validate_app_token(view: Optional[Callable] = None, *, fetch_user_arg: Optional[FetchUserArg] = None):
|
def validate_app_token(view: Optional[Callable[P, R]] = None, *, fetch_user_arg: Optional[FetchUserArg] = None):
|
||||||
def decorator(view_func):
|
def decorator(view_func: Callable[P, R]):
|
||||||
@wraps(view_func)
|
@wraps(view_func)
|
||||||
def decorated_view(*args, **kwargs):
|
def decorated_view(*args: P.args, **kwargs: P.kwargs):
|
||||||
api_token = validate_and_get_api_token("app")
|
api_token = validate_and_get_api_token("app")
|
||||||
|
|
||||||
app_model = db.session.query(App).where(App.id == api_token.app_id).first()
|
app_model = db.session.query(App).where(App.id == api_token.app_id).first()
|
||||||
|
|
@ -189,10 +190,10 @@ def cloud_edition_billing_rate_limit_check(resource: str, api_token_type: str):
|
||||||
return interceptor
|
return interceptor
|
||||||
|
|
||||||
|
|
||||||
def validate_dataset_token(view=None):
|
def validate_dataset_token(view: Optional[Callable[Concatenate[T, P], R]] = None):
|
||||||
def decorator(view):
|
def decorator(view: Callable[Concatenate[T, P], R]):
|
||||||
@wraps(view)
|
@wraps(view)
|
||||||
def decorated(*args, **kwargs):
|
def decorated(*args: P.args, **kwargs: P.kwargs):
|
||||||
api_token = validate_and_get_api_token("dataset")
|
api_token = validate_and_get_api_token("dataset")
|
||||||
tenant_account_join = (
|
tenant_account_join = (
|
||||||
db.session.query(Tenant, TenantAccountJoin)
|
db.session.query(Tenant, TenantAccountJoin)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
|
from collections.abc import Callable
|
||||||
from datetime import UTC, datetime
|
from datetime import UTC, datetime
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import ParamSpec, TypeVar
|
from typing import Concatenate, Optional, ParamSpec, TypeVar
|
||||||
|
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask_restx import Resource
|
from flask_restx import Resource
|
||||||
|
|
@ -20,12 +21,11 @@ P = ParamSpec("P")
|
||||||
R = TypeVar("R")
|
R = TypeVar("R")
|
||||||
|
|
||||||
|
|
||||||
def validate_jwt_token(view=None):
|
def validate_jwt_token(view: Optional[Callable[Concatenate[App, EndUser, P], R]] = None):
|
||||||
def decorator(view):
|
def decorator(view: Callable[Concatenate[App, EndUser, P], R]):
|
||||||
@wraps(view)
|
@wraps(view)
|
||||||
def decorated(*args, **kwargs):
|
def decorated(*args: P.args, **kwargs: P.kwargs):
|
||||||
app_model, end_user = decode_jwt_token()
|
app_model, end_user = decode_jwt_token()
|
||||||
|
|
||||||
return view(app_model, end_user, *args, **kwargs)
|
return view(app_model, end_user, *args, **kwargs)
|
||||||
|
|
||||||
return decorated
|
return decorated
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
|
from collections.abc import Callable
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Any, Optional
|
from typing import Any, Concatenate, Optional, ParamSpec, TypeVar
|
||||||
|
|
||||||
from mo_vector.client import MoVectorClient # type: ignore
|
from mo_vector.client import MoVectorClient # type: ignore
|
||||||
from pydantic import BaseModel, model_validator
|
from pydantic import BaseModel, model_validator
|
||||||
|
|
@ -17,7 +18,6 @@ from extensions.ext_redis import redis_client
|
||||||
from models.dataset import Dataset
|
from models.dataset import Dataset
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
from typing import ParamSpec, TypeVar
|
|
||||||
|
|
||||||
P = ParamSpec("P")
|
P = ParamSpec("P")
|
||||||
R = TypeVar("R")
|
R = TypeVar("R")
|
||||||
|
|
@ -47,16 +47,6 @@ class MatrixoneConfig(BaseModel):
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
|
||||||
def ensure_client(func):
|
|
||||||
@wraps(func)
|
|
||||||
def wrapper(self, *args, **kwargs):
|
|
||||||
if self.client is None:
|
|
||||||
self.client = self._get_client(None, False)
|
|
||||||
return func(self, *args, **kwargs)
|
|
||||||
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class MatrixoneVector(BaseVector):
|
class MatrixoneVector(BaseVector):
|
||||||
"""
|
"""
|
||||||
Matrixone vector storage implementation.
|
Matrixone vector storage implementation.
|
||||||
|
|
@ -216,6 +206,19 @@ class MatrixoneVector(BaseVector):
|
||||||
self.client.delete()
|
self.client.delete()
|
||||||
|
|
||||||
|
|
||||||
|
T = TypeVar("T", bound=MatrixoneVector)
|
||||||
|
|
||||||
|
|
||||||
|
def ensure_client(func: Callable[Concatenate[T, P], R]):
|
||||||
|
@wraps(func)
|
||||||
|
def wrapper(self: T, *args: P.args, **kwargs: P.kwargs):
|
||||||
|
if self.client is None:
|
||||||
|
self.client = self._get_client(None, False)
|
||||||
|
return func(self, *args, **kwargs)
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
class MatrixoneVectorFactory(AbstractVectorFactory):
|
class MatrixoneVectorFactory(AbstractVectorFactory):
|
||||||
def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> MatrixoneVector:
|
def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> MatrixoneVector:
|
||||||
if dataset.index_struct_dict:
|
if dataset.index_struct_dict:
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,12 @@ from pydantic import BaseModel
|
||||||
from services.enterprise.base import EnterprisePluginManagerRequest
|
from services.enterprise.base import EnterprisePluginManagerRequest
|
||||||
from services.errors.base import BaseServiceError
|
from services.errors.base import BaseServiceError
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class PluginCredentialType(enum.Enum):
|
|
||||||
MODEL = 0
|
class PluginCredentialType(enum.IntEnum):
|
||||||
TOOL = 1
|
MODEL = enum.auto()
|
||||||
|
TOOL = enum.auto()
|
||||||
|
|
||||||
def to_number(self):
|
def to_number(self):
|
||||||
return self.value
|
return self.value
|
||||||
|
|
@ -47,6 +49,9 @@ class PluginManagerService:
|
||||||
if not ret.get("result", False):
|
if not ret.get("result", False):
|
||||||
raise CredentialPolicyViolationError("Credentials not available: Please use ENTERPRISE global credentials")
|
raise CredentialPolicyViolationError("Credentials not available: Please use ENTERPRISE global credentials")
|
||||||
|
|
||||||
logging.debug(
|
logger.debug(
|
||||||
f"Credential policy compliance checked for {body.provider} with credential {body.dify_credential_id}, result: {ret.get('result', False)}"
|
"Credential policy compliance checked for %s with credential %s, result: %s",
|
||||||
|
body.provider,
|
||||||
|
body.dify_credential_id,
|
||||||
|
ret.get("result", False),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue