(cls: Type[Any])
| 155 | |
| 156 | |
| 157 | def _resolve_for_abstract_or_classical(cls: Type[Any]) -> Optional[Type[Any]]: |
| 158 | if cls is object: |
| 159 | return None |
| 160 | |
| 161 | sup: Optional[Type[Any]] |
| 162 | |
| 163 | if cls.__dict__.get("__abstract__", False): |
| 164 | for base_ in cls.__bases__: |
| 165 | sup = _resolve_for_abstract_or_classical(base_) |
| 166 | if sup is not None: |
| 167 | return sup |
| 168 | else: |
| 169 | return None |
| 170 | else: |
| 171 | clsmanager = _dive_for_cls_manager(cls) |
| 172 | |
| 173 | if clsmanager: |
| 174 | return clsmanager.class_ |
| 175 | else: |
| 176 | return cls |
| 177 | |
| 178 | |
| 179 | def _get_immediate_cls_attr( |
no test coverage detected