Part of bzrlib
Functionality to create lazy evaluation objects.
This includes waiting to import a module until it is actually used.
Most commonly, the 'lazy_import' function is used to import other modules
in an on-demand fashion. Typically use looks like:
from bzrlib.lazy_import import lazy_import
lazy_import(globals(), '''
from bzrlib import (
errors,
osutils,
branch,
)
import bzrlib.branch
''')
Then 'errors, osutils, branch' and 'bzrlib' will exist as lazy-loaded
objects which will be replaced with a real object on first use.
In general, it is best to only load modules in this way. This is because
it isn't safe to pass these variables to other functions before they
have been replaced. This is especially true for constants, sometimes
true for classes or functions (when used as a factory, or you want
to inherit from them).
| Line # | Kind | Name | Docs |
|---|---|---|---|
| 44 | Class | ScopeReplacer | A lazy object that will replace itself in the appropriate scope. |
| 128 | Class | ImportReplacer | This is designed to replace only a portion of an import list. |
| 211 | Class | ImportProcessor | Convert text that users input into lazy import requests |
| 367 | Function | lazy_import | Create lazy imports for all of the imports in text. |
Create lazy imports for all of the imports in text.
This is typically used as something like:
from bzrlib.lazy_import import lazy_import
lazy_import(globals(), '''
from bzrlib import (
foo,
bar,
baz,
)
import bzrlib.branch
import bzrlib.transport
''')
Then 'foo, bar, baz' and 'bzrlib' will exist as lazy-loaded
objects which will be replaced with a real object on first use.
In general, it is best to only load modules in this way. This is
because other objects (functions/classes/variables) are frequently
used without accessing a member, which means we cannot tell they
have been used.