mit neuen venv und exe-Files

This commit is contained in:
2024-11-03 17:26:54 +01:00
parent 07c05a338a
commit 0c373ff593
15115 changed files with 1998469 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
##############################################################################
#
# Copyright (c) 2004 Zope Foundation 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.
#
##############################################################################
""" Base event system implementation
"""
#: Applications may register for notification of events by appending a
#: callable to the ``subscribers`` list.
#:
#: Each subscriber takes a single argument, which is the event object
#: being published.
#:
#: Exceptions raised by subscribers will be propagated *without* running
#: any remaining subscribers.
subscribers = []
def notify(event):
""" Notify all subscribers of ``event``.
"""
for subscriber in subscribers:
subscriber(event)

View File

@@ -0,0 +1,76 @@
"""Class-based event handlers
A light-weight event-handler framework based on event classes.
Handlers are registered for event classes:
>>> import zope.event.classhandler
>>> class MyEvent(object):
... pass
>>> def handler1(event):
... print("handler1 %r" % event.__class__.__name__)
>>> zope.event.classhandler.handler(MyEvent, handler1)
Descriptor syntax:
>>> @zope.event.classhandler.handler(MyEvent)
... def handler2(event):
... print("handler2 %r" % event.__class__.__name__)
>>> class MySubEvent(MyEvent):
... pass
>>> @zope.event.classhandler.handler(MySubEvent)
... def handler3(event):
... print("handler3 %r" % event.__class__.__name__)
Subscribers are called in class method-resolution order, so only
new-style event classes are supported, and then by order of registry.
>>> import zope.event
>>> zope.event.notify(MySubEvent())
handler3 'MySubEvent'
handler1 'MySubEvent'
handler2 'MySubEvent'
"""
import zope.event
__all__ = [
'handler',
]
registry = {}
def handler(event_class, handler_=None, _decorator=False):
""" Define an event handler for a (new-style) class.
This can be called with a class and a handler, or with just a
class and the result used as a handler decorator.
"""
if handler_ is None:
return lambda func: handler(event_class, func, True)
if not registry:
zope.event.subscribers.append(dispatch)
if event_class not in registry:
registry[event_class] = [handler_]
else:
registry[event_class].append(handler_)
if _decorator:
return handler
def dispatch(event):
for event_class in event.__class__.__mro__:
for handler in registry.get(event_class, ()):
handler(event)

View File

@@ -0,0 +1,64 @@
##############################################################################
#
# Copyright (c) 2004 Zope Foundation 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.
#
##############################################################################
""" Test the event system
"""
import doctest
import unittest
class Test_notify(unittest.TestCase):
def setUp(self):
from zope.event import subscribers
self._old_subscribers = subscribers[:]
subscribers[:] = []
def tearDown(self):
from zope.event import subscribers
subscribers[:] = self._old_subscribers
def _callFUT(self, event):
from zope.event import notify
notify(event)
def test_empty(self):
event = object()
self._callFUT(event)
def test_not_empty(self):
from zope.event import subscribers
dummy = []
subscribers.append(dummy.append)
event = object()
self._callFUT(event)
self.assertEqual(dummy, [event])
def setUpClassHandlers(test):
import zope.event
test.globs['old_subs'] = zope.event.subscribers
def tearDownClassHandlers(test):
import zope.event
zope.event.subscribers = test.globs['old_subs']
def test_suite():
return unittest.TestSuite((
unittest.defaultTestLoader.loadTestsFromName(__name__),
doctest.DocTestSuite(
'zope.event.classhandler',
setUp=setUpClassHandlers, tearDown=tearDownClassHandlers)
))