13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
"""Classes to provide name-to-object registry-like support."""
62
62
return super(_LazyObjectGetter, self).get_obj()
64
64
def _do_import(self):
66
segments = self._member_name.split('.')
69
names = [self._member_name]
70
obj = __import__(self._module_name, globals(), locals(), names)
72
for segment in segments:
73
obj = getattr(obj, segment)
65
obj = __import__(self._module_name, globals(), locals(),
68
obj = getattr(obj, self._member_name)
75
70
self._imported = True
222
217
yield key, getter.get_obj()
225
# We should not use the iteritems() implementation below (see bug
227
return sorted([(key, getter.get_obj())
228
for key, getter in self._dict.items()])
220
return sorted(self.iteritems())
230
222
def _set_default_key(self, key):
231
223
if not self._dict.has_key(key):
239
231
default_key = property(_get_default_key, _set_default_key,
240
232
doc="Current value of the default key."
241
233
" Can be set to any existing key.")
244
class FormatRegistry(Registry):
245
"""Registry specialised for handling formats."""
247
def __init__(self, other_registry=None):
248
Registry.__init__(self)
249
self._other_registry = other_registry
251
def register_lazy(self, key, module_name, member_name,
252
help=None, info=None,
253
override_existing=False):
254
# Overridden to allow capturing registrations to two seperate
255
# registries in a single call.
256
Registry.register_lazy(self, key, module_name, member_name,
257
help=help, info=info, override_existing=override_existing)
258
if self._other_registry is not None:
259
self._other_registry.register_lazy(key, module_name, member_name,
260
help=help, info=info, override_existing=override_existing)
262
def get(self, format_string):
263
r = Registry.get(self, format_string)