Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
site.py101 linesDownload Raw Back to web
1from flask_restful import fields, marshal_with2from werkzeug.exceptions import Forbidden3 4from configs import dify_config5from controllers.web import api6from controllers.web.wraps import WebApiResource7from extensions.ext_database import db8from libs.helper import AppIconUrlField9from models.account import TenantStatus10from models.model import Site11from services.feature_service import FeatureService12 13 14class AppSiteApi(WebApiResource):15    """Resource for app sites."""16 17    model_config_fields = {18        "opening_statement": fields.String,19        "suggested_questions": fields.Raw(attribute="suggested_questions_list"),20        "suggested_questions_after_answer": fields.Raw(attribute="suggested_questions_after_answer_dict"),21        "more_like_this": fields.Raw(attribute="more_like_this_dict"),22        "model": fields.Raw(attribute="model_dict"),23        "user_input_form": fields.Raw(attribute="user_input_form_list"),24        "pre_prompt": fields.String,25    }26 27    site_fields = {28        "title": fields.String,29        "chat_color_theme": fields.String,30        "chat_color_theme_inverted": fields.Boolean,31        "icon_type": fields.String,32        "icon": fields.String,33        "icon_background": fields.String,34        "icon_url": AppIconUrlField,35        "description": fields.String,36        "copyright": fields.String,37        "privacy_policy": fields.String,38        "custom_disclaimer": fields.String,39        "default_language": fields.String,40        "prompt_public": fields.Boolean,41        "show_workflow_steps": fields.Boolean,42        "use_icon_as_answer_icon": fields.Boolean,43    }44 45    app_fields = {46        "app_id": fields.String,47        "end_user_id": fields.String,48        "enable_site": fields.Boolean,49        "site": fields.Nested(site_fields),50        "model_config": fields.Nested(model_config_fields, allow_null=True),51        "plan": fields.String,52        "can_replace_logo": fields.Boolean,53        "custom_config": fields.Raw(attribute="custom_config"),54    }55 56    @marshal_with(app_fields)57    def get(self, app_model, end_user):58        """Retrieve app site info."""59        # get site60        site = db.session.query(Site).filter(Site.app_id == app_model.id).first()61 62        if not site:63            raise Forbidden()64 65        if app_model.tenant.status == TenantStatus.ARCHIVE:66            raise Forbidden()67 68        can_replace_logo = FeatureService.get_features(app_model.tenant_id).can_replace_logo69 70        return AppSiteInfo(app_model.tenant, app_model, site, end_user.id, can_replace_logo)71 72 73api.add_resource(AppSiteApi, "/site")74 75 76class AppSiteInfo:77    """Class to store site information."""78 79    def __init__(self, tenant, app, site, end_user, can_replace_logo):80        """Initialize AppSiteInfo instance."""81        self.app_id = app.id82        self.end_user_id = end_user83        self.enable_site = app.enable_site84        self.site = site85        self.model_config = None86        self.plan = tenant.plan87        self.can_replace_logo = can_replace_logo88 89        if can_replace_logo:90            base_url = dify_config.FILES_URL91            remove_webapp_brand = tenant.custom_config_dict.get("remove_webapp_brand", False)92            replace_webapp_logo = (93                f"{base_url}/files/workspaces/{tenant.id}/webapp-logo"94                if tenant.custom_config_dict.get("replace_webapp_logo")95                else None96            )97            self.custom_config = {98                "remove_webapp_brand": remove_webapp_brand,99                "replace_webapp_logo": replace_webapp_logo,100            }101