(fixer_pkg, args=None)
return int(bool(rt.errors))
Main program.

    Args:
        fixer_pkg: the name of a package where the fixers are located.
        args: optional; a list of command line arguments. If omitted,
              sys.argv[1:] is used.

    Returns a suggested exit status (0, 1, 2).
Main program.
Main program .
def main(fixer_pkg, args=None):
    """Main program.

    Args:
        fixer_pkg: the name of a package where the fixers are located.
        args: optional; a list of command line arguments. If omitted,
              sys.argv[1:] is used.

    Returns a suggested exit status (0, 1, 2).
    """
    # Set up option parser
    parser = optparse.OptionParser(usage="2to3 [options] file|dir ...")
    parser.add_option("-d", "--doctests_only", action="store_true",
                      help="Fix up doctests only")
    parser.add_option("-f", "--fix", action="append", default=[],
                      help="Each FIX specifies a transformation; default: all")
    parser.add_option("-j", "--processes", action="store", default=1,
                      type="int", help="Run 2to3 concurrently")
    parser.add_option("-x", "--nofix", action="append", default=[],
                      help="Prevent a transformation from being run")
    parser.add_option("-l", "--list-fixes", action="store_true",
                      help="List available transformations")
    parser.add_option("-p", "--print-function", action="store_true",
                      help="Modify the grammar so that print() is a function")
    parser.add_option("-e", "--exec-function", action="store_true",
                      help="Modify the grammar so that exec() is a function")
    parser.add_option("-v", "--verbose", action="store_true",
                      help="More verbose logging")
    parser.add_option("--no-diffs", action="store_true",
                      help="Don't show diffs of the refactoring")
    parser.add_option("-w", "--write", action="store_true",
                      help="Write back modified files")
    parser.add_option("-n", "--nobackups", action="store_true", default=False,
                      help="Don't write backups for modified files")
    parser.add_option("-o", "--output-dir", action="store", type="str",
                      default="", help="Put output files in this directory "
                      "instead of overwriting the input files.  Requires -n.")
    parser.add_option("-W", "--write-unchanged-files", action="store_true",
                      help="Also write files even if no changes were required"
                      " (useful with --output-dir); implies -w.")
    parser.add_option("--add-suffix", action="store", type="str", default="",
                      help="Append this string to all output filenames."
                      " Requires -n if non-empty.  "
                      "ex: --add-suffix='3' will generate .py3 files.")

    # Parse command line arguments
    refactor_stdin = False
    flags = {}
    options, args = parser.parse_args(args)
    if options.write_unchanged_files:
        flags["write_unchanged_files"] = True
        if not options.write:
            warn("--write-unchanged-files/-W implies -w.")
        options.write = True
    # If we allowed these, the original files would be renamed to backup names
    # but not replaced.
    if options.output_dir and not options.nobackups:
        parser.error("Can't use --output-dir/-o without -n.")
    if options.add_suffix and not options.nobackups:
        parser.error("Can't use --add-suffix without -n.")

    if not options.write and options.no_diffs:
        warn("not writing files and not printing diffs; that's not very useful")
    if not options.write and options.nobackups:
        parser.error("Can't use -n without -w")
    if options.list_fixes:
        print("Available transformations for the -f/--fix option:")
        for fixname in refactor.get_all_fix_names(fixer_pkg):
            print(fixname)
        if not args:
            return 0
    if not args:
        print("At least one file or directory argument required.", file=sys.stderr)
        print("Use --help to show usage.", file=sys.stderr)
        return 2
    if "-" in args:
        refactor_stdin = True
        if options.write:
            print("Can't write to stdin.", file=sys.stderr)
            return 2
    if options.print_function:
        flags["print_function"] = True

    if options.exec_function:
        flags["exec_function"] = True

    # Set up logging handler
    level = logging.DEBUG if options.verbose else logging.INFO
    logging.basicConfig(format='%(name)s: %(message)s', level=level)
    logger = logging.getLogger('lib2to3.main')

    # Initialize the refactoring tool
    avail_fixes = set(refactor.get_fixers_from_package(fixer_pkg))
    unwanted_fixes = set(fixer_pkg + ".fix_" + fix for fix in options.nofix)
    explicit = set()
    if options.fix:
        all_present = False
        for fix in options.fix:
            if fix == "all":
                all_present = True
            else:
                explicit.add(fixer_pkg + ".fix_" + fix)
        requested = avail_fixes.union(explicit) if all_present else explicit
    else:
        requested = avail_fixes.union(explicit)
    fixer_names = requested.difference(unwanted_fixes)
    input_base_dir = os.path.commonprefix(args)
    if (input_base_dir and not input_base_dir.endswith(os.sep)
        and not os.path.isdir(input_base_dir)):
        # One or more similar names were passed, their directory is the base.
        # os.path.commonprefix() is ignorant of path elements, this corrects
        # for that weird API.
        input_base_dir = os.path.dirname(input_base_dir)
    if options.output_dir:
        input_base_dir = input_base_dir.rstrip(os.sep)
        logger.info('Output in %r will mirror the input directory %r layout.',
                    options.output_dir, input_base_dir)
    rt = StdoutRefactoringTool(
            sorted(fixer_names), flags, sorted(explicit),
            options.nobackups, not options.no_diffs,
            input_base_dir=input_base_dir,
            output_dir=options.output_dir,
            append_suffix=options.add_suffix)

    # Refactor all files and directories passed as arguments
    if not rt.errors:
        if refactor_stdin:
            rt.refactor_stdin()
        else:
            try:
                rt.refactor(args, options.write, options.doctests_only,
                            options.processes)
            except refactor.MultiprocessingUnsupported:
                assert options.processes > 1
                print("Sorry, -j isn't supported on this platform.",
                      file=sys.stderr)
                return 1
        rt.summarize()

    # Return error status (0 if rt.errors is zero)
    return int(bool(rt.errors))
