summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalthe Borch <mborch@gmail.com>2008-08-29 18:24:03 +0000
committerMalthe Borch <mborch@gmail.com>2008-08-29 18:24:03 +0000
commit003e522b5784f50bc6f41168d0b087cc25d2aa4f (patch)
treec9d2386ab60f5cccb8124059ccc01f69c9d98be8
parent7f4f1a3b3acd01f5d24dd70a40154509fe0c8760 (diff)
downloadpyramid-003e522b5784f50bc6f41168d0b087cc25d2aa4f.tar.gz
pyramid-003e522b5784f50bc6f41168d0b087cc25d2aa4f.tar.bz2
pyramid-003e522b5784f50bc6f41168d0b087cc25d2aa4f.zip
Added event notification after WSGI application is created and configured.
-rw-r--r--repoze/bfg/interfaces.py14
-rw-r--r--repoze/bfg/router.py6
-rw-r--r--repoze/bfg/tests/test_router.py15
3 files changed, 33 insertions, 2 deletions
diff --git a/repoze/bfg/interfaces.py b/repoze/bfg/interfaces.py
index 3a4c45373..d1a8fc63a 100644
--- a/repoze/bfg/interfaces.py
+++ b/repoze/bfg/interfaces.py
@@ -1,6 +1,9 @@
+from zope.interface import implements
from zope.interface import Interface
from zope.interface import Attribute
+from zope.component.interfaces import IObjectEvent
+
class IRequest(Interface):
""" Marker interface for a request object """
@@ -84,3 +87,14 @@ class ISettings(Interface):
""" Runtime settings for repoze.bfg """
reload_templates = Attribute('Reload templates when they change')
+class IWSGIApplicationCreatedEvent(IObjectEvent):
+ """ Event issued after the application has been created and
+ configured."""
+
+ app = Attribute(u"Published application")
+
+class WSGIApplicationCreatedEvent(object):
+ implements(IWSGIApplicationCreatedEvent)
+
+ def __init__(self, app):
+ self.app = app
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index 49ccd1ad6..21ac17564 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -3,6 +3,7 @@ from zope.component import queryMultiAdapter
from zope.component import queryUtility
from zope.component.event import dispatch
from zope.interface import directlyProvides
+from zope.event import notify
from webob import Request
from webob.exc import HTTPNotFound
@@ -15,6 +16,7 @@ from repoze.bfg.interfaces import IView
from repoze.bfg.interfaces import IViewPermission
from repoze.bfg.interfaces import ISecurityPolicy
from repoze.bfg.interfaces import IRequest
+from repoze.bfg.interfaces import WSGIApplicationCreatedEvent
from repoze.bfg.registry import registry_manager
@@ -89,6 +91,8 @@ def make_app(root_policy, package=None, filename='configure.zcml',
specific option value, e.g. ``{'reload_templates':True}``"""
from repoze.bfg.registry import makeRegistry
registry = makeRegistry(filename, package, options)
- return Router(root_policy, registry)
+ app = Router(root_policy, registry)
+ notify(WSGIApplicationCreatedEvent(app))
+ return app
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 381091d56..87dcbba66 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -264,7 +264,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
self.assertEqual(request_events[0].request.environ, environ)
self.assertEqual(len(response_events), 1)
self.assertEqual(response_events[0].response, response)
-
+
class MakeAppTests(unittest.TestCase, PlacelessSetup):
def setUp(self):
PlacelessSetup.setUp(self)
@@ -284,6 +284,19 @@ class MakeAppTests(unittest.TestCase, PlacelessSetup):
self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp')
self.assertEqual(app.root_policy, rootpolicy)
+ def test_event(self):
+ def subscriber(event):
+ event.app.created = True
+ from zope.component import getGlobalSiteManager
+ from repoze.bfg.interfaces import IWSGIApplicationCreatedEvent
+ getGlobalSiteManager().registerHandler(
+ subscriber, (IWSGIApplicationCreatedEvent,))
+ from repoze.bfg.tests import fixtureapp
+ make_app = self._getFUT()
+ rootpolicy = make_rootpolicy(None)
+ app = make_app(rootpolicy, fixtureapp)
+ assert app.created is True
+
class DummyContext:
pass