****************
Advanced plugins
****************
These plugins are usually not neccessary for a normal website, but we found them
useful for our own projects.
:mod:`PyXWF.Nodes.MirrorSwitch` — Redirect to random mirror
===========================================================
Namespace: ``http://pyxwf.zombofant.net/xmlns/nodes/mirror-switch``, prefix: ``mirror``
* *tree node*: ````
**Attributes**: None
**Compatible child nodes**: one or more ````
* *mirror host node*: ````
**Attributes**:
:@host: *host name* — Host name of the mirror server
:@path: *url path* — Path on the mirror servers host
:@port: *port number* — (optional; defaults to *80*) Port to use for HTTP
:@ssl-port: *port number* — (optional; defaults to *443*) Port to use for HTTPS
:@no-ssl: *boolean* — (optional; defaults to *False*) Disable SSL for the host
**Allowed child nodes**: None
If path resolving hits the ```` tree node, an HTTP redirect
(``302 Found``) to a semi-random mirror is issued. The mirror is picked based
on the following algorithm:
* Take the list of all mirrors and shuffle it
* For each mirror:
* Send a ``HEAD`` request to ``scheme://host:port/path/relpath``, where
*scheme* is ``https`` if ``@no-ssl`` is False, ``http`` otherwise,
*host* is the value of ``@host``, *port* the respective port number,
*path* the ``@path`` value and *relpath* the path of the
initial request, relative to the switch node.
* If that request returns a ``200 OK``, exit with a redirect to the above
location.
* Otherwise, check next mirror
* If no mirror can serve the file, issue a ``404 Not Found`` response.
Note that this algorithm does by no means make sure that the file served by the
mirror has the expected content. This should only be used with trusted mirrors
and/or the appropriate security means.
:mod:`PyXWF.Nodes.Transform` — Generate content and trees from XSL transformations
==================================================================================
TBD