diff -r ffa851df0825 -r 2fb8b9db1c86 symbian-qemu-0.9.1-12/python-win32-2.6.1/lib/lib2to3/fixes/fix_import.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symbian-qemu-0.9.1-12/python-win32-2.6.1/lib/lib2to3/fixes/fix_import.py Fri Jul 31 15:01:17 2009 +0100 @@ -0,0 +1,64 @@ +"""Fixer for import statements. +If spam is being imported from the local directory, this import: + from spam import eggs +Becomes: + from .spam import eggs + +And this import: + import spam +Becomes: + from . import spam +""" + +# Local imports +from .. import fixer_base +from os.path import dirname, join, exists, pathsep +from ..fixer_util import FromImport + +class FixImport(fixer_base.BaseFix): + + PATTERN = """ + import_from< type='from' imp=any 'import' ['('] any [')'] > + | + import_name< type='import' imp=any > + """ + + def transform(self, node, results): + imp = results['imp'] + + if unicode(imp).startswith('.'): + # Already a new-style import + return + + if not probably_a_local_import(unicode(imp), self.filename): + # I guess this is a global import -- skip it! + return + + if results['type'].value == 'from': + # Some imps are top-level (eg: 'import ham') + # some are first level (eg: 'import ham.eggs') + # some are third level (eg: 'import ham.eggs as spam') + # Hence, the loop + while not hasattr(imp, 'value'): + imp = imp.children[0] + imp.value = "." + imp.value + node.changed() + else: + new = FromImport('.', getattr(imp, 'content', None) or [imp]) + new.set_prefix(node.get_prefix()) + node = new + return node + +def probably_a_local_import(imp_name, file_path): + # Must be stripped because the right space is included by the parser + imp_name = imp_name.split('.', 1)[0].strip() + base_path = dirname(file_path) + base_path = join(base_path, imp_name) + # If there is no __init__.py next to the file its not in a package + # so can't be a relative import. + if not exists(join(dirname(base_path), '__init__.py')): + return False + for ext in ['.py', pathsep, '.pyc', '.so', '.sl', '.pyd']: + if exists(base_path + ext): + return True + return False