Exemple #1
0
    def __init__(self, app, name, html_page):
        super(UpdatePage, self).__init__(app, name)

        self.widget_tmpl = WidgetTemplate(self, "widget_html")

        self.html_page = html_page

        self.session = self.SessionParameter(app, "session")
        self.add_parameter(self.session)

        item = self.WidgetParameter(app, "item", self.html_page)

        self.widgets = ListParameter(app, "widget", item)
        self.add_parameter(self.widgets)
Exemple #2
0
class UpdatePage(Page):
    def __init__(self, app, name, html_page):
        super(UpdatePage, self).__init__(app, name)

        self.widget_tmpl = WidgetTemplate(self, "widget_html")

        self.html_page = html_page

        self.session = self.SessionParameter(app, "session")
        self.add_parameter(self.session)

        item = self.WidgetParameter(app, "item", self.html_page)

        self.widgets = ListParameter(app, "widget", item)
        self.add_parameter(self.widgets)

    def get_content_type(self, session):
        return self.xml_content_type

    def get_cache_control(self, session):
        return "no-cache"

    def do_process(self, session):
        # get the session for the main page
        sess = self.session.get(session)

        # Allow object frames to have None as an object
        # during the process pass.
        self.allow_object_not_found.set(sess, True)

        self.html_page.process(sess)
        # if the main page set its redirect attribute in its session
        redirect = self.html_page.redirect.get(sess)
        # pass that redirect on to the the update page
        if redirect:
            self.redirect.set(session, redirect)

    def service(self, session):
        self.process(session)

        # Skip the render if a redirect has been set
        if not self.redirect.get(session):
            res = self.render(session)
        # Check for a redirect from either process or render
        url = self.redirect.get(session)
        if url:
            # Send the url to the ajax script in the update response
            raise UpdateRedirect(url)
        return res

    def render_widgets(self, session):
        writer = Writer()
        sess = self.session.get(session)

        widgets = self.widgets.get(session)

        for widget in widgets:
            self.widget_tmpl.render(writer, sess, widget)
            # If a widget generated a redirect url,
            # there is no sense finishing the render
            redirect = self.redirect.get(sess)
            if redirect:
                self.redirect.set(session, redirect)
                break
        return writer.to_string()

    def render_widget_id(self, session, widget):
        return widget.path

    def render_widget(self, session, widget):
        return widget.render(session)

    class SessionParameter(Parameter):
        def do_marshal(self, session):
            return session.marshal()

        def do_unmarshal(self, string):
            return Session.unmarshal(self.app, string)

        def get(self, session):
            sess = super(UpdatePage.SessionParameter, self).get(session)

            sess.client_session = session.client_session
            sess.background = True

            return sess

    class WidgetParameter(Parameter):
        def __init__(self, app, name, page):
            self.page = page

        def do_marshal(self, widget):
            return widget.path

        def do_unmarshal(self, path):
            return self.page.page_widgets_by_path.get(path)