Esempio n. 1
0
def generate_stub_for_module(module: str, output_dir: str, quiet: bool = False,
                             add_header: bool = False, sigs: Dict[str, str] = {},
                             class_sigs: Dict[str, str] = {},
                             pyversion: Tuple[int, int] = defaults.PYTHON3_VERSION) -> None:
    if pyversion[0] == 2:
        module_path, module_all = load_python2_module_info(module)
    else:
        mod = importlib.import_module(module)
        imp.reload(mod)
        if is_c_module(mod):
            target = module.replace('.', '/') + '.pyi'
            target = os.path.join(output_dir, target)
            generate_stub_for_c_module(module_name=module,
                                       target=target,
                                       add_header=add_header,
                                       sigs=sigs,
                                       class_sigs=class_sigs)
            return target
        module_path = mod.__file__
        module_all = getattr(mod, '__all__', None)
    target = module.replace('.', '/')
    if os.path.basename(module_path) == '__init__.py':
        target += '/__init__.pyi'
    else:
        target += '.pyi'
    target = os.path.join(output_dir, target)
    generate_stub(module_path, output_dir, module_all,
                  target=target, add_header=add_header, module=module, pyversion=pyversion)
    if not quiet:
        print('Created %s' % target)
    return target
Esempio n. 2
0
def generate_stub_for_module(module: str, output_dir: str, quiet: bool = False,
                             add_header: bool = False, sigs: Dict[str, str] = {},
                             class_sigs: Dict[str, str] = {},
                             pyversion: Tuple[int, int] = defaults.PYTHON3_VERSION,
                             no_import: bool = False,
                             search_path: List[str] = [],
                             interpreter: str = sys.executable) -> None:
    target = module.replace('.', '/')
    result = find_module_path_and_all(module=module,
                                      pyversion=pyversion,
                                      no_import=no_import,
                                      search_path=search_path,
                                      interpreter=interpreter)
    if not result:
        # C module
        target = os.path.join(output_dir, target + '.pyi')
        generate_stub_for_c_module(module_name=module,
                                   target=target,
                                   add_header=add_header,
                                   sigs=sigs,
                                   class_sigs=class_sigs)
    else:
        # Python module
        module_path, module_all = result
        if os.path.basename(module_path) == '__init__.py':
            target += '/__init__.pyi'
        else:
            target += '.pyi'
        target = os.path.join(output_dir, target)
        generate_stub(module_path, output_dir, module_all,
                      target=target, add_header=add_header, module=module, pyversion=pyversion)
    if not quiet:
        print('Created %s' % target)
Esempio n. 3
0
def generate_stub_for_module(module,
                             output_dir,
                             quiet=False,
                             add_header=False,
                             sigs={},
                             class_sigs={}):
    mod = importlib.import_module(module)
    imp.reload(mod)
    if is_c_module(mod):
        target = module.replace('.', '/') + '.pyi'
        target = os.path.join(output_dir, target)
        generate_stub_for_c_module(module_name=module,
                                   target=target,
                                   add_header=add_header,
                                   sigs=sigs,
                                   class_sigs=class_sigs)
    else:
        target = module.replace('.', '/')
        if os.path.basename(mod.__file__) == '__init__.py':
            target += '/__init__.pyi'
        else:
            target += '.pyi'
        target = os.path.join(output_dir, target)
        generate_stub(mod.__file__,
                      output_dir,
                      getattr(mod, '__all__', None),
                      target=target,
                      add_header=add_header,
                      module=module)
    if not quiet:
        print('Created %s' % target)
Esempio n. 4
0
def generate_stubs(options: Options,
                   # additional args for testing
                   quiet: bool = False, add_header: bool = True) -> None:
    """Main entry point for the program."""
    mypy_opts = mypy_options(options)
    py_modules, c_modules = collect_build_targets(options, mypy_opts)

    # Collect info from docs (if given):
    sigs = class_sigs = None  # type: Optional[Dict[str, str]]
    if options.doc_dir:
        sigs, class_sigs = collect_docs_signatures(options.doc_dir)

    # Use parsed sources to generate stubs for Python modules.
    generate_asts_for_modules(py_modules, options.parse_only, mypy_opts)
    for mod in py_modules:
        assert mod.path is not None, "Not found module was not skipped"
        target = mod.module.replace('.', '/')
        if os.path.basename(mod.path) == '__init__.py':
            target += '/__init__.pyi'
        else:
            target += '.pyi'
        target = os.path.join(options.output_dir, target)
        with generate_guarded(mod.module, target, options.ignore_errors, quiet):
            generate_stub_from_ast(mod, target,
                                   options.parse_only, options.pyversion,
                                   options.include_private, add_header)

    # Separately analyse C modules using different logic.
    for mod in c_modules:
        target = mod.module.replace('.', '/') + '.pyi'
        target = os.path.join(options.output_dir, target)
        with generate_guarded(mod.module, target, options.ignore_errors, quiet):
            generate_stub_for_c_module(mod.module, target, sigs=sigs, class_sigs=class_sigs,
                                       add_header=add_header)