def main ( fixer_pkg , args = None ) : # Set up option parser parser = optparse . OptionParser ( usage = "2to3 [options] file|dir ..." ) parser . add_option ( "-d" , "--doctests_only" , action = "store_true" , help = "Fix up doctests only" ) parser . add_option ( "-f" , "--fix" , action = "append" , default = [ ] , help = "Each FIX specifies a transformation; default: all" ) parser . add_option ( "-j" , "--processes" , action = "store" , default = 1 , type = "int" , help = "Run 2to3 concurrently" ) parser . add_option ( "-x" , "--nofix" , action = "append" , default = [ ] , help = "Prevent a transformation from being run" ) parser . add_option ( "-l" , "--list-fixes" , action = "store_true" , help = "List available transformations" ) parser . add_option ( "-p" , "--print-function" , action = "store_true" , help = "Modify the grammar so that print() is a function" ) parser . add_option ( "-e" , "--exec-function" , action = "store_true" , help = "Modify the grammar so that exec() is a function" ) parser . add_option ( "-v" , "--verbose" , action = "store_true" , help = "More verbose logging" ) parser . add_option ( "--no-diffs" , action = "store_true" , help = "Don't show diffs of the refactoring" ) parser . add_option ( "-w" , "--write" , action = "store_true" , help = "Write back modified files" ) parser . add_option ( "-n" , "--nobackups" , action = "store_true" , default = False , help = "Don't write backups for modified files" ) parser . add_option ( "-o" , "--output-dir" , action = "store" , type = "str" , default = "" , help = "Put output files in this directory " "instead of overwriting the input files.  Requires -n." ) parser . add_option ( "-W" , "--write-unchanged-files" , action = "store_true" , help = "Also write files even if no changes were required" " (useful with --output-dir); implies -w." ) parser . add_option ( "--add-suffix" , action = "store" , type = "str" , default = "" , help = "Append this string to all output filenames." " Requires -n if non-empty.  " "ex: --add-suffix='3' will generate .py3 files." ) # Parse command line arguments refactor_stdin = False flags = { } options , args = parser . parse_args ( args ) if options . write_unchanged_files : flags [ "write_unchanged_files" ] = True if not options . write : warn ( "--write-unchanged-files/-W implies -w." ) options . write = True # If we allowed these, the original files would be renamed to backup names # but not replaced. if options . output_dir and not options . nobackups : parser . error ( "Can't use --output-dir/-o without -n." ) if options . add_suffix and not options . nobackups : parser . error ( "Can't use --add-suffix without -n." ) if not options . write and options . no_diffs : warn ( "not writing files and not printing diffs; that's not very useful" ) if not options . write and options . nobackups : parser . error ( "Can't use -n without -w" ) if options . list_fixes : print ( "Available transformations for the -f/--fix option:" ) for fixname in refactor . get_all_fix_names ( fixer_pkg ) : print ( fixname ) if not args : return 0 if not args : print ( "At least one file or directory argument required." , file = sys . stderr ) print ( "Use --help to show usage." , file = sys . stderr ) return 2 if "-" in args : refactor_stdin = True if options . write : print ( "Can't write to stdin." , file = sys . stderr ) return 2 if options . print_function : flags [ "print_function" ] = True if options . exec_function : flags [ "exec_function" ] = True # Set up logging handler level = logging . DEBUG if options . verbose else logging . INFO logging . basicConfig ( format = '%(name)s: %(message)s' , level = level ) logger = logging . getLogger ( 'lib2to3.main' ) # Initialize the refactoring tool avail_fixes = set ( refactor . get_fixers_from_package ( fixer_pkg ) ) unwanted_fixes = set ( fixer_pkg + ".fix_" + fix for fix in options . nofix ) explicit = set ( ) if options . fix : all_present = False for fix in options . fix : if fix == "all" : all_present = True else : explicit . add ( fixer_pkg + ".fix_" + fix ) requested = avail_fixes . union ( explicit ) if all_present else explicit else : requested = avail_fixes . union ( explicit ) fixer_names = requested . difference ( unwanted_fixes ) input_base_dir = os . path . commonprefix ( args ) if ( input_base_dir and not input_base_dir . endswith ( os . sep ) and not os . path . isdir ( input_base_dir ) ) : # One or more similar names were passed, their directory is the base. # os.path.commonprefix() is ignorant of path elements, this corrects # for that weird API. input_base_dir = os . path . dirname ( input_base_dir ) if options . output_dir : input_base_dir = input_base_dir . rstrip ( os . sep ) logger . info ( 'Output in %r will mirror the input directory %r layout.' , options . output_dir , input_base_dir ) rt = StdoutRefactoringTool ( sorted ( fixer_names ) , flags , sorted ( explicit ) , options . nobackups , not options . no_diffs , input_base_dir = input_base_dir , output_dir = options . output_dir , append_suffix = options . add_suffix ) # Refactor all files and directories passed as arguments if not rt . errors : if refactor_stdin : rt . refactor_stdin ( ) else : try : rt . refactor ( args , options . write , options . doctests_only , options . processes ) except refactor . MultiprocessingUnsupported : assert options . processes > 1 print ( "Sorry, -j isn't supported on this platform." , file = sys . stderr ) return 1 rt . summarize ( ) # Return error status (0 if rt.errors is zero) return int ( bool ( rt . errors ) )