| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | from functools import wrapsfrom flask_login import current_userfrom flask_restful import Resourcefrom werkzeug.exceptions import NotFoundfrom controllers.console.wraps import account_initialization_requiredfrom extensions.ext_database import dbfrom libs.login import login_requiredfrom models.model import InstalledAppdef installed_app_required(view=None):    def decorator(view):        @wraps(view)        def decorated(*args, **kwargs):            if not kwargs.get('installed_app_id'):                raise ValueError('missing installed_app_id in path parameters')            installed_app_id = kwargs.get('installed_app_id')            installed_app_id = str(installed_app_id)            del kwargs['installed_app_id']            installed_app = db.session.query(InstalledApp).filter(                InstalledApp.id == str(installed_app_id),                InstalledApp.tenant_id == current_user.current_tenant_id            ).first()            if installed_app is None:                raise NotFound('Installed app not found')            if not installed_app.app:                db.session.delete(installed_app)                db.session.commit()                raise NotFound('Installed app not found')            return view(installed_app, *args, **kwargs)        return decorated    if view:        return decorator(view)    return decoratorclass InstalledAppResource(Resource):    # must be reversed if there are multiple decorators    method_decorators = [installed_app_required, account_initialization_required, login_required]
 |