[Checkins] SVN: z3ext.statusmessage/tags/1.3.1/ release tag

Nikolay Kim fafhrd at datacom.kz
Fri Nov 21 03:49:33 EST 2008


Log message for revision 93225:
  release tag

Changed:
  A   z3ext.statusmessage/tags/1.3.1/
  D   z3ext.statusmessage/tags/1.3.1/CHANGES.txt
  A   z3ext.statusmessage/tags/1.3.1/CHANGES.txt
  U   z3ext.statusmessage/tags/1.3.1/setup.py
  D   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt
  A   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt
  D   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py
  A   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py
  A   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.pt
  D   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py
  A   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py
  D   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py
  A   z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py

-=-
Deleted: z3ext.statusmessage/tags/1.3.1/CHANGES.txt
===================================================================
--- z3ext.statusmessage/trunk/CHANGES.txt	2008-11-21 00:35:08 UTC (rev 93215)
+++ z3ext.statusmessage/tags/1.3.1/CHANGES.txt	2008-11-21 08:49:33 UTC (rev 93225)
@@ -1,38 +0,0 @@
-=======
-CHANGES
-=======
-
-1.3.0 (2008-11-20)
-------------------
-
-- API refactored
-
-- Allow add messages at any stage of page processing
-
-
-1.2.1 (2008-05-14)
-------------------
-
-- Replace 'autoinclude' with 'includeDependendcies'
-
-
-1.2.0 (2008-03-21)
-------------------
-
-- rename to z3ext.statusmessage
-
-- moved to svn.zope.org
-
-
-1.1.0 (2008-03-18)
-------------------
-
-- Use z3c.autoinclude
-
-- Code cleanup
-
-
-1.0.0 (2007-12-08)
-------------------
-
-- Initial release.

Copied: z3ext.statusmessage/tags/1.3.1/CHANGES.txt (from rev 93224, z3ext.statusmessage/trunk/CHANGES.txt)
===================================================================
--- z3ext.statusmessage/tags/1.3.1/CHANGES.txt	                        (rev 0)
+++ z3ext.statusmessage/tags/1.3.1/CHANGES.txt	2008-11-21 08:49:33 UTC (rev 93225)
@@ -0,0 +1,44 @@
+=======
+CHANGES
+=======
+
+1.3.1 (2008-11-21)
+------------------
+
+- Fixed UnicodeEncodeError
+
+
+1.3.0 (2008-11-20)
+------------------
+
+- API refactored
+
+- Allow add messages at any stage of page processing
+
+
+1.2.1 (2008-05-14)
+------------------
+
+- Replace 'autoinclude' with 'includeDependendcies'
+
+
+1.2.0 (2008-03-21)
+------------------
+
+- rename to z3ext.statusmessage
+
+- moved to svn.zope.org
+
+
+1.1.0 (2008-03-18)
+------------------
+
+- Use z3c.autoinclude
+
+- Code cleanup
+
+
+1.0.0 (2007-12-08)
+------------------
+
+- Initial release.

