# -*- coding: utf-8 -*-
##############################################################################
# 2011 E2OpenPlugins #
# #
# This file is open source software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License version 2 as #
# published by the Free Software Foundation. #
# #
##############################################################################
from twisted.web import static
from twisted.web.resource import EncodingResourceWrapper
from twisted.web.server import GzipEncoderFactory
from defaults import PUBLIC_PATH, PICON_PATH, FAVICON_PATH
from models.grab import grabScreenshot
from base import BaseController
from web import WebController
from transcoding import TranscodingController
import fs_access
import rest_api_controller
import rest_recordings_controller
import rest_timer_controller
import rest_current_event_controller
import rest_services_controller
from recording import RECORDINGS_ROOT_PATH
from recording import RECORDINGS_ENDPOINT_PATH, RECORDING_ENDPOINT_PATH
TOW_FRONTEND = False
try:
from ajax import AjaxController
from ajax import p_index_for_ajax
TOW_FRONTEND = True
except ImportError:
pass
[docs]class RootController(BaseController):
"""
Web root controller.
"""
def __init__(self, session, path=""):
BaseController.__init__(self, path=path, session=session)
self.putChild("web", WebController(session))
api_controller_instance = EncodingResourceWrapper(
rest_api_controller.ApiController(session, resource_prefix='/api'),
[GzipEncoderFactory()])
self.putChild("api", api_controller_instance)
recordings_controller_instance = EncodingResourceWrapper(
rest_recordings_controller.RESTRecordingsController(),
[GzipEncoderFactory()])
self.putChild(RECORDINGS_ENDPOINT_PATH,
recordings_controller_instance)
self.putChild(RECORDING_ENDPOINT_PATH,
static.File(RECORDINGS_ROOT_PATH))
timer_controller_instance = EncodingResourceWrapper(
rest_timer_controller.RESTTimerController(session=session),
[GzipEncoderFactory()])
self.putChild("timers", timer_controller_instance)
services_controller_instance = EncodingResourceWrapper(
rest_services_controller.RESTServicesController(),
[GzipEncoderFactory()])
self.putChild("services", services_controller_instance)
event_controller_instance = EncodingResourceWrapper(
rest_current_event_controller.RESTCurrentEventController(
session=session), [GzipEncoderFactory()])
self.putChild("current_event", event_controller_instance)
self.putChild("file", fs_access.RestrictedFilesystemAccessController())
self.putChild("grab", grabScreenshot(session))
if TOW_FRONTEND:
self.putChild("ajax", AjaxController(session))
self.putChild('favicon.ico', static.File(FAVICON_PATH))
self.putChild('favicon.png', static.File(FAVICON_PATH))
for shortcut in ('js', 'css', 'static', 'images', 'fonts'):
self.putChild(shortcut,
static.File('/'.join((PUBLIC_PATH, shortcut))))
self.putChild("transcoding", TranscodingController())
if PICON_PATH:
self.putChild("picon", static.File(PICON_PATH))
[docs] def P_index(self, request):
"""
The "pages functions" must be called `P_<pagename>`.
Example:
Contents for endpoint `/index` will be generated using a method
named `P_index`.
Args:
request (twisted.web.server.Request): HTTP request object
Returns:
dict: Parameter values
"""
if TOW_FRONTEND:
return p_index_for_ajax(request)
return {}