Spaces:
Running
Running
from flask import current_app | |
from flask_restful import fields, marshal_with | |
from werkzeug.exceptions import Forbidden | |
from controllers.web import api | |
from controllers.web.wraps import WebApiResource | |
from extensions.ext_database import db | |
from models.account import TenantStatus | |
from models.model import Site | |
from services.feature_service import FeatureService | |
class 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, | |
'custom_disclaimer': 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, | |
'can_replace_logo': fields.Boolean, | |
'custom_config': fields.Raw(attribute='custom_config'), | |
} | |
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() | |
if app_model.tenant.status == TenantStatus.ARCHIVE: | |
raise Forbidden() | |
can_replace_logo = FeatureService.get_features(app_model.tenant_id).can_replace_logo | |
return AppSiteInfo(app_model.tenant, app_model, site, end_user.id, can_replace_logo) | |
api.add_resource(AppSiteApi, '/site') | |
class AppSiteInfo: | |
"""Class to store site information.""" | |
def __init__(self, tenant, app, site, end_user, can_replace_logo): | |
"""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 | |
self.can_replace_logo = can_replace_logo | |
if can_replace_logo: | |
base_url = current_app.config.get('FILES_URL') | |
remove_webapp_brand = tenant.custom_config_dict.get('remove_webapp_brand', False) | |
replace_webapp_logo = f'{base_url}/files/workspaces/{tenant.id}/webapp-logo' if tenant.custom_config_dict.get('replace_webapp_logo') else None | |
self.custom_config = { | |
'remove_webapp_brand': remove_webapp_brand, | |
'replace_webapp_logo': replace_webapp_logo, | |
} | |