8.2.34 | Linux | www-data (uid:33)
👁 View: fix_import.py
📁 /snap/core20/current/lib/python3.8/lib2to3/fixes/fix_import.py
"""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, sep from ..fixer_util import FromImport, syms, token def traverse_imports(names): """ Walks over all the names imported in a dotted_as_names node. """ pending = [names] while pending: node = pending.pop() if node.type == token.NAME: yield node.value elif node.type == syms.dotted_name: yield "".join([ch.value for ch in node.children]) elif node.type == syms.dotted_as_name: pending.append(node.children[0]) elif node.type == syms.dotted_as_names: pending.extend(node.children[::-2]) else: raise AssertionError("unknown node type") class FixImport(fixer_base.BaseFix): BM_compatible = True PATTERN = """ import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > """ def start_tree(self, tree, name): super(FixImport, self).start_tree(tree, name) self.skip = "absolute_import" in tree.future_features def transform(self, node, results): if self.skip: return imp = results['imp'] if node.type == syms.import_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] if self.probably_a_local_import(imp.value): imp.value = "." + imp.value imp.changed() else: have_local = False have_absolute = False for mod_name in traverse_imports(imp): if self.probably_a_local_import(mod_name): have_local = True else: have_absolute = True if have_absolute: if have_local: # We won't handle both sibling and absolute imports in the # same statement at the moment. self.warning(node, "absolute and local imports together") return new = FromImport(".", [imp]) new.prefix = node.prefix return new def probably_a_local_import(self, imp_name): if imp_name.startswith("."): # Relative imports are certainly not local imports. return False imp_name = imp_name.split(".", 1)[0] base_path = dirname(self.filename) 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", sep, ".pyc", ".so", ".sl", ".pyd"]: if exists(base_path + ext): return True return False
← Back
💻 Terminal
📤 Upload
📂
Click or Drag & Drop
📁 /snap/core20/current/lib/python3.8/lib2to3/fixes
NameSizePermModifiedActions
📁 __pycache__/-07552026-09-01 05:21🗑 Delete
__init__.py47B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_apply.py2.3K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_asserts.py984B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_basestring.py320B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_buffer.py590B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_dict.py3.7K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_except.py3.3K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_exec.py979B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_execfile.py2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_exitfunc.py2.4K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_filter.py2.7K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_funcattrs.py644B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_future.py547B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_getcwdu.py451B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_has_key.py3.1K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_idioms.py4.8K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_import.py3.2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_imports.py5.6K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_imports2.py289B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_input.py708B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_intern.py1.1K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_isinstance.py1.6K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_itertools.py1.5K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_itertools_imports.py2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_long.py476B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_map.py3.6K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_metaclass.py8K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_methodattrs.py606B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_ne.py571B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_next.py3.1K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_nonzero.py591B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_numliterals.py768B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_operator.py3.3K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_paren.py1.2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_print.py2.8K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_raise.py2.9K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_raw_input.py454B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_reduce.py837B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_reload.py1.1K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_renames.py2.2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_repr.py613B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_set_literal.py1.7K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_standarderror.py449B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_sys_exc.py1K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_throw.py1.5K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_tuple_params.py5.4K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_types.py1.7K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_unicode.py1.2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_urllib.py8.2K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_ws_comma.py1.1K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_xrange.py2.6K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_xreadlines.py689B06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
fix_zip.py1.3K06442021-05-11 08:35👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del