site.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # -*- coding:utf-8 -*-
  2. from flask_restful import fields, marshal_with
  3. from werkzeug.exceptions import Forbidden
  4. from controllers.web import api
  5. from controllers.web.wraps import WebApiResource
  6. from extensions.ext_database import db
  7. from models.model import Site
  8. class AppSiteApi(WebApiResource):
  9. """Resource for app sites."""
  10. model_config_fields = {
  11. 'opening_statement': fields.String,
  12. 'suggested_questions': fields.Raw(attribute='suggested_questions_list'),
  13. 'suggested_questions_after_answer': fields.Raw(attribute='suggested_questions_after_answer_dict'),
  14. 'more_like_this': fields.Raw(attribute='more_like_this_dict'),
  15. 'model': fields.Raw(attribute='model_dict'),
  16. 'user_input_form': fields.Raw(attribute='user_input_form_list'),
  17. 'pre_prompt': fields.String,
  18. }
  19. site_fields = {
  20. 'title': fields.String,
  21. 'icon': fields.String,
  22. 'icon_background': fields.String,
  23. 'description': fields.String,
  24. 'copyright': fields.String,
  25. 'privacy_policy': fields.String,
  26. 'default_language': fields.String,
  27. 'prompt_public': fields.Boolean
  28. }
  29. app_fields = {
  30. 'app_id': fields.String,
  31. 'end_user_id': fields.String,
  32. 'enable_site': fields.Boolean,
  33. 'site': fields.Nested(site_fields),
  34. 'model_config': fields.Nested(model_config_fields, allow_null=True),
  35. 'plan': fields.String,
  36. }
  37. @marshal_with(app_fields)
  38. def get(self, app_model, end_user):
  39. """Retrieve app site info."""
  40. # get site
  41. site = db.session.query(Site).filter(Site.app_id == app_model.id).first()
  42. if not site:
  43. raise Forbidden()
  44. return AppSiteInfo(app_model.tenant, app_model, site, end_user.id)
  45. api.add_resource(AppSiteApi, '/site')
  46. class AppSiteInfo:
  47. """Class to store site information."""
  48. def __init__(self, tenant, app, site, end_user):
  49. """Initialize AppSiteInfo instance."""
  50. self.app_id = app.id
  51. self.end_user_id = end_user
  52. self.enable_site = app.enable_site
  53. self.site = site
  54. self.model_config = None
  55. self.plan = tenant.plan
  56. if app.enable_site and site.prompt_public:
  57. app_model_config = app.app_model_config
  58. self.model_config = app_model_config