~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/registry.py

  • Committer: Adeodato Simó
  • Date: 2006-08-15 17:51:35 UTC
  • mto: (1911.4.3 registry)
  • mto: This revision was merged to the branch mainline in revision 2074.
  • Revision ID: dato@net.com.org.es-20060815175135-c8390000cdf6561a
Kill fallback_key parameter in Registry.get(), as discussed with John.

This frees up the base class from unneeded complexity, and a subclass
can implement that feature should it ever be needed (there are no known
use cases at the moment).

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Classes to provide name-to-object registry-like support."""
18
18
 
19
19
 
20
 
_marker = object()
21
 
 
22
 
 
23
20
class Registry(object):
24
21
    """A class that registers objects to a name."""
25
22
 
43
40
            self._default_key = key
44
41
        self._dict[key] = object
45
42
 
46
 
    def get(self, key=None, fallback_key=_marker):
47
 
        """Return the object register()'ed by the given key.
48
 
 
49
 
        This may raise KeyError if the key is not present.
50
 
 
51
 
        :param key: The key to obtain the object for. If no object was
52
 
            registered to that key, the object registered for :param
53
 
            fallback_key:, if exists, will be returned instead.
54
 
        :param fallback_key: Key to use if an object for :param key: can't be
55
 
            found; defaults to self.default_key. Set it to None if you'd like
56
 
            to ensure an exception is raised for non-found keys.
 
43
    def get(self, key=None):
 
44
        """Return the object register()'ed to the given key.
 
45
 
 
46
        :param key: The key to obtain the object for. If no object has been
 
47
            registered to that key, the object registered for self.default_key
 
48
            will be returned instead, if it exists. Otherwise KeyError will be
 
49
            raised.
57
50
        :return: The previously registered object.
58
51
        """
59
 
        if fallback_key is _marker:
60
 
            fallback_key = self.default_key
61
 
 
62
52
        try:
63
 
            if key is None:
64
 
                return self._dict[fallback_key]
65
 
            else:
66
 
                return self._dict[key]
 
53
            return self._dict[key]
67
54
        except KeyError:
68
 
            if fallback_key is not None:
69
 
                return self._dict[fallback_key]
 
55
            if self.default_key is not None:
 
56
                return self._dict[self.default_key]
70
57
            else:
71
58
                raise
72
59
 
99
86
        """
100
87
        Registry.register(self, key, (module_name, member_name))
101
88
 
102
 
    def get(self, key=None, default_key=_marker):
 
89
    def get(self, key=None):
103
90
        """Load the module and return the object specified by the given key.
104
91
 
105
92
        May raise ImportError if there are any problems, or AttributeError if
106
93
        the module does not have the supplied member.
107
94
        """
108
 
        module_name, member_name = Registry.get(self, key, default_key)
 
95
        module_name, member_name = Registry.get(self, key)
109
96
        module = __import__(module_name, globals(), locals(), [member_name])
110
97
        if member_name:
111
98
            return getattr(module, member_name)