From f6d3ed3b112878553c470fc1a1119221b750af04 Mon Sep 17 00:00:00 2001 From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com> Date: Tue, 28 May 2024 10:42:48 -0700 Subject: [PATCH] Generate diagram for Session base class --- .github/workflows/docs.yml | 2 + docs/_static/AindBehaviorSessionModel.svg | 71 +++++++++++++++++++++++ docs/api.base/session.rst | 5 +- docs/conf.py | 22 +++++-- pyproject.toml | 2 +- 5 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 docs/_static/AindBehaviorSessionModel.svg diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index af2c1ee4..6b8123c8 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -9,6 +9,8 @@ jobs: pages: runs-on: ubuntu-20.04 steps: + - name: Setup Graphviz + uses: ts-graphviz/setup-graphviz@v2.0.2 - id: deployment uses: sphinx-notes/pages@v3 with: diff --git a/docs/_static/AindBehaviorSessionModel.svg b/docs/_static/AindBehaviorSessionModel.svg new file mode 100644 index 00000000..f6879888 --- /dev/null +++ b/docs/_static/AindBehaviorSessionModel.svg @@ -0,0 +1,71 @@ + + + + + + +Entity Relationship Diagram created by erdantic + +Created by erdantic v1.0.3 <https://github.com/drivendataorg/erdantic> + + +aind_behavior_services.session.AindBehaviorSessionModel + + +AindBehaviorSessionModel + +version + +Literal['0.2.0'] + +experiment + +str + +experimenter + +List[str] + +date + +datetime + +root_path + +str + +remote_path + +Optional[str] + +subject + +str + +experiment_version + +str + +notes + +Optional[str] + +commit_hash + +Optional[str] + +allow_dirty_repo + +bool + +skip_hardware_validation + +bool + + + + + diff --git a/docs/api.base/session.rst b/docs/api.base/session.rst index c989c793..2335b6a3 100644 --- a/docs/api.base/session.rst +++ b/docs/api.base/session.rst @@ -1,5 +1,8 @@ AindBehaviorSessionModel -------------- +-------------------------- + +.. image:: ../_static/AindBehaviorSessionModel.svg + :target: ../_static/AindBehaviorSessionModel.svg .. autopydantic_model:: aind_behavior_services.session.AindBehaviorSessionModel :members: diff --git a/docs/conf.py b/docs/conf.py index 20fa4541..7e59209c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -9,11 +9,12 @@ import os import sys - -sys.path.insert(0, os.path.abspath("../src/DataSchemas")) +import erdantic as erd +from pydantic import BaseModel import glob -from aind_behavior_services import __version__ +sys.path.insert(0, os.path.abspath("../src/DataSchemas")) +import aind_behavior_services SOURCE_ROOT = "https://github.com/AllenNeuralDynamics/Aind.Behavior.Services/tree/main/src/DataSchemas/" @@ -21,7 +22,7 @@ project = "AIND Behavior Services" copyright = "2024, Allen Institute for Neural Dynamics" author = "Bruno Cruz" -release = __version__ +release = aind_behavior_services.__version__ # -- Generate jsons -------------------------------------------------------------- @@ -40,7 +41,7 @@ leaf_template = """ {json_file_name} -------------- +---------------------------------------------------- `Download Schema `_ @@ -111,3 +112,14 @@ def linkcode_resolve(domain, info): return None filename = info["module"].replace(".", "/") return f"{SOURCE_ROOT}/{filename}.py" + + +# -- Class diagram generation + +def export_model_diagram(model: BaseModel, root: str = "_static") -> None: + diagram = erd.create(model) + diagram.draw(f"{root}/{model.__name__}.svg") + + +_diagram_root = "_static" +export_model_diagram(aind_behavior_services.session.AindBehaviorSessionModel, _diagram_root) \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index b258475c..761e5774 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,7 @@ docs = [ 'Sphinx<7.3', 'furo', 'sphinx-jinja', - 'autodoc_pydantic', + 'autodoc_pydantic[erdantic]', 'myst_parser', 'sphinx-jsonschema', 'sphinx-copybutton'