File tree Expand file tree Collapse file tree 2 files changed +59
-0
lines changed
20-executors/getflags/httpx-error-tree Expand file tree Collapse file tree 2 files changed +59
-0
lines changed Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python3
2+
3+ from tree import tree
4+
5+
6+ SP = '\N{SPACE} '
7+ HLIN = '\N{BOX DRAWINGS LIGHT HORIZONTAL} ' # ─
8+ ELBOW = f'\N{BOX DRAWINGS LIGHT UP AND RIGHT} { HLIN * 2 } { SP } ' # └──
9+ TEE = f'\N{BOX DRAWINGS LIGHT VERTICAL AND RIGHT} { HLIN * 2 } { SP } ' # ├──
10+ PIPE = f'\N{BOX DRAWINGS LIGHT VERTICAL} { SP * 3 } ' # │
11+
12+
13+ def cls_name (cls ):
14+ module = 'builtins.' if cls .__module__ == 'builtins' else ''
15+ return module + cls .__name__
16+
17+ def render_lines (tree_iter ):
18+ cls , _ , _ = next (tree_iter )
19+ yield cls_name (cls )
20+ prefix = ''
21+
22+ for cls , level , last in tree_iter :
23+ prefix = prefix [:4 * (level - 1 )]
24+ prefix = prefix .replace (TEE , PIPE ).replace (ELBOW , SP * 4 )
25+ prefix += ELBOW if last else TEE
26+ yield prefix + cls_name (cls )
27+
28+
29+ def draw (cls ):
30+ for line in render_lines (tree (cls )):
31+ print (line )
32+
33+
34+ if __name__ == '__main__' :
35+ draw (Exception )
Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python3
2+
3+ import httpx # make httpx classes available to .__subclasses__()
4+
5+
6+ def tree (cls , level = 0 , last_sibling = True ):
7+ yield cls , level , last_sibling
8+ subclasses = [c for c in cls .__subclasses__ ()
9+ if c .__module__ == 'httpx' or c is RuntimeError ]
10+ if subclasses :
11+ last = subclasses [- 1 ]
12+ for sub_cls in subclasses :
13+ yield from tree (sub_cls , level + 1 , sub_cls is last )
14+
15+
16+ def display (cls ):
17+ for cls , level , _ in tree (cls ):
18+ indent = ' ' * 4 * level
19+ module = 'builtins.' if cls .__module__ == 'builtins' else ''
20+ print (f'{ indent } { module } { cls .__name__ } ' )
21+
22+
23+ if __name__ == '__main__' :
24+ display (Exception )
You can’t perform that action at this time.
0 commit comments