55# %% auto #0
66__all__ = ['empty' , 'docstring' , 'parse_docstring' , 'isdataclass' , 'get_dataclass_source' , 'get_source' , 'get_name' , 'qual_name' ,
77 'docments' , 'sig_source' , 'extract_docstrings' , 'DocmentTbl' , 'DocmentList' , 'DocmentText' , 'sig2str' ,
8- 'ShowDocRenderer' , 'MarkdownRenderer' ]
8+ 'can_render' , ' ShowDocRenderer' , 'MarkdownRenderer' ]
99
1010# %% ../nbs/04_docments.ipynb #4c662acc
1111import re ,ast ,inspect
@@ -391,6 +391,16 @@ def _docstring(sym):
391391 npdoc = parse_docstring (sym )
392392 return '\n \n ' .join ([npdoc ['Summary' ], npdoc ['Extended' ]]).strip ()
393393
394+ def _unwrap_sym (sym ):
395+ if not hasattr (sym , '__signature__' ): sym = getattr (sym , '__wrapped__' , sym )
396+ return getattr (sym , 'fget' , None ) or getattr (sym , 'fset' , None ) or sym
397+
398+ def can_render (sym ):
399+ "Check if `sym` has a renderable signature"
400+ sym = _unwrap_sym (sym )
401+ try : signature (sym , eval_str = True ); return True
402+ except (ValueError , TypeError ): return False
403+
394404# %% ../nbs/04_docments.ipynb #9de89cb6
395405def _fullname (o ):
396406 module ,name = getattr (o , "__module__" , None ),qual_name (o )
@@ -399,8 +409,7 @@ def _fullname(o):
399409class ShowDocRenderer :
400410 def __init__ (self , sym , name :str | None = None , title_level :int = 3 , maxline :int = 110 ):
401411 "Show documentation for `sym`"
402- if not hasattr (sym , '__signature__' ): sym = getattr (sym , '__wrapped__' , sym )
403- sym = getattr (sym , 'fget' , None ) or getattr (sym , 'fset' , None ) or sym
412+ sym = _unwrap_sym (sym )
404413 store_attr ()
405414 self .nm = name or qual_name (sym )
406415 self .isfunc = inspect .isfunction (sym )
0 commit comments