32
known_hooks = registry.Registry()
33
# known_hooks registry contains
34
# tuple of (module, member name) which is the hook point
35
# module where the specific hooks are defined
36
# callable to get the empty specific Hooks for that attribute
37
known_hooks.register_lazy(('bzrlib.branch', 'Branch.hooks'), 'bzrlib.branch',
39
known_hooks.register_lazy(('bzrlib.bzrdir', 'BzrDir.hooks'), 'bzrlib.bzrdir',
41
known_hooks.register_lazy(('bzrlib.commands', 'Command.hooks'),
42
'bzrlib.commands', 'CommandHooks')
43
known_hooks.register_lazy(('bzrlib.info', 'hooks'),
44
'bzrlib.info', 'InfoHooks')
45
known_hooks.register_lazy(('bzrlib.lock', 'Lock.hooks'), 'bzrlib.lock',
47
known_hooks.register_lazy(('bzrlib.merge', 'Merger.hooks'), 'bzrlib.merge',
49
known_hooks.register_lazy(('bzrlib.msgeditor', 'hooks'), 'bzrlib.msgeditor',
51
known_hooks.register_lazy(('bzrlib.mutabletree', 'MutableTree.hooks'),
52
'bzrlib.mutabletree', 'MutableTreeHooks')
53
known_hooks.register_lazy(('bzrlib.smart.client', '_SmartClient.hooks'),
54
'bzrlib.smart.client', 'SmartClientHooks')
55
known_hooks.register_lazy(('bzrlib.smart.server', 'SmartTCPServer.hooks'),
56
'bzrlib.smart.server', 'SmartServerHooks')
57
known_hooks.register_lazy(('bzrlib.status', 'hooks'),
58
'bzrlib.status', 'StatusHooks')
59
known_hooks.register_lazy(
60
('bzrlib.version_info_formats.format_rio', 'RioVersionInfoBuilder.hooks'),
61
'bzrlib.version_info_formats.format_rio', 'RioVersionInfoBuilderHooks')
62
known_hooks.register_lazy(
63
('bzrlib.merge_directive', 'BaseMergeDirective.hooks'),
64
'bzrlib.merge_directive', 'MergeDirectiveHooks')
36
class KnownHooksRegistry(registry.Registry):
37
# known_hooks registry contains
38
# tuple of (module, member name) which is the hook point
39
# module where the specific hooks are defined
40
# callable to get the empty specific Hooks for that attribute
42
def register_lazy_hook(self, hook_module_name, hook_member_name,
43
hook_factory_member_name):
44
self.register_lazy((hook_module_name, hook_member_name),
45
hook_module_name, hook_factory_member_name)
47
def iter_parent_objects(self):
48
"""Yield (hook_key, (parent_object, attr)) tuples for every registered
49
hook, where 'parent_object' is the object that holds the hook
52
This is useful for resetting/restoring all the hooks to a known state,
53
as is done in bzrlib.tests.TestCase._clear_hooks.
55
for key in self.keys():
56
yield key, self.key_to_parent_and_attribute(key)
58
def key_to_parent_and_attribute(self, (module_name, member_name)):
59
"""Convert a known_hooks key to a (parent_obj, attr) pair.
61
:param key: A tuple (module_name, member_name) as found in the keys of
62
the known_hooks registry.
63
:return: The parent_object of the hook and the name of the attribute on
64
that parent object where the hook is kept.
66
parent_mod, parent_member, attr = pyutils.calc_parent_name(module_name,
68
return pyutils.get_named_object(parent_mod, parent_member), attr
71
known_hooks = KnownHooksRegistry()
72
known_hooks.register_lazy_hook('bzrlib.branch', 'Branch.hooks', 'BranchHooks')
73
known_hooks.register_lazy_hook('bzrlib.bzrdir', 'BzrDir.hooks', 'BzrDirHooks')
74
known_hooks.register_lazy_hook(
75
'bzrlib.commands', 'Command.hooks', 'CommandHooks')
76
known_hooks.register_lazy_hook('bzrlib.info', 'hooks', 'InfoHooks')
77
known_hooks.register_lazy_hook('bzrlib.lock', 'Lock.hooks', 'LockHooks')
78
known_hooks.register_lazy_hook('bzrlib.merge', 'Merger.hooks', 'MergeHooks')
79
known_hooks.register_lazy_hook(
80
'bzrlib.msgeditor', 'hooks', 'MessageEditorHooks')
81
known_hooks.register_lazy_hook(
82
'bzrlib.mutabletree', 'MutableTree.hooks', 'MutableTreeHooks')
83
known_hooks.register_lazy_hook(
84
'bzrlib.smart.client', '_SmartClient.hooks', 'SmartClientHooks')
85
known_hooks.register_lazy_hook(
86
'bzrlib.smart.server', 'SmartTCPServer.hooks', 'SmartServerHooks')
87
known_hooks.register_lazy_hook(
88
'bzrlib.status', 'hooks', 'StatusHooks')
89
known_hooks.register_lazy_hook(
90
'bzrlib.version_info_formats.format_rio', 'RioVersionInfoBuilder.hooks',
91
'RioVersionInfoBuilderHooks')
92
known_hooks.register_lazy_hook(
93
'bzrlib.merge_directive', 'BaseMergeDirective.hooks', 'MergeDirectiveHooks')
67
96
def known_hooks_key_to_object((module_name, member_name)):
71
100
the known_hooks registry.
72
101
:return: The object this specifies.
74
return registry._LazyObjectGetter(module_name, member_name).get_obj()
77
def known_hooks_key_to_parent_and_attribute((module_name, member_name)):
78
"""Convert a known_hooks key to a object.
80
:param key: A tuple (module_name, member_name) as found in the keys of
81
the known_hooks registry.
82
:return: The object this specifies.
84
member_list = member_name.rsplit('.', 1)
85
if len(member_list) == 2:
86
parent_name, attribute = member_list
89
attribute = member_name
90
parent = known_hooks_key_to_object((module_name, parent_name))
91
return parent, attribute
103
return pyutils.get_named_object(module_name, member_name)
106
@symbol_versioning.deprecated_function(symbol_versioning.deprecated_in((2, 3)))
107
def known_hooks_key_to_parent_and_attribute(key):
108
"""See KnownHooksRegistry.key_to_parent_and_attribute."""
109
return known_hooks.key_to_parent_and_attribute(key)
94
112
class Hooks(dict):