~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/option.py

  • Committer: Andrew Bennetts
  • Date: 2008-02-18 08:30:38 UTC
  • mto: This revision was merged to the branch mainline in revision 3756.
  • Revision ID: andrew.bennetts@canonical.com-20080218083038-tts55zsx5xrz3l2e
Lots of assorted hackery to reduce the number of imports for common operations.  Improves 'rocks', 'st' and 'help' times by ~50ms on my laptop.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
from bzrlib import (
27
27
    errors,
28
28
    log,
29
 
    registry,
 
29
    registry as _mod_registry,
30
30
    revisionspec,
31
31
    symbol_versioning,
32
32
    )
306
306
        else:
307
307
            return self.converter(value)
308
308
 
309
 
    def __init__(self, name, help, registry, converter=None,
310
 
        value_switches=False, title=None, enum_switch=True):
 
309
    def __init__(self, name, help, registry=None, converter=None,
 
310
        value_switches=False, title=None, enum_switch=True,
 
311
        lazy_registry=None):
311
312
        """
312
313
        Constructor.
313
314
 
321
322
            '--knit' can be used interchangeably.
322
323
        :param enum_switch: If true, a switch is provided with the option name,
323
324
            which takes a value.
 
325
        :param lazy_registry: A tuple of (module name, attribute name) for a
 
326
            registry to be lazily loaded.
324
327
        """
325
328
        Option.__init__(self, name, help, type=self.convert)
326
 
        self.registry = registry
 
329
        self._registry = registry
 
330
        if registry is None:
 
331
            assert lazy_registry is not None, (
 
332
                'One of registry or lazy_registry must be given.')
 
333
            self._lazy_registry = _mod_registry._LazyObjectGetter(
 
334
                *lazy_registry)
327
335
        self.name = name
328
336
        self.converter = converter
329
337
        self.value_switches = value_switches
332
340
        if self.title is None:
333
341
            self.title = name
334
342
 
 
343
    @property
 
344
    def registry(self):
 
345
        if self._registry is not None:
 
346
            return self._registry
 
347
        else:
 
348
            return self._lazy_registry.get_obj()
 
349
    
335
350
    @staticmethod
336
351
    def from_kwargs(name_, help=None, title=None, value_switches=False,
337
352
                    enum_switch=True, **kwargs):
341
356
        RegistryOption constructor.  Any other keyword arguments are treated
342
357
        as values for the option, and they value is treated as the help.
343
358
        """
344
 
        reg = registry.Registry()
 
359
        reg = _mod_registry.Registry()
345
360
        for name, switch_help in kwargs.iteritems():
346
361
            name = name.replace('_', '-')
347
362
            reg.register(name, name, help=switch_help)
434
449
    Option.OPTIONS[name] = RegistryOption(name, help, registry, **kwargs)
435
450
 
436
451
 
437
 
class MergeTypeRegistry(registry.Registry):
 
452
class MergeTypeRegistry(_mod_registry.Registry):
438
453
 
439
454
    pass
440
455