Browse Source

#439 start to auto-generate class documentation

Falko Schindler 2 years ago
parent
commit
7965c0a978
2 changed files with 20 additions and 2 deletions
  1. 4 2
      main.py
  2. 16 0
      website/documentation_tools.py

+ 4 - 2
main.py

@@ -21,7 +21,7 @@ from nicegui import globals as nicegui_globals
 from nicegui import ui
 from website import documentation, example_card, svg
 from website.demo import bash_window, browser_window, python_window
-from website.documentation_tools import create_anchor_name, element_demo
+from website.documentation_tools import create_anchor_name, element_demo, generate_class_doc
 from website.star import add_star
 from website.style import example_link, features, heading, link_target, section_heading, side_menu, subtitle, title
 
@@ -319,7 +319,9 @@ def documentation_page_more(name: str):
     with ui.column().classes('w-full p-8 lg:p-16 max-w-[1250px] mx-auto'):
         section_heading('Documentation', f'ui.*{name}*')
         module = importlib.import_module(f'website.more_documentation.{name}_documentation')
-        element_demo(getattr(ui, name))(getattr(module, 'main_demo'))
+        element_class = getattr(ui, name)
+        element_demo(element_class)(getattr(module, 'main_demo'))
+        generate_class_doc(element_class)
         if hasattr(module, 'more'):
             ui.markdown('## More examples').classes('mt-16')
             getattr(module, 'more')()

+ 16 - 0
website/documentation_tools.py

@@ -109,3 +109,19 @@ def load_demo(element_class: type) -> None:
     name = pascal_to_snake(element_class.__name__)
     module = importlib.import_module(f'website.more_documentation.{name}_documentation')
     element_demo(element_class)(getattr(module, 'main_demo'), more_link=name)
+
+
+def generate_class_doc(class_obj: type) -> None:
+    class_name = pascal_to_snake(class_obj.__name__)
+    subheading('Methods')
+    for name, method in class_obj.__dict__.items():
+        if name.startswith('_'):
+            continue
+        if not method.__doc__:
+            continue
+        markdown(f'''
+            ```python
+            {class_name}.{name}()
+            ```
+        ''')
+        markdown(method.__doc__)