# Examples of serving static files

The `quixote.util` module includes classes for making files and directories available as Quixote resources. Here are some examples.

# Publishing a Single File

The `StaticFile` class makes an individual filesystem file (possibly a symbolic link) available. You can also specify the MIME type and encoding of the file; if you don't specify this, the MIME type will be guessed using the standard Python `mimetypes.guess_type()` function. The default action is to not follow symbolic links, but this behaviour can be changed using the `follow_symlinks` parameter.

The following example publishes a file with the URL `.../stylesheet_css`:

    # 'stylesheet_css' must be in the _q_exports list
    _q_exports = [ ..., 'stylesheet_css', ...]

    stylesheet_css = StaticFile(
            "/htdocs/legacy_app/stylesheet.css",
            follow_symlinks=1, mime_type="text/css")

If you want the URL of the file to have a `.css` extension, you use the external to internal name mapping feature of `_q_exports`. For example:

    _q_exports = [ ..., ('stylesheet.css', 'stylesheet_css'), ...]

# Publishing a Directory

Publishing a directory is similar. The `StaticDirectory` class makes a complete filesystem directory available. Again, the default behaviour is to not follow symlinks. You can also request that the `StaticDirectory` object cache information about the files in memory so that it doesn't try to guess the MIME type on every hit.

This example publishes the `notes/` directory:

    _q_exports = [ ..., 'notes', ...]

    notes = StaticDirectory("/htdocs/legacy_app/notes")