~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/lazy_import.py

  • Committer: Jelmer Vernooij
  • Date: 2010-12-20 11:57:14 UTC
  • mto: This revision was merged to the branch mainline in revision 5577.
  • Revision ID: jelmer@samba.org-20101220115714-2ru3hfappjweeg7q
Don't use no-plugins.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006-2010 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
12
12
#
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""Functionality to create lazy evaluation objects.
18
18
 
87
87
                          " to another variable?",
88
88
                extra=e)
89
89
        obj = factory(self, scope, name)
 
90
        if obj is self:
 
91
            raise errors.IllegalUseOfScopeReplacer(name, msg="Object tried"
 
92
                " to replace itself, check it's not using its own scope.")
90
93
        if ScopeReplacer._should_proxy:
91
94
            object.__setattr__(self, '_real_obj', obj)
92
95
        scope[name] = obj
149
152
 
150
153
        :param scope: The scope that objects should be imported into.
151
154
            Typically this is globals()
152
 
        :param name: The variable name. Often this is the same as the 
 
155
        :param name: The variable name. Often this is the same as the
153
156
            module_path. 'bzrlib'
154
157
        :param module_path: A list for the fully specified module path
155
158
            ['bzrlib', 'foo', 'bar']
157
160
            None, indicating the module is being imported.
158
161
        :param children: Children entries to be imported later.
159
162
            This should be a map of children specifications.
160
 
            {'foo':(['bzrlib', 'foo'], None, 
 
163
            {'foo':(['bzrlib', 'foo'], None,
161
164
                {'bar':(['bzrlib', 'foo', 'bar'], None {})})
162
165
            }
163
166
        Examples:
170
173
            from foo import bar, baz would get translated into 2 import
171
174
            requests. On for 'name=bar' and one for 'name=baz'
172
175
        """
173
 
        if member is not None:
174
 
            assert not children, \
175
 
                'Cannot supply both a member and children'
 
176
        if (member is not None) and children:
 
177
            raise ValueError('Cannot supply both a member and children')
176
178
 
177
179
        object.__setattr__(self, '_import_replacer_children', children)
178
180
        object.__setattr__(self, '_member', member)
260
262
 
261
263
        :param import_str: The import string to process
262
264
        """
263
 
        assert import_str.startswith('import ')
 
265
        if not import_str.startswith('import '):
 
266
            raise ValueError('bad import string %r' % (import_str,))
264
267
        import_str = import_str[len('import '):]
265
268
 
266
269
        for path in import_str.split(','):
305
308
 
306
309
        :param from_str: The import string to process
307
310
        """
308
 
        assert from_str.startswith('from ')
 
311
        if not from_str.startswith('from '):
 
312
            raise ValueError('bad from/import %r' % from_str)
309
313
        from_str = from_str[len('from '):]
310
314
 
311
315
        from_module, import_list = from_str.split(' import ')