[Checkins] SVN: z3ext.statusmessage/tags/1.3.9/ release tag
Nikolay Kim
fafhrd91 at gmail.com
Wed Jul 15 18:20:17 EDT 2009
Log message for revision 101941:
release tag
Changed:
A z3ext.statusmessage/tags/1.3.9/
D z3ext.statusmessage/tags/1.3.9/CHANGES.txt
A z3ext.statusmessage/tags/1.3.9/CHANGES.txt
U z3ext.statusmessage/tags/1.3.9/setup.py
D z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/README.txt
A z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/README.txt
D z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/session.py
A z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/session.py
-=-
Deleted: z3ext.statusmessage/tags/1.3.9/CHANGES.txt
===================================================================
--- z3ext.statusmessage/trunk/CHANGES.txt 2009-07-15 07:19:19 UTC (rev 101919)
+++ z3ext.statusmessage/tags/1.3.9/CHANGES.txt 2009-07-15 22:20:16 UTC (rev 101941)
@@ -1,86 +0,0 @@
-=======
-CHANGES
-=======
-
-1.3.8 (2009-06-23)
-------------------
-
-- Better checks for session service availability
-
-
-1.3.7 (2009-06-04)
-------------------
-
-- Added null status message service
-
-
-1.3.6 (2009-06-01)
-------------------
-
-- Fix publication afterCall handler
-
-
-1.3.5 (2009-04-15)
-------------------
-
-- Do not use z3c.autoinclude
-
-
-1.3.4 (2009-03-12)
-------------------
-
-- Added default css styles
-
-
-1.3.3 (2008-11-27)
-------------------
-
-- Handle error if session is not available
-
-
-1.3.2 (2008-11-23)
-------------------
-
-- Fixed tests agains zope3.4
-
-
-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.
Copied: z3ext.statusmessage/tags/1.3.9/CHANGES.txt (from rev 101940, z3ext.statusmessage/trunk/CHANGES.txt)
===================================================================
--- z3ext.statusmessage/tags/1.3.9/CHANGES.txt (rev 0)
+++ z3ext.statusmessage/tags/1.3.9/CHANGES.txt 2009-07-15 22:20:16 UTC (rev 101941)
@@ -0,0 +1,92 @@
+=======
+CHANGES
+=======
+
+1.3.9 (2009-07-15)
+------------------
+
+- Oppress duplicated messages
+
+
+1.3.8 (2009-06-23)
+------------------
+
+- Better checks for session service availability
+
+
+1.3.7 (2009-06-04)
+------------------
+
+- Added null status message service
+
+
+1.3.6 (2009-06-01)
+------------------
+
+- Fix publication afterCall handler
+
+
+1.3.5 (2009-04-15)
+------------------
+
+- Do not use z3c.autoinclude
+
+
+1.3.4 (2009-03-12)
+------------------
+
+- Added default css styles
+
+
+1.3.3 (2008-11-27)
+------------------
+
+- Handle error if session is not available
+
+
+1.3.2 (2008-11-23)
+------------------
+
+- Fixed tests agains zope3.4
+
+
+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.9/setup.py
===================================================================
--- z3ext.statusmessage/trunk/setup.py 2009-07-15 07:19:19 UTC (rev 101919)
+++ z3ext.statusmessage/tags/1.3.9/setup.py 2009-07-15 22:20:16 UTC (rev 101941)
@@ -21,7 +21,7 @@
def read(*rnames):
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-version = '1.3.9dev'
+version = '1.3.9'
setup(name='z3ext.statusmessage',
Deleted: z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/README.txt
===================================================================
--- z3ext.statusmessage/trunk/src/z3ext/statusmessage/README.txt 2009-07-15 07:19:19 UTC (rev 101919)
+++ z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/README.txt 2009-07-15 22:20:16 UTC (rev 101941)
@@ -1,102 +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.getMessageService)
-
- >>> 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')
- >>> print msg.render('Test message')
- <div class="statusMessage">Test message</div>
-
-Now we can add messages.
-
- >>> service.add('Test message')
-
- >>> bool(service)
- True
-
- >>> for msg in service.messages():
- ... print msg
- <div class="statusMessage">Test message</div>
-
-
-Let's register another message type.
-
- >>> component.provideAdapter(message.WarningMessage, name='warning')
-
- >>> service.add('Warning message', 'warning')
-
- >>> for msg in service.messages():
- ... print msg
- <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.9/src/z3ext/statusmessage/README.txt (from rev 101940, z3ext.statusmessage/trunk/src/z3ext/statusmessage/README.txt)
===================================================================
--- z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/README.txt (rev 0)
+++ z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/README.txt 2009-07-15 22:20:16 UTC (rev 101941)
@@ -0,0 +1,112 @@
+=====================
+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.getMessageService)
+
+ >>> 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')
+ >>> print msg.render('Test message')
+ <div class="statusMessage">Test message</div>
+
+Now we can add messages.
+
+ >>> service.add('Test message')
+
+ >>> bool(service)
+ True
+
+ >>> for msg in service.messages():
+ ... print msg
+ <div class="statusMessage">Test message</div>
+
+
+Let's register another message type.
+
+ >>> component.provideAdapter(message.WarningMessage, name='warning')
+
+ >>> service.add('Warning message', 'warning')
+
+ >>> for msg in service.messages():
+ ... print msg
+ <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>
+
+Serive will oppress duplicated messages:
+
+ >>> 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.9/src/z3ext/statusmessage/session.py
===================================================================
--- z3ext.statusmessage/trunk/src/z3ext/statusmessage/session.py 2009-07-15 07:19:19 UTC (rev 101919)
+++ z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/session.py 2009-07-15 22:20:16 UTC (rev 101941)
@@ -1,79 +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$
-"""
-from zope import interface, component
-from zope.component import getAdapter, queryUtility
-from zope.session.interfaces import ISession, ISessionDataContainer
-from zope.publisher.interfaces.browser import IBrowserRequest
-
-from null import NullMessageService
-from interfaces import SESSIONKEY, IMessage, IStatusMessage
-
-
- at component.adapter(IBrowserRequest)
- at interface.implementer(IStatusMessage)
-def getMessageService(request):
- try:
- session = ISession(request)
- except:
- return NullMessageService(request)
-
- if queryUtility(ISessionDataContainer) is None:
- return NullMessageService(request)
-
- return MessageService(request, session)
-
-
-class MessageService(object):
- """ message service """
- component.adapts(IBrowserRequest, ISession)
- interface.implements(IStatusMessage)
-
- def __init__(self, request, session):
- self.request = request
- self.session = session
-
- def add(self, text, type='info'):
- message = getAdapter(self.request, IMessage, type)
-
- try:
- data = self.session[SESSIONKEY]
- messages = data.get('messages', [])
- messages.append(message.render(text))
- data['messages'] = messages
- except Exception, e:
- pass
-
- def clear(self):
- data = self.session.get(SESSIONKEY)
- if data is not None:
- messages = data.get('messages')
- if messages:
- del data['messages']
- return messages
- return ()
-
- def messages(self):
- data = self.session.get(SESSIONKEY)
- if data is not None:
- messages = data.get('messages')
- if messages:
- return messages
- return ()
-
- def __nonzero__(self):
- return bool(self.messages())
Copied: z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/session.py (from rev 101940, z3ext.statusmessage/trunk/src/z3ext/statusmessage/session.py)
===================================================================
--- z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/session.py (rev 0)
+++ z3ext.statusmessage/tags/1.3.9/src/z3ext/statusmessage/session.py 2009-07-15 22:20:16 UTC (rev 101941)
@@ -0,0 +1,81 @@
+##############################################################################
+#
+# 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$
+"""
+from zope import interface, component
+from zope.component import getAdapter, queryUtility
+from zope.session.interfaces import ISession, ISessionDataContainer
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+from null import NullMessageService
+from interfaces import SESSIONKEY, IMessage, IStatusMessage
+
+
+ at component.adapter(IBrowserRequest)
+ at interface.implementer(IStatusMessage)
+def getMessageService(request):
+ try:
+ session = ISession(request)
+ except:
+ return NullMessageService(request)
+
+ if queryUtility(ISessionDataContainer) is None:
+ return NullMessageService(request)
+
+ return MessageService(request, session)
+
+
+class MessageService(object):
+ """ message service """
+ component.adapts(IBrowserRequest, ISession)
+ interface.implements(IStatusMessage)
+
+ def __init__(self, request, session):
+ self.request = request
+ self.session = session
+
+ def add(self, text, type='info'):
+ message = getAdapter(self.request, IMessage, type)
+
+ try:
+ data = self.session[SESSIONKEY]
+ messages = data.get('messages', [])
+ text = message.render(text)
+ if text not in self.messages():
+ messages.append(text)
+ data['messages'] = messages
+ except Exception, e:
+ pass
+
+ def clear(self):
+ data = self.session.get(SESSIONKEY)
+ if data is not None:
+ messages = data.get('messages')
+ if messages:
+ del data['messages']
+ return messages
+ return ()
+
+ def messages(self):
+ data = self.session.get(SESSIONKEY)
+ if data is not None:
+ messages = data.get('messages')
+ if messages:
+ return messages
+ return ()
+
+ def __nonzero__(self):
+ return bool(self.messages())
More information about the Checkins
mailing list