Gallery: Sequence Diagrams¶
Sequence diagrams express API calls, handshake protocols, and event ordering.
Basic handshake¶
seq_handshake.py
import engrapha_notes as en
import engrapha_diagrams as ed
seq = ed.SequenceDiagram(
width=450, height=220,
caption="Fig 6: Three-way handshake",
)
seq.actor("cl", "Client")
seq.actor("srv", "Server")
seq.message("cl", "srv", "SYN")
seq.message("srv", "cl", "SYN-ACK", arrow="dashed")
seq.message("cl", "srv", "ACK", arrow="dashed")
en.add(seq.as_flowable())

Async processing with activation bars¶
seq_async.py
import engrapha_notes as en
import engrapha_diagrams as ed
seq = ed.SequenceDiagram(
width=460, height=240,
caption="Fig 7: Async order flow",
)
seq.actor("app", "App")
seq.actor("api", "API")
seq.actor("db", "Database")
seq.actor("bus", "Bus")
seq.message("app", "api", "POST /order")
seq.activate("api")
seq.message("api", "db", "INSERT order")
seq.activate("bus")
seq.divider("Async")
seq.message("api", "bus", "enqueue: order_created")
seq.deactivate("bus")
seq.deactivate("api")
seq.message("bus", "app", "websocket: accepted", arrow="dashed")
en.add(seq.as_flowable())

Self-message¶
seq_self.py
import engrapha_notes as en
import engrapha_diagrams as ed
seq = ed.SequenceDiagram(
width=380, height=200, caption="Fig 8: Retry loop"
)
seq.actor("client", "Client")
seq.message("client", "client", "retry(3)")
en.add(seq.as_flowable())
