@@ -54,6 +54,7 @@ class ClassInfo:
5454 methods : List [MethodInfo ] = field (default_factory = list )
5555 class_methods : List [MethodInfo ] = field (default_factory = list )
5656 properties : List [ParamInfo ] = field (default_factory = list )
57+ examples : List [str ] = field (default_factory = list )
5758
5859
5960@dataclass
@@ -460,10 +461,14 @@ def parse_module(self, module_path: str) -> Optional[ModuleInfo]:
460461 def _parse_class (self , node : ast .ClassDef ) -> Optional [ClassInfo ]:
461462 try :
462463 bases = [self ._get_annotation (b ) for b in node .bases ]
464+ raw_doc = ast .get_docstring (node ) or ""
465+ parsed_doc = self ._parse_docstring (raw_doc )
466+
463467 info = ClassInfo (
464468 name = node .name ,
465- docstring = ast . get_docstring ( node ) or "" ,
469+ docstring = parsed_doc [ "description" ] ,
466470 bases = bases ,
471+ examples = parsed_doc ["examples" ]
467472 )
468473
469474 for item in node .body :
@@ -892,21 +897,27 @@ def _render_module_granular(self, info: ModuleInfo) -> str:
892897
893898 if info .classes :
894899 lines .append ("## Classes\n " )
900+ lines .append ("<CardGroup cols={2}>" )
895901 for cls in info .classes :
896- lines .append (f"**[Dedicated Page: { cls .name } ](../classes/{ cls .name } )**\n " )
897- lines .extend (self ._render_class (cls , info .package ))
898- lines .append ("" )
902+ lines .append (f' <Card title="{ cls .name } " icon="brackets-curly" href="../classes/{ cls .name } ">' )
903+ cls_desc = sanitize_description (cls .docstring ) or "Class definition."
904+ lines .append (f" { cls_desc } " )
905+ lines .append (" </Card>" )
906+ lines .append ("</CardGroup>\n " )
899907
900908 if info .functions :
901909 lines .append ("## Functions\n " )
910+ lines .append ("<CardGroup cols={2}>" )
902911 for func in info .functions :
903- lines .append (f"**[Dedicated Page: { func .name } ()](../functions/{ func .name } )**\n " )
904- lines .extend (self ._render_function (func , info .package ))
905- lines .append ("" )
912+ lines .append (f' <Card title="{ func .name } ()" icon="function" href="../functions/{ func .name } ">' )
913+ func_desc = sanitize_description (func .docstring ) or "Function definition."
914+ lines .append (f" { func_desc } " )
915+ lines .append (" </Card>" )
916+ lines .append ("</CardGroup>\n " )
906917
907918 if info .constants :
908919 lines .extend ([
909- "## Constants" ,
920+ "### Constants" ,
910921 "" ,
911922 "| Name | Value |" ,
912923 "|------|-------|" ,
@@ -924,7 +935,7 @@ def _render_module_granular(self, info: ModuleInfo) -> str:
924935 def _render_class_page (self , cls : ClassInfo , module_info : ModuleInfo ) -> str :
925936 """Render a dedicated Class Blueprint page."""
926937 safe_docstring = escape_mdx (cls .docstring ) if cls .docstring else ""
927- desc = f"Class reference for { cls .name } "
938+ desc = sanitize_description ( cls . docstring ) or f"Class reference for { cls .name } "
928939
929940 lines = [
930941 "---" ,
@@ -935,39 +946,63 @@ def _render_class_page(self, cls: ClassInfo, module_info: ModuleInfo) -> str:
935946 "" ,
936947 f"# { cls .name } " ,
937948 "" ,
938- f"*Module: [ { module_info .short_name } ](../modules/{ module_info .short_name } )* " ,
949+ f"> Defined in the [** { module_info .short_name } ** ](../modules/{ module_info .short_name } ) module. " ,
939950 "" ,
940951 safe_docstring ,
941952 "" ,
942953 ]
943954
955+ # Add Mermaid Diagram if applicable
956+ mermaid = self ._render_mermaid_diagram (cls .name )
957+ if mermaid :
958+ lines .append (mermaid )
959+ lines .append ("" )
960+
944961 if cls .init_params :
945- lines .extend ([
946- "## Constructor" ,
947- "" ,
948- "| Parameter | Type | Required | Default |" ,
949- "|-----------|------|----------|---------|" ,
950- ])
962+ lines .append ("## Constructor\n " )
951963 for p in cls .init_params :
952- lines .append (f"| `{ p .name } ` | `{ escape_for_table (p .type , is_type = True )} ` | { 'Yes' if p .required else 'No' } | `{ escape_for_table (p .default , is_type = False ) if p .default else '-' } ` |" )
953- lines .append ("" )
964+ default_str = f' default="{ escape_for_table (p .default )} "' if p .default and p .default != "None" else ""
965+ lines .extend ([
966+ f'<ParamField query="{ p .name } " type="{ escape_for_table (p .type , is_type = True )} " required={ "{true}" if p .required else "{false}" } { default_str } >' ,
967+ f' { escape_mdx (p .description ) if p .description else "No description available." } ' ,
968+ '</ParamField>' ,
969+ ""
970+ ])
954971
955972 if cls .properties :
956- lines .extend ([
957- "## Properties" ,
958- "" ,
959- "| Property | Type |" ,
960- "|----------|------|" ,
961- ])
973+ lines .append ("## Properties\n " )
962974 for p in cls .properties :
963- lines .append (f"| `{ p .name } ` | `{ escape_for_table (p .type , is_type = True )} ` |" )
964- lines .append ("" )
975+ lines .extend ([
976+ f'<ResponseField name="{ p .name } " type="{ escape_for_table (p .type , is_type = True )} ">' ,
977+ f' { escape_mdx (p .description ) if p .description else "No description available." } ' ,
978+ '</ResponseField>' ,
979+ ""
980+ ])
965981
966- if cls .methods :
982+ if cls .methods or cls . class_methods :
967983 lines .append ("## Methods\n " )
984+ lines .append ("<CardGroup cols={2}>" )
985+ for m in cls .class_methods :
986+ lines .append (f' <Card title="{ m .name } ()" icon="function" href="../functions/{ cls .name } -{ m .name } ">' )
987+ m_desc = sanitize_description (m .docstring ) or "Class method."
988+ lines .append (f" { m_desc } " )
989+ lines .append (" </Card>" )
968990 for m in cls .methods :
969- lines .append (f"- [{ m .name } ()](../functions/{ cls .name } -{ m .name } )" )
970- lines .append ("" )
991+ lines .append (f' <Card title="{ m .name } ()" icon="function" href="../functions/{ cls .name } -{ m .name } ">' )
992+ m_desc = sanitize_description (m .docstring ) or "Instance method."
993+ lines .append (f" { m_desc } " )
994+ lines .append (" </Card>" )
995+ lines .append ("</CardGroup>\n " )
996+
997+ if cls .examples :
998+ lines .append ("## Usage\n " )
999+ if len (cls .examples ) > 1 :
1000+ lines .append ("<CodeGroup>" )
1001+ for i , ex in enumerate (cls .examples ):
1002+ lines .append (f"```python Example { i + 1 } \n { ex } \n ```" )
1003+ lines .append ("</CodeGroup>\n " )
1004+ else :
1005+ lines .append (f"```python\n { cls .examples [0 ]} \n ```\n " )
9711006
9721007 return "\n " .join (lines )
9731008
0 commit comments