Package: zope.paste
zope.paste allows you to deploy the Zope 3 application server on any
WSGI-capable webserver usingPasteDeploy.zope.paste allows you to run Zope 3 on any WSGI-capable webserver
software usingPasteDeploy.  For this you will no longer need a Zope
3 instance (though you can still have one), you won’t configure Zope 3
throughzope.confand won’t start it usingrunzopeorzopectl.Configuring the applicationzope.paste provides aPasteDeploy-compatible factory for Zope 3’s
WSGI publisher application and registers it in an entry point.  We can
therefore create a very simple Zope 3 application in aPasteDeployconfiguration file (e.g.paste.ini):[app:main]
use = egg:zope.paste
site_definition = /path/to/site.zcml
file_storage = /path/to/Data.fs
devmode = onIn this case,/path/to/site.zcmlrefers to asite.zcmlas
known from a Zope 3 instance.  You can, for example, putpaste.iniinto an existing Zope 3 instance, next tosite.zcml.Configuring the ZODB databaseInstead of referring to a ZODB FileStorage using thefile_storagesetting, you can also configure multiple or other ZODB database
backends in a ZConfig-style configuration file (much likezope.conf), e.g. the following configures a ZEO client:<zodb>
  <zeoclient>
    server localhost:8100
    storage 1
    cache-size 20MB
  </zeoclient>
</zodb>Refer to this file frompaste.inithis way (and delete thefile_storagesetting):db_definition = db.confConfiguring the serverIn order to be able to use our Zope application, we only need to add a
server definition.  We can use the one that comes with Paste orPasteScript, rather:[server:main]
use = egg:PasteScript#wsgiutils
host = 127.0.0.1
port = 8080Now we can start the application using thepastercommand that
comes withPasteScript:$ paster serve paste.iniWSGI middlewares can be configured like described above or on thePasteDeploywebsite.Multiple WSGI applications within Zope 3If you wanted to hostmorethan one WSGI application there are a
couple ways of doing it:Using acomposite applicationas described inPasteDeploy.Setting up extraIServerTypeutilities.I’m going to show you how to do the latter now.The trick here is that you have the option to use both thezserverand thetwistedWSGI servers.zope.pasteis just glue code, so we
defined aIServerTypeutility for each, and the only thing special
is that the utility name is passed on to the WSGI application factory.Here’s an excerpt from theconfigure.zcmlas found on this package:<configure zcml:condition="have zserver">
  <utility
      name="Paste.Main"
      component="._server.http"
      provides="zope.app.server.servertype.IServerType"
      />
</configure>

<configure zcml:condition="have twisted">
  <utility
      name="Paste.Main"
      component="._twisted.http"
      provides="zope.app.twisted.interfaces.IServerType"
      />
</configure>Depending on which server is available, the rightIServerTypeutility is registered. You are encouraged to use the same pattern when
defining yours.So suppose you want to have a second WSGI application. Here’s how you
could do it.Create a newIServerTypeutility. This excerpt could be added to
aconfigure.zcmlin your own package, or to a standalone file inetc/package_includes:<configure zcml:condition="have zserver">
  <utility
      name="Paste.Another"
      component="zope.paste._server.http"
      provides="zope.app.server.servertype.IServerType"
      />
</configure>

<configure zcml:condition="have twisted">
  <utility
      name="Paste.Another"
      component="zope.paste._twisted.http"
      provides="zope.app.twisted.interfaces.IServerType"
      />
</configure>Change yourzope.conffile to define a new server, using the
newly-createdPaste.Anotherutility:<server>
  type Paste.Main
  address 8080
</server>

<server>
  type Paste.Another
  address 8180
</server>Define a WSGI applicationPaste.Anotherinpaste.ini:[pipeline:Paste.Main]
pipeline = xslt main

[app:main]
paste.app_factory = zope.paste.application:zope_publisher_app_factory

[filter:xslt]
paste.filter_factory = xslfilter:filter_factory

[app:Paste.Another]
paste.app_factory = zope.paste.application:zope_publisher_app_factoryChange History1.1.0 (2022-11-21)Add support for Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11.Drop support for Python 2.7 and 3.5.1.0.0 (2017-01-04)Changed support from Python 3.3 to 3.5.Dropped Python 2.6 support.1.0.0a1 (2013-02-27)Added support for Python 3.3.Dropped support for Python 2.4 and 2.5.Removed support for employing WSGI middlewares inside a Zope 3
application. Only the script-based server startup is now supported.Added a new console script to run a paste-configured WSGI server and
application.Conform to standard ZF project layout.Added license and copyright file. Also fixed copyright statement in file
headers.AddedMANIFEST.inandtox.ini.0.4 (2012-08-21)Add this changelog, reconstructed from svn logs and release dates on
PyPI.Support a ‘features’ config option in the PasteDeploy INI file, which
can contain a space-separated list of feature names.  These can be
tested for in ZCML files with the <directivezcml:condition=”havefeaturename”> syntax.Previously the only feature that could be enabled was ‘devmode’ and
it had its own option.  For backwards compatibility,devmode = onadds a ‘devmode’ feature to the feature list.0.3 (2007-06-02)Release as an egg with explicit dependencies for zope.app packages.Buildoutify the source tree.0.2 (2007-05-29)Extended documentation.Added a real PasteDeploy application factory. This allows you to run
Zope 3 on any WSGI capable server, without integration code.Support for devmode.Support multiple databases through a config file (specify db_definition
instead of file_storage).Accept filenames relative to the location of the PasteDeploy INI file.0.1 (2006-01-25)Initial release.