| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | # -*- coding:utf-8 -*-from flask_restful import fields, marshal_withfrom werkzeug.exceptions import Forbiddenfrom controllers.web import apifrom controllers.web.wraps import WebApiResourcefrom extensions.ext_database import dbfrom models.model import Siteclass AppSiteApi(WebApiResource):    """Resource for app sites."""    model_config_fields = {        'opening_statement': fields.String,        'suggested_questions': fields.Raw(attribute='suggested_questions_list'),        'suggested_questions_after_answer': fields.Raw(attribute='suggested_questions_after_answer_dict'),        'more_like_this': fields.Raw(attribute='more_like_this_dict'),        'model': fields.Raw(attribute='model_dict'),        'user_input_form': fields.Raw(attribute='user_input_form_list'),        'pre_prompt': fields.String,    }    site_fields = {        'title': fields.String,        'icon': fields.String,        'icon_background': fields.String,        'description': fields.String,        'copyright': fields.String,        'privacy_policy': fields.String,        'default_language': fields.String,        'prompt_public': fields.Boolean    }    app_fields = {        'app_id': fields.String,        'end_user_id': fields.String,        'enable_site': fields.Boolean,        'site': fields.Nested(site_fields),        'model_config': fields.Nested(model_config_fields, allow_null=True),        'plan': fields.String,    }    @marshal_with(app_fields)    def get(self, app_model, end_user):        """Retrieve app site info."""        # get site        site = db.session.query(Site).filter(Site.app_id == app_model.id).first()        if not site:            raise Forbidden()        return AppSiteInfo(app_model.tenant, app_model, site, end_user.id)api.add_resource(AppSiteApi, '/site')class AppSiteInfo:    """Class to store site information."""    def __init__(self, tenant, app, site, end_user):        """Initialize AppSiteInfo instance."""        self.app_id = app.id        self.end_user_id = end_user        self.enable_site = app.enable_site        self.site = site        self.model_config = None        self.plan = tenant.plan        if app.enable_site and site.prompt_public:            app_model_config = app.app_model_config            self.model_config = app_model_config
 |