- The ZODB wiki tutorial now uses the ``pyramid_zodbconn`` package rather
than the ``repoze.zodbconn`` package to provide ZODB integration.
- The ZODB scaffold now uses the ``pyramid_zodbconn`` package rather than the
``repoze.zodbconn`` package to provide ZODB integration.
| | |
| | | ``resource_url``, ``static_url``, and ``current_route_url`` methods of the |
| | | request rather than the function variants imported from ``pyramid.url``. |
| | | |
| | | - The ZODB wiki tutorial now uses the ``pyramid_zodbconn`` package rather |
| | | than the ``repoze.zodbconn`` package to provide ZODB integration. |
| | | |
| | | Dependency Changes |
| | | ------------------ |
| | | |
| | |
| | | - All scaffolds now use the ``pyramid_tm`` package rather than the |
| | | ``repoze.tm2`` middleware to manage transaction management. |
| | | |
| | | - The ZODB scaffold now uses the ``pyramid_zodbconn`` package rather than the |
| | | ``repoze.zodbconn`` package to provide ZODB integration. |
| | | |
| | | - All scaffolds now use the ``pyramid_debugtoolbar`` package rather than the |
| | | ``WebError`` package to provide interactive debugging features. |
| | | |
| | |
| | | Should-Have |
| | | ----------- |
| | | |
| | | - Name WSGI app "main" instead of pipeline in scaffold configs? |
| | | |
| | | - Turn off debugtoolbar redirect catcher in scaffolding (makes tutorials |
| | | weird). |
| | | |
| | | - Mention debug toolbar in tutorials. |
| | | |
| | | - Make it possible to use tween aliases in explicit tween config? If not, |
| | | the tween factories of all add-ons must be APIs. |
| | | |
| | |
| | | Then, we'll add those policies to the configuration: |
| | | |
| | | .. literalinclude:: src/authorization/tutorial/__init__.py |
| | | :lines: 16-18,26-28 |
| | | :lines: 20-25 |
| | | :linenos: |
| | | :language: python |
| | | |
| | |
| | | |
| | | #. *Lines 1-3*. Perform some dependency imports. |
| | | |
| | | #. *Line 8*. Get the ZODB configuration from the ``development.ini`` |
| | | file's ``[app:main]`` section represented by the ``settings`` |
| | | dictionary passed to our ``app`` function. This will be a URI |
| | | (something like ``file:///path/to/Data.fs``). |
| | | #. *Lines 5-7* Define a root factory for our Pyramid application. |
| | | |
| | | #. *Line 12*. We create a "finder" object using the |
| | | ``PersistentApplicationFinder`` helper class, passing it the ZODB |
| | | URI and the "appmaker" we've imported from ``models.py``. |
| | | |
| | | #. *Lines 13 - 14*. We create a :term:`root factory` which uses the |
| | | finder to return a ZODB root object. |
| | | |
| | | #. *Line 15*. We construct a :term:`Configurator` with a :term:`root |
| | | #. *Line 12*. We construct a :term:`Configurator` with a :term:`root |
| | | factory` and the settings keywords parsed by PasteDeploy. The root |
| | | factory is named ``get_root``. |
| | | |
| | | #. *Line 16*. Register a 'static view' which answers requests which start |
| | | #. *Line 13*. Register a 'static view' which answers requests which start |
| | | with with URL path ``/static`` using the |
| | | :meth:`pyramid.config.Configurator.add_static_view method`. This |
| | | statement registers a view that will serve up static assets, such as CSS |
| | |
| | | should serve within the ``static`` directory inside the ``tutorial`` |
| | | package. |
| | | |
| | | #. *Line 17*. Perform a :term:`scan`. A scan will find :term:`configuration |
| | | #. *Line 14*. Perform a :term:`scan`. A scan will find :term:`configuration |
| | | decoration`, such as view configuration decorators |
| | | (e.g. ``@view_config``) in the source code of the ``tutorial`` package and |
| | | will take actions based on these decorators. The argument to |
| | | :meth:`~pyramid.config.Configurator.scan` is the package name to scan, |
| | | which is ``tutorial``. |
| | | |
| | | #. *Line 18*. Use the |
| | | #. *Line 15*. Use the |
| | | :meth:`pyramid.config.Configurator.make_wsgi_app` method |
| | | to return a :term:`WSGI` application. |
| | | |
| | |
| | | root* object. It is called on *every request* to the |
| | | :app:`Pyramid` application. It also performs bootstrapping by |
| | | *creating* an application root (inside the ZODB root object) if one |
| | | does not already exist. |
| | | does not already exist. It is used by the "root_factory" we've defined |
| | | in our ``__init__.py``. |
| | | |
| | | We do so by first seeing if the database has the persistent |
| | | application root. If not, we make an instance, store it, and |
| | |
| | | dictionary is used by the template named by the ``mytemplate.pt`` asset |
| | | specification to fill in certain values on the page. |
| | | |
| | | The WSGI Pipeline in ``development.ini`` |
| | | ---------------------------------------- |
| | | Configuration in ``development.ini`` |
| | | ------------------------------------ |
| | | |
| | | The ``development.ini`` (in the tutorial :term:`project` directory, as |
| | | opposed to the tutorial :term:`package` directory) looks like this: |
| | |
| | | .. literalinclude:: src/views/development.ini |
| | | :language: ini |
| | | |
| | | |
| | | Note the existence of a ``[pipeline:main]`` section which specifies our WSGI |
| | | pipeline. This "pipeline" will be served up as our WSGI application. As far |
| | | as the WSGI server is concerned the pipeline *is* our application. Simpler |
| | | configurations don't use a pipeline: instead they expose a single WSGI |
| | | application as "main". Our setup is more complicated, so we use a pipeline |
| | | composed of :term:`middleware`. |
| | | as the WSGI server is concerned the pipeline *is* our application. |
| | | |
| | | The ``egg:repoze.zodbconn#closer`` middleware is at the top of the pipeline. |
| | | This is a piece of middleware which closes the ZODB connection opened by the |
| | | ``PersistentApplicationFinder`` at the end of the request. |
| | | Our ZODB database settings are specified as the ``zodbconn.uri`` setting in |
| | | the application section. |
| | | |
| | | The final line in the ``[pipeline:main]`` section is ``tutorial``, which |
| | | The only line in the ``[pipeline:main]`` section is ``tutorial``, which |
| | | refers to the ``[app:tutorial]`` section above it. The ``[app:tutorial]`` |
| | | section is the section which actually defines our application settings. The |
| | | values within this section are passed as ``**settings`` to the ``main`` |
| | |
| | | :term:`traversal` a :term:`resource tree` to work against when it attempts to |
| | | resolve URLs to resources. |
| | | |
| | | We're using a mini-framework callable named ``PersistentApplicationFinder`` |
| | | in our application (see ``__init__.py``). A ``PersistentApplicationFinder`` |
| | | accepts a ZODB URL as well as an "appmaker" callback. This callback |
| | | typically lives in the ``models.py`` file. We'll just change this function, |
| | | making the necessary edits. |
| | | |
| | | Looking at the Result of Our Edits to ``models.py`` |
| | | --------------------------------------------------- |
| | | |
| | |
| | | $ bin/easy_install pyramid |
| | | |
| | | #. Use ``easy_install`` to install ``docutils``, ``pyramid_tm``, |
| | | ``repoze.zodbconn``, ``nose`` and ``coverage``: |
| | | ``pyramid_zodbconn``, ``pyramid_debugtoolbar``, ``nose`` and ``coverage``: |
| | | |
| | | .. code-block:: text |
| | | |
| | | $ bin/easy_install docutils pyramid_tm repoze.zodbconn \ |
| | | nose coverage |
| | | $ bin/easy_install docutils pyramid_tm pyramid_zodbconn \ |
| | | pyramid_debugtoolbar nose coverage |
| | | |
| | | Preparation, Windows |
| | | -------------------- |
| | |
| | | c:\pyramidtut> Scripts\easy_install pyramid |
| | | |
| | | #. Use ``easy_install`` to install ``docutils``, ``pyramid_tm``, |
| | | ``repoze.zodbconn``, ``nose`` and ``coverage``: |
| | | ``pyramid_zodbconn``, ``pyramid_debugtoolbar``, ``nose`` and ``coverage``: |
| | | |
| | | .. code-block:: text |
| | | |
| | | c:\pyramidtut> Scripts\easy_install docutils pyramid_tm \ |
| | | repoze.zodbconn nose coverage |
| | | pyramid_zodbconn pyramid_debugtoolbar nose coverage |
| | | |
| | | .. _making_a_project: |
| | | |
| | |
| | | pyramid.debug_templates = true |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_debugtoolbar |
| | | pyramid_zodbconn |
| | | pyramid_tm |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | pyramid.debug_templates = false |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_tm |
| | | pyramid_zodbconn |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | |
| | | requires = [ |
| | | 'pyramid', |
| | | 'repoze.zodbconn', |
| | | 'pyramid_zodbconn', |
| | | 'pyramid_tm', |
| | | 'pyramid_debugtoolbar', |
| | | 'ZODB3', |
| | |
| | | from repoze.zodbconn.finder import PersistentApplicationFinder |
| | | |
| | | from pyramid.config import Configurator |
| | | from pyramid_zodbconn import get_connection |
| | | |
| | | from pyramid.authentication import AuthTktAuthenticationPolicy |
| | | from pyramid.authorization import ACLAuthorizationPolicy |
| | | |
| | | from tutorial.models import appmaker |
| | | from tutorial.security import groupfinder |
| | | |
| | | def root_factory(request): |
| | | conn = get_connection(request) |
| | | return appmaker(conn.root()) |
| | | |
| | | def main(global_config, **settings): |
| | | """ This function returns a WSGI application. |
| | |
| | | authn_policy = AuthTktAuthenticationPolicy(secret='sosecret', |
| | | callback=groupfinder) |
| | | authz_policy = ACLAuthorizationPolicy() |
| | | zodb_uri = settings.get('zodb_uri', False) |
| | | if zodb_uri is False: |
| | | raise ValueError("No 'zodb_uri' in application configuration.") |
| | | |
| | | finder = PersistentApplicationFinder(zodb_uri, appmaker) |
| | | def get_root(request): |
| | | return finder(request.environ) |
| | | config = Configurator(root_factory=get_root, settings=settings, |
| | | config = Configurator(root_factory=root_factory, settings=settings, |
| | | authentication_policy=authn_policy, |
| | | authorization_policy=authz_policy) |
| | | config.add_static_view('static', 'tutorial:static') |
| | |
| | | pyramid.debug_templates = true |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_debugtoolbar |
| | | pyramid_zodbconn |
| | | pyramid_tm |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | pyramid.debug_templates = false |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_tm |
| | | pyramid_zodbconn |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | |
| | | requires = [ |
| | | 'pyramid', |
| | | 'repoze.zodbconn', |
| | | 'pyramid_zodbconn', |
| | | 'pyramid_tm', |
| | | 'pyramid_debugtoolbar', |
| | | 'ZODB3', |
| | |
| | | from pyramid.config import Configurator |
| | | from repoze.zodbconn.finder import PersistentApplicationFinder |
| | | from pyramid_zodbconn import get_connection |
| | | from tutorial.models import appmaker |
| | | |
| | | def root_factory(request): |
| | | conn = get_connection(request) |
| | | return appmaker(conn.root()) |
| | | |
| | | def main(global_config, **settings): |
| | | """ This function returns a Pyramid WSGI application. |
| | | """ |
| | | zodb_uri = settings.get('zodb_uri', False) |
| | | if zodb_uri is False: |
| | | raise ValueError("No 'zodb_uri' in application configuration.") |
| | | |
| | | finder = PersistentApplicationFinder(zodb_uri, appmaker) |
| | | def get_root(request): |
| | | return finder(request.environ) |
| | | config = Configurator(root_factory=get_root, settings=settings) |
| | | config = Configurator(root_factory=root_factory, settings=settings) |
| | | config.add_static_view('static', 'tutorial:static') |
| | | config.scan('tutorial') |
| | | return config.make_wsgi_app() |
| | |
| | | pyramid.debug_templates = true |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_debugtoolbar |
| | | pyramid_zodbconn |
| | | pyramid_tm |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | pyramid.debug_templates = false |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_tm |
| | | pyramid_zodbconn |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | |
| | | requires = [ |
| | | 'pyramid', |
| | | 'repoze.zodbconn', |
| | | 'pyramid_zodbconn', |
| | | 'pyramid_tm', |
| | | 'pyramid_debugtoolbar', |
| | | 'ZODB3', |
| | |
| | | from pyramid.config import Configurator |
| | | from repoze.zodbconn.finder import PersistentApplicationFinder |
| | | from pyramid_zodbconn import get_connection |
| | | from tutorial.models import appmaker |
| | | |
| | | def root_factory(request): |
| | | conn = get_connection(request) |
| | | return appmaker(conn.root()) |
| | | |
| | | def main(global_config, **settings): |
| | | """ This function returns a WSGI application. |
| | | """ |
| | | zodb_uri = settings.get('zodb_uri', False) |
| | | if zodb_uri is False: |
| | | raise ValueError("No 'zodb_uri' in application configuration.") |
| | | |
| | | finder = PersistentApplicationFinder(zodb_uri, appmaker) |
| | | def get_root(request): |
| | | return finder(request.environ) |
| | | config = Configurator(root_factory=get_root, settings=settings) |
| | | config = Configurator(root_factory=root_factory, settings=settings) |
| | | config.add_static_view('static', 'tutorial:static') |
| | | config.scan('tutorial') |
| | | return config.make_wsgi_app() |
| | |
| | | pyramid.debug_templates = true |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_debugtoolbar |
| | | pyramid_zodbconn |
| | | pyramid_tm |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | pyramid.debug_templates = false |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_tm |
| | | pyramid_zodbconn |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | |
| | | requires = [ |
| | | 'pyramid', |
| | | 'repoze.zodbconn', |
| | | 'pyramid_zodbconn', |
| | | 'pyramid_tm', |
| | | 'pyramid_debugtoolbar', |
| | | 'ZODB3', |
| | |
| | | from repoze.zodbconn.finder import PersistentApplicationFinder |
| | | |
| | | from pyramid.config import Configurator |
| | | from pyramid_zodbconn import get_connection |
| | | |
| | | from pyramid.authentication import AuthTktAuthenticationPolicy |
| | | from pyramid.authorization import ACLAuthorizationPolicy |
| | | |
| | | from tutorial.models import appmaker |
| | | from tutorial.security import groupfinder |
| | | |
| | | def root_factory(request): |
| | | conn = get_connection(request) |
| | | return appmaker(conn.root()) |
| | | |
| | | def main(global_config, **settings): |
| | | """ This function returns a WSGI application. |
| | |
| | | authn_policy = AuthTktAuthenticationPolicy(secret='sosecret', |
| | | callback=groupfinder) |
| | | authz_policy = ACLAuthorizationPolicy() |
| | | zodb_uri = settings.get('zodb_uri', False) |
| | | if zodb_uri is False: |
| | | raise ValueError("No 'zodb_uri' in application configuration.") |
| | | |
| | | finder = PersistentApplicationFinder(zodb_uri, appmaker) |
| | | def get_root(request): |
| | | return finder(request.environ) |
| | | config = Configurator(root_factory=get_root, settings=settings, |
| | | config = Configurator(root_factory=root_factory, settings=settings, |
| | | authentication_policy=authn_policy, |
| | | authorization_policy=authz_policy) |
| | | config.add_static_view('static', 'tutorial:static') |
| | |
| | | self.tmpdir = tempfile.mkdtemp() |
| | | |
| | | dbpath = os.path.join( self.tmpdir, 'test.db') |
| | | from repoze.zodbconn.uri import db_from_uri |
| | | db = db_from_uri('file://' + dbpath) |
| | | settings = { 'zodb_uri' : None } |
| | | uri = 'file://' + dbpath |
| | | settings = { 'zodbconn.uri' : uri , |
| | | 'pyramid.includes': ['pyramid_zodbconn', 'pyramid_tm'] } |
| | | |
| | | app = main({}, **settings) |
| | | from repoze.zodbconn.connector import Connector |
| | | app = Connector(app, db) |
| | | self.db = db |
| | | self.db = app.registry.zodb_database |
| | | from webtest import TestApp |
| | | self.testapp = TestApp(app) |
| | | |
| | |
| | | pyramid.debug_templates = true |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_debugtoolbar |
| | | pyramid_zodbconn |
| | | pyramid_tm |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | pyramid.debug_templates = false |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_tm |
| | | pyramid_zodbconn |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | tutorial |
| | | |
| | | [server:main] |
| | |
| | | |
| | | requires = [ |
| | | 'pyramid', |
| | | 'repoze.zodbconn', |
| | | 'pyramid_zodbconn', |
| | | 'pyramid_tm', |
| | | 'pyramid_debugtoolbar', |
| | | 'ZODB3', |
| | |
| | | from pyramid.config import Configurator |
| | | from repoze.zodbconn.finder import PersistentApplicationFinder |
| | | from pyramid_zodbconn import get_connection |
| | | from tutorial.models import appmaker |
| | | |
| | | def root_factory(request): |
| | | conn = get_connection(request) |
| | | return appmaker(conn.root()) |
| | | |
| | | def main(global_config, **settings): |
| | | """ This function returns a WSGI application. |
| | | """ |
| | | zodb_uri = settings.get('zodb_uri', False) |
| | | if zodb_uri is False: |
| | | raise ValueError("No 'zodb_uri' in application configuration.") |
| | | |
| | | finder = PersistentApplicationFinder(zodb_uri, appmaker) |
| | | def get_root(request): |
| | | return finder(request.environ) |
| | | config = Configurator(root_factory=get_root, settings=settings) |
| | | config = Configurator(root_factory=root_factory, settings=settings) |
| | | config.add_static_view('static', 'tutorial:static') |
| | | config.scan('tutorial') |
| | | return config.make_wsgi_app() |
| | |
| | | from pyramid.config import Configurator |
| | | from repoze.zodbconn.finder import PersistentApplicationFinder |
| | | from pyramid_zodbconn import get_connection |
| | | from {{package}}.models import appmaker |
| | | |
| | | def root_factory(request): |
| | | conn = get_connection(request) |
| | | return appmaker(conn.root()) |
| | | |
| | | def main(global_config, **settings): |
| | | """ This function returns a Pyramid WSGI application. |
| | | """ |
| | | zodb_uri = settings.get('zodb_uri', False) |
| | | if zodb_uri is False: |
| | | raise ValueError("No 'zodb_uri' in application configuration.") |
| | | |
| | | finder = PersistentApplicationFinder(zodb_uri, appmaker) |
| | | def get_root(request): |
| | | return finder(request.environ) |
| | | config = Configurator(root_factory=get_root, settings=settings) |
| | | config = Configurator(root_factory=root_factory, settings=settings) |
| | | config.add_static_view('static', '{{package}}:static') |
| | | config.scan('{{package}}') |
| | | return config.make_wsgi_app() |
| | |
| | | pyramid.debug_templates = true |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_debugtoolbar |
| | | pyramid_zodbconn |
| | | pyramid_tm |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | {{project}} |
| | | |
| | | [server:main] |
| | |
| | | pyramid.debug_templates = false |
| | | pyramid.default_locale_name = en |
| | | pyramid.includes = pyramid_tm |
| | | pyramid_zodbconn |
| | | tm.attempts = 3 |
| | | |
| | | zodb_uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000 |
| | | |
| | | [pipeline:main] |
| | | pipeline = |
| | | egg:repoze.zodbconn#closer |
| | | {{project}} |
| | | |
| | | [server:main] |
| | |
| | | |
| | | requires = [ |
| | | 'pyramid', |
| | | 'repoze.zodbconn', |
| | | 'pyramid_zodbconn', |
| | | 'pyramid_tm', |
| | | 'pyramid_debugtoolbar', |
| | | 'ZODB3', |