durusmail: quixote-users: MyStaticFile + header/footer breaks in 0.7a2
MyStaticFile + header/footer breaks in 0.7a2
MyStaticFile + header/footer breaks in 0.7a2
Neil Schemenauer
2003-11-25
On Tue, Nov 25, 2003 at 05:51:03PM -0500, daniel.chudnov@yale.edu wrote:
> I know Quixote isn't geared toward separation-of-skills
> development, but it was a convenient way to allow a non-coder to
> write up an arbitrary number of docs in simple html and quickly
> load/update them on the site.

Well, Quixote is meant to be flexible so you're forgiven. :-)

> The tweak breaks in 0.7a2 (scgi-1, apache-2.0.40), apparently
> because StaticFile now returns a FileStream, and I'm not sure how
> to fix my code.

You should be able to use:

    ''.join(some_stream)

to convert a stream to a string.  I'm not sure but maybe Stream
should have a __str__ method that does that.  OTOH, calling str()
does not work well if htmltext is involved.

> class MyStaticFile (StaticFile):
>     def __call__(self, request):
>       contents = htmltext('')
>       if self.mime_type == 'text/html':
>           file_name = request.get_path()[1:]     # drop leading '/'
>           contents += header(get_title_from_path(file_name))
>           contents += htmltext(StaticFile.__call__(self, request))
>           contents += footer()
>       return contents

More efficient would be to use TemplateIO.  Something like:

        r = TemplateIO(html=1)
        file_name = request.get_path()[1:]     # drop leading '/'
        r += header(get_title_from_path(file_name))
        body = StaticFile.__call__(self, request)
        if isinstance(body, Stream):
            for hunk in body:
                r += hunk
        else:
            r += body
        r += footer()
        return r.getvalue()

Untested code of course.

> With 0.7a2 any mozilla-1.5 calls to the html files hang, unless I
> shift-reload, which results in a header-and-footer-only page, i.e. with
> none of the appropriate page's html inserted between the header and
> footer.

That could be a caching issue.  You might want to temporarily hack
StaticFile to not use any caching while you are debugging.

  Neil

reply