Repoze

Repoze vereinigt verschiedene Technologien um WSGI und Zope zu verbinden.

WSGI

Python-Standard (PEP 333), der die Kommunikation zwischen Web-Servern und Web-Anwendungen spezifiziert.

Server

akzeptieren Anfragen eines Browser/Client und reichen die Daten an die Anwendungen weiter.

Sie antworten auf Anfragen, wobei sie die von Anwendungen zurückgelieferten Daten verwenden.

Anwendungen
geben Antworten zurück.
Middleware
Anwendung, die die nächste Anwendung aufruft, wobei die funktionale Anordnung eine sog. Pipeline bildet.
Repoze

ermöglicht Zope in einer WSGI-Umgebung zu nutzen oder umgekehrt anderen WSGI-Anwendungen Zope-Technologien als Middleware bereitzustellen.

Dabei besteht Repoze einerseits aus einer Reimplementierung von Zope-Funktionalitäten als Python-Bibliotheken und WSGI-Middleware, andererseits aus bestehender WSGI-Middleware (Paste).

Beispiel
[buildout]
extends = http://dist.plone.org/release/4.1-latest/versions.cfg
parts =
   instance
   paster
   wsgiconfig

[instance]
recipe = plone.recipe.zope2instance
eggs =
    Plone
    PIL
user = admin:admin

[paster]
recipe = zc.recipe.egg
eggs =
    ${instance:eggs}
    Paste
    PasteScript
    repoze.tm2
    repoze.retry
script = paster

[wsgiconfig]
recipe = collective.recipe.template
input = inline:
    [app:zope]
    use = egg:Zope2#main
    zope_conf = ${buildout:directory}/parts/instance/etc/zope.conf

    [pipeline:main]
    pipeline =
        egg:paste#evalerror
        egg:repoze.retry#retry
        egg:repoze.tm2#tm
        zope

    [server:main]
    use = egg:paste#http
    host = localhost
    port = 8000
output = ${buildout:directory}/zope2.ini

Die Buildout-Konfiguration nutzt umfangreich Ian Bicking’s Paste, speziell PasteDeploy, das eine deklarative Syntax zum Konfigurieren von WSGI-Pipelines bereitstellt.

Zope2 kann nun einfach gestartet werden mit:

$ ./bin/paster serve zope2.ini

Anmerkung 1: infrae.wsgi scheint eine sauberere und besser dokumentierte Lösung zu sein im Vergleich zu repoze.zope2 und dem neuen Zope2 WSGI publisher. Um ìnfrae.wsgi zu verwenden, tragen Sie einfach im [wsgiconfig]-Abschnitt stattdessen folgendes ein:

use = egg:infrae.wsgi#zope2

Anmerkung 2: Soll ein anderer Web-Server wie z.B. gunicorn verwendet werden, so kann einfach im Abschnitt [server:main] stattdessen folgendes eingetragen werden:

use = egg:gunicorn#main