Esempio n. 5
0
def generate_stub_for_module(module, output_dir, quiet=False, add_header=False, sigs={},
                             class_sigs={}, pyversion=defaults.PYTHON3_VERSION):
    if pyversion[0] == 2:
        module_path, module_all = load_python2_module_info(module)
    else:
        mod = importlib.import_module(module)
        imp.reload(mod)
        if is_c_module(mod):
            target = module.replace('.', '/') + '.pyi'
            target = os.path.join(output_dir, target)
            generate_stub_for_c_module(module_name=module,
                                       target=target,
                                       add_header=add_header,
                                       sigs=sigs,
                                       class_sigs=class_sigs)
            return
        module_path = mod.__file__
        module_all = getattr(mod, '__all__', None)
    target = module.replace('.', '/')
    if os.path.basename(module_path) == '__init__.py':
        target += '/__init__.pyi'
    else:
        target += '.pyi'
    target = os.path.join(output_dir, target)
    generate_stub(module_path, output_dir, module_all,
                  target=target, add_header=add_header, module=module, pyversion=pyversion)
    if not quiet:
        print('Created %s' % target)
Esempio n. 6
0
def generate_stub_for_module(module, output_dir, quiet=False, add_header=False, sigs={},
                             class_sigs={}):
    mod = __import__(module)
    imp.reload(mod)
    components = module.split('.')
    for attr in components[1:]:
        mod = getattr(mod, attr)
    if is_c_module(mod):
        target = '/'.join(components[:-1] + [components[-1] + '.pyi'])
        target = os.path.join(output_dir, target)
        generate_stub_for_c_module(module_name=module,
                                   target=target,
                                   add_header=add_header,
                                   sigs=sigs,
                                   class_sigs=class_sigs)
    else:
        target = '/'.join(module.split('.')[:-1])
        modfnam = os.path.basename(mod.__file__)
        if modfnam == '__init__.py':
            target = os.path.join(target, module.split('.')[-1], '__init__.pyi')
        else:
            target = os.path.join(target, modfnam.replace('.py', '.pyi'))
        target = os.path.join(output_dir, target)
        generate_stub(mod.__file__, output_dir, getattr(mod, '__all__', None),
                      target=target, add_header=add_header, module=module)
    if not quiet:
        print('Created %s' % target)
Esempio n. 7
0
def generate_stub_for_module(module,
                             output_dir,
                             quiet=False,
                             add_header=False,
                             sigs={},
                             class_sigs={}):
    mod = __import__(module)
    imp.reload(mod)
    components = module.split('.')
    for attr in components[1:]:
        mod = getattr(mod, attr)
    if is_c_module(mod):
        target = '/'.join(components[:-1] + [components[-1] + '.py'])
        target = os.path.join(output_dir, target)
        generate_stub_for_c_module(module_name=module,
                                   target=target,
                                   add_header=add_header,
                                   sigs=sigs,
                                   class_sigs=class_sigs)
    else:
        target = '/'.join(module.split('.')[:-1])
        modfnam = os.path.basename(mod.__file__)
        if modfnam == '__init__.py':
            target = os.path.join(target, module.split('.')[-1], '__init__.py')
        else:
            target = os.path.join(target, modfnam)
        target = os.path.join(output_dir, target)
        generate_stub(mod.__file__,
                      output_dir,
                      getattr(mod, '__all__', None),
                      target=target,
                      add_header=add_header,
                      module=module)
    if not quiet:
        print('Created %s' % target)
Esempio n. 8
0
def generate_stub_for_module(module, output_dir, quiet=False, add_header=False, sigs={},
                             class_sigs={}):
    mod = importlib.import_module(module)
    imp.reload(mod)
    if is_c_module(mod):
        target = module.replace('.', '/') + '.pyi'
        target = os.path.join(output_dir, target)
        generate_stub_for_c_module(module_name=module,
                                   target=target,
                                   add_header=add_header,
                                   sigs=sigs,
                                   class_sigs=class_sigs)
    else:
        target = module.replace('.', '/')
        if os.path.basename(mod.__file__) == '__init__.py':
            target += '/__init__.pyi'
        else:
            target += '.pyi'
        target = os.path.join(output_dir, target)
        generate_stub(mod.__file__, output_dir, getattr(mod, '__all__', None),
                      target=target, add_header=add_header, module=module)
    if not quiet:
        print('Created %s' % target)