~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/registry.py

  • Committer: John Arbash Meinel
  • Date: 2006-10-13 00:25:45 UTC
  • mto: This revision was merged to the branch mainline in revision 2074.
  • Revision ID: john@arbash-meinel.com-20061013002545-025556fc8e5b9d83
Updated HACKING and docstrings per Martin's suggestions

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
 
20
20
class _ObjectGetter(object):
21
 
    """Hang onto an object, and return it on request.
 
21
    """Maintain a reference to an object, and return the object on request.
22
22
 
23
23
    This is used by Registry to make plain objects function similarly
24
24
    to lazily imported objects.
70
70
class Registry(object):
71
71
    """A class that registers objects to a name.
72
72
 
73
 
    This is designed such that you can register objects in a lazy fashion,
74
 
    so that they can be imported later. While still having the help text
75
 
    available right away.
 
73
    There are many places that want to collect related objects and access them
 
74
    by a key. This class is designed to allow registering the mapping from key
 
75
    to object. It goes one step further, and allows registering a name to a
 
76
    hypothetical object which has not been imported yet. It also supports
 
77
    adding additional information at registration time so that decisions can be
 
78
    made without having to import the object (which may be expensive).
 
79
 
 
80
    The functions 'get', 'get_info', and 'get_help' also support a
 
81
    'default_key' (settable through my_registry.default_key = XXX, XXX must
 
82
    already be registered.) Calling my_registry.get() or my_registry.get(None),
 
83
    will return the entry for the default key.
76
84
    """
77
85
 
78
86
    def __init__(self):
144
152
            will be returned instead, if it exists. Otherwise KeyError will be
145
153
            raised.
146
154
        :return: The previously registered object.
 
155
        :raises ImportError: If the object was registered lazily, and there are
 
156
            problems during import.
 
157
        :raises AttributeError: If registered lazily, and the module does not
 
158
            contain the registered member.
147
159
        """
148
160
        return self._dict[self._get_key_or_default(key)].get_obj()
149
161
 
196
208
 
197
209
    default_key = property(_get_default_key, _set_default_key,
198
210
                            doc="Current value of the default key."
199
 
                                "Can be set to any existing key.")
 
211
                                " Can be set to any existing key.")