def test_generate_to_memory(self): # type: () -> None data = """ [ { "path": "pkg/thing.py", "line": 422, "func_name": "my_function", "type_comments": [ "(List[int], str) -> None" ], "samples": 3 } ] """ with self.temporary_json_file(data) as source_path: output_data = generate_annotations_json_string(source_path) assert output_data == [{ "path": "pkg/thing.py", "line": 422, "func_name": "my_function", "signature": { "arg_types": ["List[int]", "str"], "return_type": "None" }, "samples": 3 }] with self.temporary_json_file(data) as source_path: output_data = generate_annotations_json_string(source_path, only_simple=True) assert output_data == []
def main(args_override=None): # type: (Optional[List[str]]) -> None # Parse command line. args = parser.parse_args(args_override) if not args.files and not args.dump: parser.error("At least one file/directory is required") if args.python_version not in ('2', '3'): sys.exit('--python-version must be 2 or 3') annotation_style = 'py' + args.python_version # Set up logging handler. level = logging.DEBUG if args.verbose else logging.INFO logging.basicConfig(format='%(message)s', level=level) if args.dump: dump_annotations(args.type_info, args.files) return if args.auto_any: fixers = ['pyannotate_tools.fixes.fix_annotate'] else: # Produce nice error message if type_info.json not found. try: with open(args.type_info) as f: contents = f.read() except IOError as err: sys.exit("Can't open type info file: %s" % err) # Run pass 2 with output into a variable. if args.uses_signature: data = json.loads(contents) # type: List[Any] else: data = generate_annotations_json_string( args.type_info, only_simple=args.only_simple) # Run pass 3 with input from that variable. FixAnnotateJson.init_stub_json_from_data(data, args.files[0]) fixers = ['pyannotate_tools.fixes.fix_annotate_json'] flags = {'print_function': args.print_function, 'annotation_style': annotation_style} rt = ModifiedRefactoringTool( fixers=fixers, options=flags, explicit=fixers, nobackups=True, show_diffs=not args.quiet) if not rt.errors: with FixAnnotateJson.max_line_drift_set(args.max_line_drift): rt.refactor(args.files, write=args.write, num_processes=args.processes) if args.processes == 1: rt.summarize() else: logging.info("(In multi-process per-file warnings are lost)") if not args.write: logging.info("NOTE: this was a dry run; use -w to write files")
def main(args_override=None): # type: (Optional[List[str]]) -> None # Parse command line. args = parser.parse_args(args_override) if not args.files: parser.error("At least one file/directory is required") # Set up logging handler. level = logging.DEBUG if args.verbose else logging.INFO logging.basicConfig(format='%(message)s', level=level) # Run pass 2 with output into a variable. infile = args.type_info data = generate_annotations_json_string(infile) # type: List[Any] # Run pass 3 with input from that variable. FixAnnotateJson.init_stub_json_from_data(data, args.files[0]) fixers = ['pyannotate_tools.fixes.fix_annotate_json'] flags = {'print_function': args.print_function} rt = StdoutRefactoringTool(fixers=fixers, options=flags, explicit=fixers, nobackups=True, show_diffs=not args.quiet) if not rt.errors: rt.refactor(args.files, write=args.write, num_processes=args.processes) if args.processes == 1: rt.summarize() else: logging.info("(In multi-process per-file warnings are lost)") if not args.write: logging.info("NOTE: this was a dry run; use -w to write files")