Modified: z3ext.statusmessage/tags/1.3.1/setup.py
===================================================================
--- z3ext.statusmessage/trunk/setup.py	2008-11-21 00:35:08 UTC (rev 93215)
+++ z3ext.statusmessage/tags/1.3.1/setup.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -21,7 +21,7 @@
 def read(*rnames):
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
-version = '1.3.1dev'
+version = '1.3.1'
 
 
 setup(name='z3ext.statusmessage',

Deleted: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt
===================================================================
--- z3ext.statusmessage/trunk/src/z3ext/statusmessage/README.txt	2008-11-21 00:35:08 UTC (rev 93215)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt	2008-11-21 08:49:33 UTC (rev 93225)
@@ -1,99 +0,0 @@
-=====================
-Portal status message
-=====================
-
-Instead include notification messages directly to template,
-developer can use messaging service.
-
-Main interface is IStatusMessage, it is adapter for IBrowserRequest
-so we can have different implementations, for example cookie based or session.
-
-By default only session based service implemented.
-
-   >>> from zope import interface, component
-   >>> from zope.interface.verify import verifyClass
-
-   >>> from z3ext.statusmessage import interfaces, session, message
-
-   >>> verifyClass(interfaces.IStatusMessage, session.MessageService)
-   True
-
-   >>> component.provideAdapter(session.MessageService)
-
-   >>> from zope.publisher.browser import TestRequest
-   >>> request = TestRequest()
-
-   >>> service = interfaces.IStatusMessage(request)
-
-   >>> bool(service)
-   False
-
-   >>> service.add('Test message')
-   Traceback (most recent call last):
-   ...
-   ComponentLookupError: ...
-
-   >>> service.clear()
-   ()
-
-
-Before we can use message service we need register message type.
-
-   >>> component.provideAdapter(message.InformationMessage, name='info')
-
-   >>> msg = component.getAdapter(request, interfaces.IMessage, 'info')
-   >>> msg.render('Test message')
-   '<div class="statusMessage">Test message</div>'
-
-Now we can add messages.
-
-   >>> service.add('Test message')
-
-   >>> bool(service)
-   True
-
-   >>> service.messages()
-   ['<div class="statusMessage">Test message</div>']
-
-
-Let's register another message type.
-
-   >>> component.provideAdapter(message.WarningMessage, name='warning')
-
-   >>> service.add('Warning message', 'warning')
-
-   >>> service.messages()
-   ['<div class="statusMessage">Test message</div>', '<div class="statusWarningMessage">Warning message</div>']
-
-Error message, we can add exception object
-
-   >>> component.provideAdapter(message.ErrorMessage, name='error')
-
-   >>> service.add(Exception('Error message'), 'error')
-
-or text message
-
-   >>> service.add('Error message', 'error')
-
-   >>> for msg in service.messages():
-   ...     print msg
-   <div class="statusMessage">Test message</div>
-   <div class="statusWarningMessage">Warning message</div>
-   <div class="statusStopMessage">Exception: Error message</div>
-   <div class="statusStopMessage">Error message</div>
-
-
-Clearing service
-----------------
-
-clear() method return all messages and clear service.
-
-   >>> for msg in service.clear():
-   ...     print msg
-   <div class="statusMessage">Test message</div>
-   <div class="statusWarningMessage">Warning message</div>
-   <div class="statusStopMessage">Exception: Error message</div>
-   <div class="statusStopMessage">Error message</div>
-
-   >>> bool(service)
-   False

Copied: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt (from rev 93224, z3ext.statusmessage/trunk/src/z3ext/statusmessage/README.txt)
===================================================================
--- z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt	                        (rev 0)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/README.txt	2008-11-21 08:49:33 UTC (rev 93225)
@@ -0,0 +1,99 @@
+=====================
+Portal status message
+=====================
+
+Instead include notification messages directly to template,
+developer can use messaging service.
+
+Main interface is IStatusMessage, it is adapter for IBrowserRequest
+so we can have different implementations, for example cookie based or session.
+
+By default only session based service implemented.
+
+   >>> from zope import interface, component
+   >>> from zope.interface.verify import verifyClass
+
+   >>> from z3ext.statusmessage import interfaces, session, message
+
+   >>> verifyClass(interfaces.IStatusMessage, session.MessageService)
+   True
+
+   >>> component.provideAdapter(session.MessageService)
+
+   >>> from zope.publisher.browser import TestRequest
+   >>> request = TestRequest()
+
+   >>> service = interfaces.IStatusMessage(request)
+
+   >>> bool(service)
+   False
+
+   >>> service.add('Test message')
+   Traceback (most recent call last):
+   ...
+   ComponentLookupError: ...
+
+   >>> service.clear()
+   ()
+
+
+Before we can use message service we need register message type.
+
+   >>> component.provideAdapter(message.InformationMessage, name='info')
+
+   >>> msg = component.getAdapter(request, interfaces.IMessage, 'info')
+   >>> msg.render('Test message')
+   u'<div class="statusMessage">Test message</div>'
+
+Now we can add messages.
+
+   >>> service.add('Test message')
+
+   >>> bool(service)
+   True
+
+   >>> service.messages()
+   [u'<div class="statusMessage">Test message</div>']
+
+
+Let's register another message type.
+
+   >>> component.provideAdapter(message.WarningMessage, name='warning')
+
+   >>> service.add('Warning message', 'warning')
+
+   >>> service.messages()
+   [u'<div class="statusMessage">Test message</div>', u'<div class="statusWarningMessage">Warning message</div>']
+
+Error message, we can add exception object
+
+   >>> component.provideAdapter(message.ErrorMessage, name='error')
+
+   >>> service.add(Exception('Error message'), 'error')
+
+or text message
+
+   >>> service.add('Error message', 'error')
+
+   >>> for msg in service.messages():
+   ...     print msg
+   <div class="statusMessage">Test message</div>
+   <div class="statusWarningMessage">Warning message</div>
+   <div class="statusStopMessage">Exception: Error message</div>
+   <div class="statusStopMessage">Error message</div>
+
+
+Clearing service
+----------------
+
+clear() method return all messages and clear service.
+
+   >>> for msg in service.clear():
+   ...     print msg
+   <div class="statusMessage">Test message</div>
+   <div class="statusWarningMessage">Warning message</div>
+   <div class="statusStopMessage">Exception: Error message</div>
+   <div class="statusStopMessage">Error message</div>
+
+   >>> bool(service)
+   False

Deleted: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py
===================================================================
--- z3ext.statusmessage/trunk/src/z3ext/statusmessage/handler.py	2008-11-21 00:35:08 UTC (rev 93215)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -1,47 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2008 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-""" 
-
-$Id$
-"""
-from threading import local
-from zope import interface, component
-from zope.app.publication.zopepublication import ZopePublication
-
-from interfaces import IStatusMessage
-
-
-# BAD! VERY BAD
-
-def newAfterCall(self, request, ob):
-    response = request.response
-
-    status = response.getStatus()
-    if status not in (302, 303):
-        service = IStatusMessage(request, None)
-        if service is None:
-            return
-
-        messages = service.clear()
-
-        if messages:
-            body = response.consumeBody()
-            body = body.replace(
-                '<!--z3ext-statusmessage-->', str(u'\n'.join(messages)), 1)
-            response.setResult(body)
-
-    afterCall(self, request, ob)
-
-afterCall = ZopePublication.afterCall
-ZopePublication.afterCall = newAfterCall

Copied: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py (from rev 93224, z3ext.statusmessage/trunk/src/z3ext/statusmessage/handler.py)
===================================================================
--- z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py	                        (rev 0)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/handler.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -0,0 +1,49 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" 
+
+$Id$
+"""
+from threading import local
+from zope import interface, component
+from zope.app.publication.zopepublication import ZopePublication
+
+from interfaces import IStatusMessage
+
+
+# BAD! VERY BAD
+
+def newAfterCall(self, request, ob):
+    response = request.response
+
+    status = response.getStatus()
+    if status not in (302, 303):
+        service = IStatusMessage(request, None)
+        if service is None:
+            return
+
+        messages = service.clear()
+
+        if messages:
+            msg = u'\n'.join(messages)
+            msg = msg.encode('utf-8', 'ignore')
+
+            body = response.consumeBody()
+            body = body.replace('<!--z3ext-statusmessage-->', msg, 1)
+            response.setResult(body)
+
+    afterCall(self, request, ob)
+
+afterCall = ZopePublication.afterCall
+ZopePublication.afterCall = newAfterCall

Copied: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.pt (from rev 93224, z3ext.statusmessage/trunk/src/z3ext/statusmessage/message.pt)
===================================================================
--- z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.pt	                        (rev 0)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.pt	2008-11-21 08:49:33 UTC (rev 93225)
@@ -0,0 +1 @@
+<div tal:attributes="class view/cssClass" tal:content="options/message"></div>
\ No newline at end of file

Deleted: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py
===================================================================
--- z3ext.statusmessage/trunk/src/z3ext/statusmessage/message.py	2008-11-21 00:35:08 UTC (rev 93215)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -1,69 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""
-
-$Id$
-"""
-import cgi
-from zope import interface, component
-from zope.contentprovider.interfaces import IContentProvider
-from zope.publisher.interfaces.browser import IBrowserRequest
-
-from interfaces import IMessage
-
-
-class Message(object):
-    interface.implements(IMessage)
-    component.adapts(IBrowserRequest)
-
-    def __init__(self, request):
-        self.request = request
-
-
-class InformationMessage(Message):
-
-    def render(self, message):
-        return '<div class="statusMessage">%s</div>'%message
-
-
-class WarningMessage(Message):
-
-    def render(self, message):
-        return '<div class="statusWarningMessage">%s</div>'%message
-
-
-class ErrorMessage(Message):
-
-    def render(self, e):
-        if isinstance(e, Exception):
-            message = '%s: %s'%(e.__class__.__name__, cgi.escape(str(e), True))
-        else:
-            message = e
-
-        return '<div class="statusStopMessage">%s</div>'%message
-
-
-class StatusMessage(object):
-    interface.implements(IContentProvider)
-    component.adapts(
-        interface.Interface, IBrowserRequest, interface.Interface)
-
-    def __init__(self, context, request, view):
-        self.context, self.request, self.view = context, request, view
-
-    def update(self):
-        pass
-
-    def render(self):
-        return u'<!--z3ext-statusmessage-->'

Copied: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py (from rev 93224, z3ext.statusmessage/trunk/src/z3ext/statusmessage/message.py)
===================================================================
--- z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py	                        (rev 0)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/message.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -0,0 +1,78 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+import cgi
+from zope import interface, component
+from zope.app.pagetemplate import ViewPageTemplateFile
+from zope.contentprovider.interfaces import IContentProvider
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+from interfaces import IMessage
+
+
+class Message(object):
+    interface.implements(IMessage)
+    component.adapts(IBrowserRequest)
+
+    def __init__(self, request):
+        self.request = request
+
+
+class InformationMessage(Message):
+
+    cssClass = 'statusMessage'
+    index = ViewPageTemplateFile('message.pt')
+
+    @property
+    def context(self):
+        return self
+
+    def render(self, message):
+        return self.index(message=message)
+
+
+class WarningMessage(InformationMessage):
+
+    cssClass = 'statusWarningMessage'
+
+
+class ErrorMessage(InformationMessage):
+
+    cssClass = 'statusStopMessage'
+
+    def render(self, e):
+        if isinstance(e, Exception):
+            message = '%s: %s'%(e.__class__.__name__, cgi.escape(str(e), True))
+        else:
+            message = e
+
+        return super(ErrorMessage, self).render(message)
+
+
+class StatusMessage(object):
+    interface.implements(IContentProvider)
+    component.adapts(
+        interface.Interface, IBrowserRequest, interface.Interface)
+
+    def __init__(self, context, request, view):
+        self.context, self.request, self.view = context, request, view
+
+    def update(self):
+        pass
+
+    def render(self):
+        return u'<!--z3ext-statusmessage-->'

Deleted: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py
===================================================================
--- z3ext.statusmessage/trunk/src/z3ext/statusmessage/tests/tests.py	2008-11-21 00:35:08 UTC (rev 93215)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -1,74 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-""" z3ext.statusmessage tests
-
-$Id$
-"""
-import os, unittest, doctest
-from zope.app.testing import setup
-
-from zope import interface, component
-from zope.component import provideAdapter
-from zope.session.interfaces import ISession
-from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.app.testing.functional import ZCMLLayer
-from zope.app.testing.functional import FunctionalDocFileSuite
-from z3ext.statusmessage import message
-
-
-statusmessageLayer = ZCMLLayer(
-    os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
-    __name__, 'statusmessageLayer', allow_teardown=True)
-
-
-class Session(dict):
-
-    def __getitem__(self, key):
-        if not self.has_key(key):
-            self[key] = {}
-
-        return super(Session, self).__getitem__(key)
-
-session = Session()
-
- at interface.implementer(ISession)
- at component.adapter(IBrowserRequest)
-def getSession(request):
-    return session
-
-
-def setUp(test):
-    setup.placelessSetUp()
-    component.provideAdapter(getSession)
-    component.provideAdapter(message.StatusMessage, name='statusMessage')
-
-
-def tearDown(test):
-    session.__init__()
-    setup.placelessTearDown()
-
-
-def test_suite():
-    testbrowser = FunctionalDocFileSuite(
-        "testbrowser.txt",
-        optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
-    testbrowser.layer = statusmessageLayer
-
-    return unittest.TestSuite((
-            testbrowser,
-            doctest.DocFileSuite(
-                '../README.txt',
-                setUp=setUp, tearDown=tearDown,
-                optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS),
-            ))

Copied: z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py (from rev 93224, z3ext.statusmessage/trunk/src/z3ext/statusmessage/tests/tests.py)
===================================================================
--- z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py	                        (rev 0)
+++ z3ext.statusmessage/tags/1.3.1/src/z3ext/statusmessage/tests/tests.py	2008-11-21 08:49:33 UTC (rev 93225)
@@ -0,0 +1,76 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" z3ext.statusmessage tests
+
+$Id$
+"""
+import os, unittest, doctest
+from zope.app.testing import setup
+
+from zope import interface, component
+from zope.component import provideAdapter
+from zope.session.interfaces import ISession
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.app.testing.functional import ZCMLLayer
+from zope.app.testing.functional import FunctionalDocFileSuite
+from zope.traversing.testing import setUp as setUpTraversing
+from z3ext.statusmessage import message
+
+
+statusmessageLayer = ZCMLLayer(
+    os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
+    __name__, 'statusmessageLayer', allow_teardown=True)
+
+
+class Session(dict):
+
+    def __getitem__(self, key):
+        if not self.has_key(key):
+            self[key] = {}
+
+        return super(Session, self).__getitem__(key)
+
+session = Session()
+
+ at interface.implementer(ISession)
+ at component.adapter(IBrowserRequest)
+def getSession(request):
+    return session
+
+
+def setUp(test):
+    setup.placelessSetUp()
+    setUpTraversing()
+    component.provideAdapter(getSession)
+    component.provideAdapter(message.StatusMessage, name='statusMessage')
+
+
+def tearDown(test):
+    session.__init__()
+    setup.placelessTearDown()
+
+
+def test_suite():
+    testbrowser = FunctionalDocFileSuite(
+        "testbrowser.txt",
+        optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
+    testbrowser.layer = statusmessageLayer
+
+    return unittest.TestSuite((
+            testbrowser,
+            doctest.DocFileSuite(
+                '../README.txt',
+                setUp=setUp, tearDown=tearDown,
+                optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS),
+            ))



More information about the Checkins mailing list