~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/lazy_import.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-09-27 19:48:46 UTC
  • mfrom: (2045.1.3 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20060927194846-b26e0ca2dd3f8519
Lukáš Lalinský: TransportNotPossible has a bad docstring

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006 by Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
40
40
    to inherit from them).
41
41
"""
42
42
 
 
43
import re
 
44
import sys
 
45
 
 
46
from bzrlib import (
 
47
    errors,
 
48
    )
 
49
 
43
50
 
44
51
class ScopeReplacer(object):
45
52
    """A lazy object that will replace itself in the appropriate scope.
48
55
    needed.
49
56
    """
50
57
 
51
 
    __slots__ = ('_scope', '_factory', '_name', '_real_obj')
52
 
 
53
 
    # Setting this to True will allow you to do x = y, and still access members
54
 
    # from both variables. This should not normally be enabled, but is useful
55
 
    # when building documentation.
56
 
    _should_proxy = False
 
58
    __slots__ = ('_scope', '_factory', '_name')
57
59
 
58
60
    def __init__(self, scope, factory, name):
59
61
        """Create a temporary object in the specified scope.
67
69
        self._scope = scope
68
70
        self._factory = factory
69
71
        self._name = name
70
 
        self._real_obj = None
71
72
        scope[name] = self
72
73
 
73
74
    def _replace(self):
87
88
                          " to another variable?",
88
89
                extra=e)
89
90
        obj = factory(self, scope, name)
90
 
        if ScopeReplacer._should_proxy:
91
 
            self._real_obj = obj
92
91
        scope[name] = obj
93
92
        return obj
94
93
 
100
99
        # del self._name
101
100
 
102
101
    def __getattribute__(self, attr):
103
 
        obj = object.__getattribute__(self, '_real_obj')
104
 
        if obj is None:
105
 
            _replace = object.__getattribute__(self, '_replace')
106
 
            obj = _replace()
107
 
            _cleanup = object.__getattribute__(self, '_cleanup')
108
 
            _cleanup()
 
102
        _replace = object.__getattribute__(self, '_replace')
 
103
        obj = _replace()
 
104
        _cleanup = object.__getattribute__(self, '_cleanup')
 
105
        _cleanup()
109
106
        return getattr(obj, attr)
110
107
 
111
108
    def __call__(self, *args, **kwargs):
380
377
    # This is just a helper around ImportProcessor.lazy_import
381
378
    proc = ImportProcessor(lazy_import_class=lazy_import_class)
382
379
    return proc.lazy_import(scope, text)
383
 
 
384
 
 
385
 
# The only module that this module depends on is 'bzrlib.errors'. But it
386
 
# can actually be imported lazily, since we only need it if there is a
387
 
# problem.
388
 
 
389
 
lazy_import(globals(), """
390
 
from bzrlib import errors
391
 
""")