| 126 | |
| 127 | |
| 128 | def _get_callable_signature(name: str, obj) -> str: |
| 129 | try: |
| 130 | _signature = _format_signature(inspect.signature(obj)) |
| 131 | except (ValueError, TypeError): |
| 132 | _signature = f'{RESET}({style.CODE}…{RESET})' |
| 133 | |
| 134 | if inspect.isclass(obj): |
| 135 | prefix = 'class ' |
| 136 | elif inspect.iscoroutinefunction(obj): |
| 137 | prefix = 'async def ' |
| 138 | elif inspect.isfunction(obj) or inspect.ismethod(obj) or inspect.isbuiltin(obj) or hasattr(obj, '__name__'): |
| 139 | prefix = 'def ' |
| 140 | else: |
| 141 | prefix = '' |
| 142 | return f'{style.KEYWORD}{prefix}{style.CALLABLE}{name}{RESET}{_signature}{RESET}' |
| 143 | |
| 144 | |
| 145 | def _format_signature(sig: inspect.Signature) -> str: |