File: worker.py

package info (click to toggle)
rdkit 202503.1-5
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 220,160 kB
  • sloc: cpp: 399,240; python: 77,453; ansic: 25,517; java: 8,173; javascript: 4,005; sql: 2,389; yacc: 1,565; lex: 1,263; cs: 1,081; makefile: 580; xml: 229; fortran: 183; sh: 105
file content (77 lines) | stat: -rw-r--r-- 3,026 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import sys
import os
import argparse
import pybind11_stubgen
from pybind11_stubgen.parser.mixins.parse import ExtractSignaturesFromPybind11Docstrings
from pybind11_stubgen.printer import Printer
import importlib


"""
worker script
1st param is the temporary directory
2nd param is the module name
"""
def parse_args():
    """Parse command line arguments."""
    parser = argparse.ArgumentParser()
    parser.add_argument("--tempdir",
                        help=f"Temporary directory")
    parser.add_argument("--module-name",
                        help=f"Python module name for which stubs will be generated")
    parser.add_argument("--outer-dirs", nargs="*",
                        help=f"Outer dirs where stubs should be copied")
    parser.add_argument("--keep-incorrect-staticmethods",
                        help=f"Whether incorrectly assigned staticmethods should be kept as such",
                        action="store_true")
    args = parser.parse_args()
    return args


if __name__ == "__main__":
    args = parse_args()
    keep_incorrect_staticmethods = args.keep_incorrect_staticmethods or os.environ.get("KEEP_INCORRECT_STATICMETHODS", None)
    if isinstance(keep_incorrect_staticmethods, str):
        try:
            keep_incorrect_staticmethods = bool(int(keep_incorrect_staticmethods))
        except ValueError:
            keep_incorrect_staticmethods = False
    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
    gen_rdkit_stubs = importlib.import_module("gen_rdkit_stubs")

    if hasattr(ExtractSignaturesFromPybind11Docstrings, "parse_function_docstring"):
        parse_function_docstring_orig = ExtractSignaturesFromPybind11Docstrings.parse_function_docstring

        def parse_function_docstring_patched(self, func_name, doc_lines, **kwargs):
            doc_lines = gen_rdkit_stubs.ProcessDocLines.process(args.module_name, doc_lines, keep_incorrect_staticmethods)
            return parse_function_docstring_orig(self, func_name, doc_lines, **kwargs)

        ExtractSignaturesFromPybind11Docstrings.parse_function_docstring = parse_function_docstring_patched

    if hasattr(Printer, "print_submodule_import"):
        print_submodule_import_orig = Printer.print_submodule_import

        def print_submodule_import_patched(self, name):
            return [f"from .{name} import *"]

        Printer.print_submodule_import = print_submodule_import_patched


    stored_argv = list(sys.argv)
    try:
        sys.argv = ["",
                    "--root-suffix",
                    "",
                    "--ignore-all-errors",
                    "-o",
                    args.tempdir,
                    args.module_name]
        pybind11_stubgen.main()
    except Exception as e:
        if isinstance(e, AssertionError) or isinstance(e, ImportError):
            raise
        else:
            print(str(e))
    finally:
        sys.argv = stored_argv
    gen_rdkit_stubs.copy_stubs(os.path.join(args.tempdir, *args.module_name.split(".")), args.outer_dirs)