Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jakebrinkmann/e57a59ada58e3c6af5b68849b363b9d1 to your computer and use it in GitHub Desktop.
Save jakebrinkmann/e57a59ada58e3c6af5b68849b363b9d1 to your computer and use it in GitHub Desktop.
How to render a Websequence diagram of Python code calls in Plantuml Jupyter Notebook
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "6375a639-07ad-48ca-a46a-c58c00140edc",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"\n",
"from plantuml import PlantUML"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3d5fe807-2794-47fa-8210-3ebace1c5a35",
"metadata": {},
"outputs": [],
"source": [
"text = []\n",
"\n",
"# https://stackoverflow.com/a/60931048/1533001\n",
"class SequenceOn:\n",
" autonumber = True\n",
" init_done = False\n",
"\n",
" def __init__(self,participant=\"\"):\n",
"\n",
" if not SequenceOn.init_done :\n",
" #activate if requested only once\n",
" if SequenceOn.autonumber: \n",
" text.append(\"autonumber\")\n",
"\n",
" SequenceOn.init_done = True\n",
"\n",
" #retrieve callee frame\n",
" callee_frame = sys._getframe(1)\n",
"\n",
" #method/function name\n",
" self.__funcName = callee_frame.f_code.co_name\n",
"\n",
" # look for a class name\n",
" if 'self' in callee_frame.f_locals:\n",
" self.__className = callee_frame.f_locals['self'].__class__.__name__\n",
" else:\n",
" self.__className = participant\n",
"\n",
" #retrieve the caller frame and class name of the caller\n",
" caller_frame = sys._getframe(2)\n",
"\n",
" if 'self' in caller_frame.f_locals:\n",
" self.__caller = caller_frame.f_locals['self'].__class__.__name__\n",
" else:\n",
" self.__caller = \"\"\n",
"\n",
" #print the plantuml message\n",
" activate = \"++\" if self.__caller != self.__className else \"\"\n",
" text.append(f'{self.__caller} -> {self.__className} {activate} :{self.__funcName}')\n",
"\n",
"\n",
" def __del__(self):\n",
" ''' print the return message upon destruction '''\n",
" if self.__caller != self.__className:\n",
" text.append(f'{self.__caller} <-- {self.__className} -- ')\n",
"\n",
" def note(self,msg):\n",
" text.append(f'note over {self.__className}:{msg}')\n",
"\n",
"class SequenceOff:\n",
" ''' empty class allowing to disable the trace by eg doing in the begining of a file:\n",
"\n",
" Seq = SequenceOn # enable sequence generation\n",
" Seq = SequenceOff # disable sequence generation\n",
"\n",
" and using seq for tracing instead of SequenceOn\n",
" '''\n",
" def __init__(self,participant=\"\"):\n",
" pass\n",
" def __call__(self,msg):\n",
" pass\n",
" def note(self,msg):\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d71d3cf3-c5ab-4189-8e06-3e16df236195",
"metadata": {},
"outputs": [],
"source": [
"class B:\n",
" def __init__(self):\n",
" pass\n",
"\n",
" def funcB1(self):\n",
" s = SequenceOn()\n",
"\n",
" def funcB2(self):\n",
" s = SequenceOn()\n",
" s.note(\"calling Private method\")\n",
" self.__funcB22()\n",
"\n",
" def __funcB22(self):\n",
" s = SequenceOn()\n",
"\n",
"class A:\n",
" def __init__(self):\n",
" pass\n",
" def funcA(self):\n",
"\n",
" s = SequenceOn()\n",
" b = B()\n",
" b.funcB1()\n",
" b.funcB2()\n",
"\n",
"# simple sequence\n",
"a = A()\n",
"a.funcA()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "51c4d5c4-941e-419f-80c5-00a80bc2b8bb",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import Image, display\n",
"\n",
"content = PlantUML('http://www.plantuml.com/plantuml/img/').processes(\"\\n\".join(text))\n",
"display(Image(content))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0e83c363-441e-4a41-81ee-6811b881164e",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment