(self)
| 925 | self.class_name_blacklist = class_name_blacklist |
| 926 | |
| 927 | def parse(self): |
| 928 | if self.module in _visited_objects: |
| 929 | return |
| 930 | _visited_objects.append(self.module) |
| 931 | logger.debug("Parsing '%s' module" % self.module.__name__) |
| 932 | for name, member in inspect.getmembers(self.module): |
| 933 | if (inspect.isfunction(member) or inspect.isclass(member)) and name != member.__name__: |
| 934 | self.alias.append(AliasStubsGenerator(name, member)) |
| 935 | elif inspect.ismodule(member): |
| 936 | m = ModuleStubsGenerator(member) |
| 937 | if m.module.__name__.split(".")[:-1] == self.module.__name__.split("."): |
| 938 | self.submodules.append(m) |
| 939 | else: |
| 940 | self.imported_modules += [m.module.__name__] |
| 941 | logger.debug( |
| 942 | "Skip '%s' module while parsing '%s' " |
| 943 | % (m.module.__name__, self.module.__name__) |
| 944 | ) |
| 945 | elif inspect.isbuiltin(member) or inspect.isfunction(member): |
| 946 | self.free_functions.append( |
| 947 | FreeFunctionStubsGenerator(name, member, self.module.__name__) |
| 948 | ) |
| 949 | elif inspect.isclass(member): |
| 950 | if member.__module__ == self.module.__name__: |
| 951 | if ( |
| 952 | member.__name__ not in self.class_name_blacklist |
| 953 | and member.__name__.isidentifier() |
| 954 | ): |
| 955 | self.classes.append(ClassStubsGenerator(member)) |
| 956 | else: |
| 957 | self.imported_classes[name] = member |
| 958 | elif name == "__doc__": |
| 959 | self.doc_string = member |
| 960 | elif name not in self.attributes_blacklist: |
| 961 | self.attributes.append(AttributeStubsGenerator(name, member)) |
| 962 | |
| 963 | for x in itertools.chain( |
| 964 | self.submodules, self.classes, self.free_functions, self.attributes |
| 965 | ): |
| 966 | x.parse() |
| 967 | |
| 968 | def class_ordering( |
| 969 | a, b |
| 970 | ): # type: (ClassStubsGenerator, ClassStubsGenerator) -> int |
| 971 | if a.klass is b.klass: |
| 972 | return 0 |
| 973 | if issubclass(a.klass, b.klass): |
| 974 | return -1 |
| 975 | if issubclass(b.klass, a.klass): |
| 976 | return 1 |
| 977 | return 0 |
| 978 | |
| 979 | # reorder classes so base classes would be printed before derived |
| 980 | # print([ k.klass.__name__ for k in self.classes ]) |
| 981 | for i in range(len(self.classes)): |
| 982 | for j in range(i + 1, len(self.classes)): |
| 983 | if class_ordering(self.classes[i], self.classes[j]) < 0: |
| 984 | t = self.classes[i] |
no test coverage detected