def exec_transform_with_prettyprint( transform: Codemod, code: str, *, include_generated: bool = False, generated_code_marker: str = _DEFAULT_GENERATED_CODE_MARKER, format_code: bool = False, formatter_args: Sequence[str] = (), python_version: Optional[str] = None, ) -> Optional[str]: """ Given an instantiated codemod and a string representing a module, transform that code by executing the transform, optionally invoking the formatter and finally printing any generated warnings to stderr. If the code includes the generated marker at any spot and ``include_generated`` is not set to ``True``, the code will not be modified. If ``format_code`` is set to ``False`` or the instantiated codemod does not modify the code, the code will not be formatted. If a ``python_version`` is provided, then we will parse the module using this version. Otherwise, we will use the version of the currently executing python binary. In all cases a module will be returned. Whether it is changed depends on the input parameters as well as the codemod itself. """ if not include_generated and generated_code_marker in code: print( "WARNING: Code is generated and we are set to ignore generated code, " + "skipping!", file=sys.stderr, ) return code result = transform_module(transform, code, python_version=python_version) code: Optional[str] = (None if isinstance( result, (TransformFailure, TransformExit, TransformSkip)) else result.code) if code is not None and format_code: try: code = invoke_formatter(formatter_args, code) except Exception as ex: # Failed to format code, treat as a failure and make sure that # we print the exception for debugging. code = None result = TransformFailure( error=ex, traceback_str=traceback.format_exc(), warning_messages=result.warning_messages, ) # Finally, print the output, regardless of what happened print_execution_result(result) return code
def exec_transform_with_prettyprint( transform: Codemod, code: str, *, include_generated: bool = False, generated_code_marker: str = _DEFAULT_GENERATED_CODE_MARKER, format_code: bool = False, formatter_args: Sequence[str] = (), ) -> Optional[str]: """ Given an instantiated transform, and a code string, transform that code string by executing the transform, and then print any generated warnings to the screen. """ if not include_generated and generated_code_marker in code: print( "WARNING: Code is generated and we are set to ignore generated code, " + "skipping!", file=sys.stderr, ) return code result = transform_module(transform, code) code: Optional[str] = None if isinstance( result, (TransformFailure, TransformExit, TransformSkip) ) else result.code if code is not None and format_code: try: code = invoke_formatter(formatter_args, code) except Exception as ex: # Failed to format code, treat as a failure and make sure that # we print the exception for debugging. code = None result = TransformFailure( error=ex, traceback_str=traceback.format_exc(), warning_messages=result.warning_messages, ) # Finally, print the output, regardless of what happened print_execution_result(result) return code