Exemple #1
0
 def __init__(self, server=None, path="/", 
              title=None, templates_dir=None, **kwargs):
     """
     :param server: the component that handles the basic connection
                    and protocol management. If not provided, the
                    Portal creates its own  
                    :class:`~circuits.web.server.BaseServer` component
                    that listens on port 4444.
     :type server: :class:`circuits.web.server.BaseServer`
     
     :param path: a path for URLs used by the portal. This allows
                  the portal to co-exist with other content on the same
                  web server. If specified, only requests starting with the
                  given path are handled by the portal dispatcher and 
                  the path is prepended to all generated URLs.
                  The value must start with a slash and must not 
                  end with a slash.
     :type path: string
     
     :param title: The title of the portal (displayed in the
                   browser's title bar)
     :type title: string
     
     :param templates_dir: a directory with templates that override
                           the portal's standard templates. Any template
                           and localization resource is first searched
                           for in this directory, then in the portal's
                           built-in default directory.
     :type templates_dir: string
     """
     super(Portal, self).__init__(**kwargs)
     self._path = path or ""
     self._title = title
     self._portlets = []
     if server is None:
         server = BaseServer(("", 4444), channel=self.channel)
     else:
         self.channel = server.channel
     self.server = server
     if templates_dir:
         self._templates_dir = [os.path.abspath(templates_dir)]
     else:
         self._templates_dir = []
     self._templates_dir \
         += [os.path.join(dirname(dirname(__file__)), "templates")]
     LanguagePreferences(channel = server.channel).register(server)
     ThemeSelection(channel = server.channel).register(server)
     view = PortalView(self, channel = server.channel).register(server)
     self._url_generator_factory = view.url_generator_factory
     self._supported_locales = []
     for locale in rbtranslations.available_translations\
         ("l10n", self._templates_dir, "en"):
         trans = rbtranslations.translation\
             ("l10n", self._templates_dir, [locale], "en")
         locale_name = trans.ugettext("language_" + locale)
         self._supported_locales.append((locale, locale_name))
     self._supported_locales.sort(key=lambda x: x[1])
 def __init__(self, view, req_evt, request, response):
     super(RenderThread, self).__init__()
     self.daemon = True
     self._view = view
     self._req_evt = req_evt
     self._request = request
     self._response = response
     self._locales = LanguagePreferences.preferred(request.session)
     self._translation = rbtranslations.translation\
         ("l10n", view._portal._templates_dir, 
          self._locales, "en")
     if self._translation.language:
         response.headers["Content-Language"] \
             = self._translation.language.replace("_", "-")
     self._portal = PortalSessionFacade(self._view, self._request.session)
     self._portlet_counter = 0
Exemple #3
0
 def __init__(self, view, req_evt, request, response):
     super(RenderThread, self).__init__()
     self.daemon = True
     self._view = view
     self._req_evt = req_evt
     self._request = request
     self._response = response
     self._locales = LanguagePreferences.preferred(request.session)
     self._translation = rbtranslations.translation\
         ("l10n", view._portal._templates_dir, 
          self._locales, "en")
     if self._translation.language:
         response.headers["Content-Language"] \
             = self._translation.language.replace("_", "-")
     self._portal = PortalSessionFacade(self._view, self._request.session)
     self._portlet_counter = 0
    def _on_request_1(self, event, request, response, peer_cert=None):
        """
        First request handler. This handler handles resource requests
        directed at the portal or a portlet.
        """
        if not self._is_portal_request(request):
            return

        if peer_cert:
            event.peer_cert = peer_cert
            
        # Decode query parameters and body
        event.kwargs = parse_qs(request.qs)
        parse_body(request, response, event.kwargs)
        session = request.session
        # Is this a portal portal request?
        if request.path.startswith(self._portal_resource):
            res = os.path.join(os.path.join\
                (self._portal_resource_dir, 
                 request.path[len(self._portal_resource):]))
            if os.path.exists(res):
                event.stop()
                return tools.serve_file(request, response, res)
            return
        # Is this a portal theme resource request?
        if request.path.startswith(self._theme_resource):
            for directory in self._portal._templates_dir:
                res = os.path.join \
                    (directory, "themes", 
                     ThemeSelection.selected(session), 
                     request.path[len(self._theme_resource):])
                if os.path.exists(res):
                    event.stop()
                    return tools.serve_file(request, response, res)
            return
        # Is this a portlet resource request?
        if request.path.startswith(self._portlet_resource):
            segs = request.path[len(self._portlet_resource):].split("/")
            if len(segs) >= 2:
                request.path = "/".join(segs[1:])
                event.kwargs.update\
                    ({ "theme": ThemeSelection.selected(session),
                       "locales": LanguagePreferences.preferred(session)})
                return self.fire (portlet_resource(*event.args, 
                                                   **event.kwargs), segs[0])
Exemple #5
0
    def _on_request_1(self, event, request, response, peer_cert=None):
        """
        First request handler. This handler handles resource requests
        directed at the portal or a portlet.
        """
        if not self._is_portal_request(request):
            return

        if peer_cert:
            event.peer_cert = peer_cert
            
        # Decode query parameters and body
        event.kwargs = parse_qs(request.qs)
        parse_body(request, response, event.kwargs)
        session = request.session
        # Is this a portal portal request?
        if request.path.startswith(self._portal_resource):
            res = os.path.join(os.path.join\
                (self._portal_resource_dir, 
                 request.path[len(self._portal_resource):]))
            if os.path.exists(res):
                event.stop()
                return tools.serve_file(request, response, res)
            return
        # Is this a portal theme resource request?
        if request.path.startswith(self._theme_resource):
            for directory in self._portal._templates_dir:
                res = os.path.join \
                    (directory, "themes", 
                     ThemeSelection.selected(session), 
                     request.path[len(self._theme_resource):])
                if os.path.exists(res):
                    event.stop()
                    return tools.serve_file(request, response, res)
            return
        # Is this a portlet resource request?
        if request.path.startswith(self._portlet_resource):
            segs = request.path[len(self._portlet_resource):].split("/")
            if len(segs) >= 2:
                request.path = "/".join(segs[1:])
                event.kwargs.update\
                    ({ "theme": ThemeSelection.selected(session),
                       "locales": LanguagePreferences.preferred(session)})
                return self.fire (portlet_resource(*event.args, 
                                                   **event.kwargs), segs[0])