39 lines
872 B
Python
39 lines
872 B
Python
import httpx
|
|
|
|
def tree(cls, level=0):
|
|
yield cls.__name__, level
|
|
for sub_cls in cls.__subclasses__():
|
|
yield from tree(sub_cls, level+1)
|
|
|
|
|
|
def display(cls):
|
|
for cls_name, level in tree(cls):
|
|
indent = ' ' * 4 * level
|
|
print(f'{indent}{cls_name}')
|
|
|
|
|
|
def find_roots(module):
|
|
exceptions = []
|
|
for name in dir(module):
|
|
obj = getattr(module, name)
|
|
if isinstance(obj, type) and issubclass(obj, BaseException):
|
|
exceptions.append(obj)
|
|
roots = []
|
|
for exc in exceptions:
|
|
root = True
|
|
for other in exceptions:
|
|
if exc is not other and issubclass(exc, other):
|
|
root = False
|
|
break
|
|
if root:
|
|
roots.append(exc)
|
|
return roots
|
|
|
|
|
|
def main():
|
|
for exc in find_roots(httpx):
|
|
display(exc)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|