
rocky at serverzen
Jan 31, 2006, 5:30 AM
Post #1 of 1
(757 views)
Permalink
|
|
SVN: zope.webdev/trunk/ Fixed up registration so reregister would get called properly and refactored tests.
|
|
Log message for revision 41509: Fixed up registration so reregister would get called properly and refactored tests. Changed: U zope.webdev/trunk/page.py U zope.webdev/trunk/page.txt U zope.webdev/trunk/page.zcml U zope.webdev/trunk/tests.py -=- Modified: zope.webdev/trunk/page.py =================================================================== --- zope.webdev/trunk/page.py 2006-01-31 13:29:50 UTC (rev 41508) +++ zope.webdev/trunk/page.py 2006-01-31 13:30:25 UTC (rev 41509) @@ -18,6 +18,7 @@ __docformat__ = "reStructuredText" import persistent import zope.interface +from zope.app.component.interfaces.registration import IRegisterable, IRegistered import zope.security.checker import zope.app.component.site import zope.app.component.interfaces.registration @@ -29,8 +30,8 @@ from zope.app import publisher from zope.app.presentation import zpt, registration from zope.webdev import interfaces +from zope.app.component.interfaces.registration import IComponentRegistration - class Page(persistent.Persistent, zope.app.container.contained.Contained): """Local page.""" zope.interface.implements(interfaces.IPage) @@ -86,13 +87,11 @@ def getTemplate(self): return self._template - class PageRegistration(zope.app.component.site.AdapterRegistration): provided = zope.interface.Interface def __init__(self, page): - self.page = page @property @@ -111,10 +110,10 @@ def component(self): makeViewClass = MakeViewClass(self.page) - return registration.TemplateViewFactory( + factory = registration.TemplateViewFactory( makeViewClass, self.page.getTemplate(), self.page.permission) + return factory - class MakeViewClass(object): def __init__(self,page): @@ -137,3 +136,28 @@ reg = PageRegistration(page) package.registrationManager.addRegistration(reg) reg.status = zope.app.component.interfaces.registration.ActiveStatus + +def reregisterPage(page): + registered = IRegistered(page) + for reg in registered.registrations(): + reg.status = zope.app.component.interfaces.registration.InactiveStatus + reg.status = zope.app.component.interfaces.registration.ActiveStatus + + +def handlePageModification(event, page): + reregisterPage(page) + + +class PageRegistered(zope.app.component.registration.Registered): + """Default Registered adapter compares the component which would normally + be the TemplateViewFactory to self.registerable which is a Page instance. + Because we do magic to return the TemplateviewFactory dynamically because + of TTW code, we have changed to comparison in the adapter by overriding. + """ + + def registrations(self): + rm = zapi.getParent(self.registerable).registrationManager + return [.reg for reg in rm.values() + if (IComponentRegistration.providedBy(reg) and + reg.component.cls.page is self.registerable)] + \ No newline at end of file Modified: zope.webdev/trunk/page.txt =================================================================== --- zope.webdev/trunk/page.txt 2006-01-31 13:29:50 UTC (rev 41508) +++ zope.webdev/trunk/page.txt 2006-01-31 13:30:25 UTC (rev 41509) @@ -13,10 +13,14 @@ >>> site['image.gif'] = object() >>> site['file.txt'] = object() - >>> from zope.webdev.page import Page,registerPage - >>> names_html = Page('names.html') + >>> from zope.webdev.page import Page,registerPage,reregisterPage + >>> from zope.webdev.interfaces import IPage + >>> from zope.app.container.interfaces import IReadContainer + >>> names_html = Page('names.html', for_=IPage) >>> site.getSiteManager()['default']['names.html'] = names_html >>> registerPage(names_html) + >>> names_html.for_ = IReadContainer + >>> reregisterPage(names_html) defaults are: for=Interface, layers=(IDefaultLayer,), @@ -53,6 +57,7 @@ >>> page = zope.component.getMultiAdapter( ... (site, request), name='names.html') + Now render the page: @@ -94,4 +99,19 @@ >>> print page() abc + Test event callback to ensure view is reloaded. + >>> reregisterPage(names_html) + + Make sure the event is being fired properly and the view no longer looks up + properly after we change for_. + + >>> from zope.app.event.objectevent import ObjectModifiedEvent + >>> from zope.event import notify + >>> notify(ObjectModifiedEvent(names_html)) + >>> names_html.for_ = IReadContainer + >>> reregisterPage(names_html) + >>> page = zope.component.getMultiAdapter( + ... (site, request), name='names.html') + + Modified: zope.webdev/trunk/page.zcml =================================================================== --- zope.webdev/trunk/page.zcml 2006-01-31 13:29:50 UTC (rev 41508) +++ zope.webdev/trunk/page.zcml 2006-01-31 13:30:25 UTC (rev 41509) @@ -56,5 +56,11 @@ <class class="zodbcode.class_.PersistentMethod"> <allow attributes="__call__" /> </class> - + + <adapter + factory=".page.PageRegistered" + provides="zope.app.component.interfaces.registration.IRegistered" + for=".interfaces.IPage" + /> + </configure> Modified: zope.webdev/trunk/tests.py =================================================================== --- zope.webdev/trunk/tests.py 2006-01-31 13:29:50 UTC (rev 41508) +++ zope.webdev/trunk/tests.py 2006-01-31 13:30:25 UTC (rev 41509) @@ -22,7 +22,15 @@ from zope.testing.doctestunit import DocTestSuite, DocFileSuite from zope.app.testing import setup - +from zope.app.testing import ztapi +from zope.app.event.interfaces import IObjectModifiedEvent +from zope.webdev.page import handlePageModification +from zope.webdev.interfaces import IPage +from zope.webdev.page import PageRegistered +from zope.app.component.interfaces.registration import IRegisterable, IRegistered +from zope.app.event.objectevent import ObjectModifiedEvent +from zope.app.event.objectevent import objectEventNotify + def setUp(test): setup.placefulSetUp() @@ -30,7 +38,14 @@ def tearDown(test): setup.placefulTearDown() +def pageTestSetUp(test): + setup.placefulSetUp() + ztapi.subscribe([IObjectModifiedEvent, IPage], None, handlePageModification) + ztapi.provideAdapter(IPage, IRegistered, PageRegistered) + ztapi.subscribe([IObjectModifiedEvent], None, objectEventNotify) + + def test_suite(): return unittest.TestSuite(( DocFileSuite('package.txt', @@ -42,7 +57,7 @@ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS, ), DocFileSuite('page.txt', - setUp=setUp, tearDown=tearDown, + setUp=pageTestSetUp, tearDown=tearDown, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS, ), DocTestSuite('zope.webdev.vocabulary', _______________________________________________ Zope-CVS maillist - Zope-CVS [at] zope http://mail.zope.org/mailman/listinfo/zope-cvs Zope CVS instructions: http://dev.zope.org/CVS
|