This file is indexed.

/usr/share/pyshared/stsci/distutils/astutils.py is in python-stsci.distutils 0.3.6-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
"""AST Visitors

Currently only uses one for collecting a list of import statements.
Unfortunately two versions of this have to be implemented: One for 2.6 and up
and a different version for 2.5.
"""


import os
import sys

from distutils import log

try:
    import ast # Python >= 2.6

    def walk(filename, visitor):
        """Generate an AST for the given filename and walk over it using
        the given visitor instance.
        """

        filename = os.path.abspath(filename)

        try:
            tree = ast.parse(open(filename, 'r').read())
        except SyntaxError:
            if sys.version_info[0] < 3:
                e = sys.exc_info()[1]
                log.warn('SyntaxError while parsing file %s: %s' %
                         (filename, str(e)))
                return
            # We're probably in Python 3 and looking at a file intended for
            # Python 2.  Otherwise there's an unintended SyntaxError in the
            # file, so there are bigger problems anyways
            try:
                import lib2to3.refactor

                tool = StringRefactoringTool(
                    lib2to3.refactor.get_fixers_from_package('lib2to3.fixes'))
                tool.refactor_file(filename, write=True)
                tree = ast.parse(tool.refactored[filename])
            except ImportError:
                # Without 2to3 we can't do much more.
                # TODO: Issue a warning?
                return

        visitor.visit(tree)


    class ImportVisitor(ast.NodeVisitor):
        def __init__(self):
            self.imports = set()
            self.importfroms = set()

        def visit_Import(self, node):
            for name in node.names:
                self.imports.add((name.name, name.asname))

        def visit_ImportFrom(self, node):
            for name in node.names:
                self.importfroms.add((node.module, name.name, name.asname))

except ImportError:
    import compiler

    def walk(filename, visitor):
        tree = compiler.parseFile(filename)
        compiler.walk(tree, visitor)

    class ImportVisitor(compiler.visitor.ASTVisitor):
        def __init__(self):
            self.imports = set()
            self.importfroms = set()

        def visitImport(self, node):
            for name in node.names:
                self.imports.add(name)

        def visitFrom(self, node):
            for name in node.names:
                self.importfroms.add((node.modname, name[0], name[1]))


if sys.version_info[0] >= 3:
    try:
        import lib2to3.refactor

        class StringRefactoringTool(lib2to3.refactor.RefactoringTool):
            """A RefactoringTool that saves refactored files as strings in the
            self.refactored dict rather than outputting to actual files.

            This is used in case we're running in Python 3 and need to refactor
            a file before parsing its syntax tree.
            """

            def __init__(self, fixer_names, options=None, explicit=None):
                super(StringRefactoringTool, self).__init__(fixer_names,
                                                            options,
                                                            explicit)
                self.refactored = {}

            def write_file(self, new_text, filename, old_text, encoding=None):
                self.refactored[filename] = new_text

    except ImportError:
        pass