event.py

来自「Python的一个ORM,现在很火」· Python 代码 · 共 66 行

PY
66
字号
## Copyright (c) 2006, 2007 Canonical## Written by Gustavo Niemeyer <gustavo@niemeyer.net>## This file is part of Storm Object Relational Mapper.## Storm is free software; you can redistribute it and/or modify# it under the terms of the GNU Lesser General Public License as# published by the Free Software Foundation; either version 2.1 of# the License, or (at your option) any later version.## Storm is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public License# along with this program.  If not, see <http://www.gnu.org/licenses/>.#import weakref__all__ = ["EventSystem"]class EventSystem(object):    def __init__(self, owner):        self._owner_ref = weakref.ref(owner)        self._hooks = {}        self._saved_hooks = {}    def save(self):        hooks = {}        for name, callbacks in self._hooks.items():            hooks[name] = callbacks.copy()        self._saved_hooks = hooks    def restore(self):        hooks = self._hooks        hooks.clear()        for name, callbacks in self._saved_hooks.items():            hooks[name] = callbacks.copy()    def hook(self, name, callback, *data):        callbacks = self._hooks.get(name)        if callbacks is None:            self._hooks.setdefault(name, set()).add((callback, data))        else:            callbacks.add((callback, data))    def unhook(self, name, callback, *data):        callbacks = self._hooks.get(name)        if callbacks is not None:            callbacks.discard((callback, data))    def emit(self, name, *args):        owner = self._owner_ref()        if owner is not None:            callbacks = self._hooks.get(name)            if callbacks is not None:                for callback, data in callbacks.copy():                    if callback(owner, *(args+data)) is False:                        callbacks.discard((callback, data))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?