frontend.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import os
  2. from pyramid.renderers import render_to_response
  3. from pyramid.config import Configurator
  4. from tracim_backend.exceptions import PageNotFound
  5. from tracim_backend.views import BASE_API_V2
  6. from tracim_backend.lib.utils.request import TracimRequest
  7. from tracim_backend.views.controllers import Controller
  8. import spectra
  9. INDEX_PAGE_NAME = 'index.mak'
  10. class FrontendController(Controller):
  11. def __init__(self, dist_folder_path: str):
  12. self.dist_folder_path = dist_folder_path
  13. def _get_index_file_path(self):
  14. index_file_path = os.path.join(self.dist_folder_path, INDEX_PAGE_NAME)
  15. if not os.path.exists(index_file_path):
  16. raise FileNotFoundError()
  17. return index_file_path
  18. def not_found_view(self, context, request: TracimRequest):
  19. if request.path.startswith(BASE_API_V2):
  20. raise PageNotFound('{} is not a valid path'.format(request.path)) from context # nopep8
  21. return self.index(context, request)
  22. def index(self, context, request: TracimRequest):
  23. return render_to_response(
  24. self._get_index_file_path(),
  25. {'primary': spectra.html('#7d4e24')}
  26. )
  27. def bind(self, configurator: Configurator) -> None:
  28. configurator.add_notfound_view(self.not_found_view)
  29. # index.html for /index.html and /
  30. configurator.add_route('root', '/', request_method='GET')
  31. configurator.add_view(self.index, route_name='root')
  32. configurator.add_route('index', INDEX_PAGE_NAME, request_method='GET')
  33. configurator.add_view(self.index, route_name='index')
  34. for dirname in os.listdir(self.dist_folder_path):
  35. configurator.add_static_view(
  36. name=dirname,
  37. path=os.path.join(self.dist_folder_path, dirname)
  38. )