ž zyMah-c@s²dZddlmZddlZddlZddlZddlZddlZddlZddl m Z dd„Z Gdd „d e j ƒZ d d „Zdd d „ZdS(u Main program for 2to3. i(uwith_statementNi(urefactorc Cs:|jƒ}|jƒ}tj||||ddddƒS(u%Return a unified diff of two strings.u (original)u (refactored)ulinetermu(u splitlinesudifflibu unified_diff(uaubufilename((u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyu diff_textss    u diff_textscs_|EeZdZdZddd‡fdd†Zdd„Z‡fdd†Zd d „Z‡S( uStdoutRefactoringToolu2 A refactoring tool that can avoid overwriting its input files. Prints output to stdout. Output files can optionally be written to a different directory and or have an extra file suffix appended to their name for use in situations where you do not want to replace the input files. uc sv||_||_|r;|jtjƒ r;|tj7}n||_||_||_tt |ƒj |||ƒdS(uF Args: fixers: A list of fixers to import. options: A dict with RefactoringTool configuration. explicit: A list of fixers to run even if they are explicit. nobackups: If true no backup '.bak' files will be created for those files that are being refactored. show_diffs: Should diffs of the refactoring be printed to stdout? input_base_dir: The base directory for all input files. This class will strip this path prefix off of filenames before substituting it with output_dir. Only meaningful if output_dir is supplied. All files processed by refactor() must start with this path. output_dir: If supplied, all converted files will be written into this directory tree instead of input_base_dir. append_suffix: If supplied, all files output by this tool will have this appended to their filename. Useful for changing .py to .py3 for example by passing append_suffix='3'. N( u nobackupsu show_diffsuendswithuosusepu_input_base_diru _output_diru_append_suffixusuperuStdoutRefactoringToolu__init__( uselfufixersuoptionsuexplicitu nobackupsu show_diffsuinput_base_diru output_diru append_suffix(u __class__(u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyu__init__$s     uStdoutRefactoringTool.__init__cOs3|jj|||fƒ|jj|||ŽdS(N(uerrorsuappenduloggeruerror(uselfumsguargsukwargs((u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyu log_errorAsuStdoutRefactoringTool.log_errorc !s|}|jrk|j|jƒrOtjj|j|t|jƒd…ƒ}qktd||jfƒ‚n|jr„||j7}n||krΪtjj |ƒ}tjj |ƒsΔtj |ƒn|j d||ƒn|j s£|d}tjj|ƒrNytj|ƒWqNtjk rJ}z|j d|ƒWYdd}~XqNXnytj||ƒWq£tjk rŸ}z|j d||ƒWYdd}~Xq£Xntt|ƒj} | ||||ƒ|j sδtj||ƒn||krtj||ƒndS(Nu5filename %s does not start with the input_base_dir %suWriting converted %s to %s.u.bakuCan't remove backup %suCan't rename %s to %s(u _output_diru startswithu_input_base_diruosupathujoinulenu ValueErroru_append_suffixudirnameuisdirumakedirsu log_messageu nobackupsulexistsuremoveuerrorurenameusuperuStdoutRefactoringToolu write_fileushutilucopymode( uselfunew_textufilenameuold_textuencodingu orig_filenameu output_dirubackupuerruwrite(u __class__(u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyu write_fileEs@       &)  u StdoutRefactoringTool.write_filecCsή|r|jd|ƒnΑ|jd|ƒ|jrΪt|||ƒ}yi|jdk r‘|j-x|D]}t|ƒqgWtjjƒWdQXnx|D]}t|ƒq˜WWqΪt k rΦt d|fƒdSYqΪXndS(NuNo changes to %su Refactored %su+couldn't encode %s's diff for your terminal( u log_messageu show_diffsu diff_textsu output_lockuNoneuprintusysustdoutuflushuUnicodeEncodeErroruwarn(uselfuoldunewufilenameuequalu diff_linesuline((u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyu print_outputls"      u"StdoutRefactoringTool.print_output(u__name__u __module__u __qualname__u__doc__u__init__u log_erroru write_fileu print_output(u __locals__((u __class__u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyuStdoutRefactoringTools  'uStdoutRefactoringToolcCstd|fdtjƒdS(Nu WARNING: %sufile(uprintusysustderr(umsg((u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyuwarnsuwarncs­tjddƒ}|jddddddƒ|jd d dd d gdd ƒ|jddddd dddddƒ|jdddd d gddƒ|jddddddƒ|jddddddƒ|jdddddd ƒ|jd!dddd"ƒ|jd#d$dddd%ƒ|jd&d'ddd dOdd(ƒ|jd)d*dddd+d d,dd-ƒ|jd.d/dddd0ƒ|jd1dddd+d d,dd2ƒdO}i}|j|ƒ\}}|jrdP|d3<|jsψtd4ƒndP|_n|j r'|j r'|j d5ƒn|j rJ|j rJ|j d6ƒn|j rj|j rjtd7ƒn|j r|j r|j d8ƒn|jrΡtd9ƒx!tjˆƒD]}t|ƒq°W|sΡd:Sn|std;d<tjƒtd=d<tjƒd>Sd?|kr6dP}|jr6td@d<tjƒd>Sn|jrLdP|dAέsumain..uallu.fix_u7Output in %r will mirror the input directory %r layout.uinput_base_diru output_diru append_suffixu+Sorry, -j isn't supported on this platform.FT(5uoptparseu OptionParseru add_optionuFalseu parse_argsuwrite_unchanged_filesuTrueuwriteuwarnu output_diru nobackupsuerroru add_suffixuno_diffsu list_fixesuprinturefactoruget_all_fix_namesusysustderruprint_functionuverboseulogginguDEBUGuINFOu basicConfigu getLoggerusetuget_fixers_from_packageunofixufixuadduunionu differenceuosupathu commonprefixuendswithusepuisdirudirnameurstripuinfouStdoutRefactoringToolusorteduerrorsurefactor_stdinu doctests_onlyu processesuMultiprocessingUnsupportedu summarizeuintubool(u fixer_pkguargsuparserurefactor_stdinuflagsuoptionsufixnameuleveluloggeru avail_fixesuunwanted_fixesuexplicitu all_presentufixu requestedu fixer_namesuinput_base_dirurt((u fixer_pkgu1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyumain…sΚ               "              umain(u__doc__u __future__uwith_statementusysuosudifflibuloggingushutiluoptparseuurefactoru diff_textsuMultiprocessRefactoringTooluStdoutRefactoringTooluwarnuNoneumain(((u1/opt/alt/python33/lib64/python3.3/lib2to3/main.pyus       g