system_controller.py 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # coding=utf-8
  2. from pyramid.config import Configurator
  3. from tracim_backend.exceptions import NotAuthenticated
  4. from tracim_backend.exceptions import InsufficientUserProfile
  5. from tracim_backend.lib.utils.authorization import require_profile
  6. from tracim_backend.models import Group
  7. from tracim_backend.models.applications import applications
  8. from tracim_backend.models.contents import ContentTypeLegacy as ContentType
  9. try: # Python 3.5+
  10. from http import HTTPStatus
  11. except ImportError:
  12. from http import client as HTTPStatus
  13. from tracim_backend import TracimRequest
  14. from tracim_backend.extensions import hapic
  15. from tracim_backend.views.controllers import Controller
  16. from tracim_backend.views.core_api.schemas import ApplicationSchema
  17. from tracim_backend.views.core_api.schemas import ContentTypeSchema
  18. SWAGGER_TAG_SYSTEM_ENDPOINTS = 'System'
  19. class SystemController(Controller):
  20. @hapic.with_api_doc(tags=[SWAGGER_TAG_SYSTEM_ENDPOINTS])
  21. @require_profile(Group.TIM_USER)
  22. @hapic.output_body(ApplicationSchema(many=True),)
  23. def applications(self, context, request: TracimRequest, hapic_data=None):
  24. """
  25. Get list of alls applications installed in this tracim instance.
  26. """
  27. return applications
  28. @hapic.with_api_doc(tags=[SWAGGER_TAG_SYSTEM_ENDPOINTS])
  29. @require_profile(Group.TIM_USER)
  30. @hapic.output_body(ContentTypeSchema(many=True),)
  31. def content_types(self, context, request: TracimRequest, hapic_data=None):
  32. """
  33. Get list of alls content types availables in this tracim instance.
  34. """
  35. content_types_slugs = ContentType.allowed_types_for_folding()
  36. content_types = [ContentType(slug) for slug in content_types_slugs]
  37. return content_types
  38. def bind(self, configurator: Configurator) -> None:
  39. """
  40. Create all routes and views using pyramid configurator
  41. for this controller
  42. """
  43. # Applications
  44. configurator.add_route('applications', '/system/applications', request_method='GET') # nopep8
  45. configurator.add_view(self.applications, route_name='applications')
  46. # Content_types
  47. configurator.add_route('content_types', '/system/content_types', request_method='GET') # nopep8
  48. configurator.add_view(self.content_types, route_name='content_types')