Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
wraps.py57 linesDownload Raw Back to app
1from collections.abc import Callable2from functools import wraps3from typing import Optional, Union4 5from controllers.console.app.error import AppNotFoundError6from extensions.ext_database import db7from libs.login import current_user8from models import App9from models.model import AppMode10 11 12def get_app_model(view: Optional[Callable] = None, *, mode: Union[AppMode, list[AppMode]] = None):13    def decorator(view_func):14        @wraps(view_func)15        def decorated_view(*args, **kwargs):16            if not kwargs.get("app_id"):17                raise ValueError("missing app_id in path parameters")18 19            app_id = kwargs.get("app_id")20            app_id = str(app_id)21 22            del kwargs["app_id"]23 24            app_model = (25                db.session.query(App)26                .filter(App.id == app_id, App.tenant_id == current_user.current_tenant_id, App.status == "normal")27                .first()28            )29 30            if not app_model:31                raise AppNotFoundError()32 33            app_mode = AppMode.value_of(app_model.mode)34            if app_mode == AppMode.CHANNEL:35                raise AppNotFoundError()36 37            if mode is not None:38                if isinstance(mode, list):39                    modes = mode40                else:41                    modes = [mode]42 43                if app_mode not in modes:44                    mode_values = {m.value for m in modes}45                    raise AppNotFoundError(f"App mode is not in the supported list: {mode_values}")46 47            kwargs["app_model"] = app_model48 49            return view_func(*args, **kwargs)50 51        return decorated_view52 53    if view is None:54        return decorator55    else:56        return decorator(view)57