Calling TM.dfd() a second time returns an empty diagram

Abierto
#385 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 3 días

Nadie ha tomado este issue todavía.

  • #386 de @markthomaschurch — cerrado sin fusionar

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

A linked pull request, #386, is already open for this issue, so the work is under way. The report identifies TM.dfd() and each element's dfd() state as the relevant entry points; review the pull request to see how it handles repeated renders and preserves state set by check().

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Description

Calling tm.dfd() a second time in the same process returns a diagram with no elements, only the empty digraph wrapper.

Reproduction

from pytm import TM, Actor, Server, Dataflow

tm = TM("example", description="d")
Dataflow(Actor("User"), Server("Web"), "Request")
tm.check()

first = tm.dfd()
second = tm.dfd()            # or tm.dfd(colormap=True), tm.dfd(levels=[1])
assert "actor_" in first
assert "actor_" in second    # fails: no nodes or edges

This affects scripts and tools that render more than one variant of the DFD from one model, such as plain and colormap versions, several levels, or per-element diagrams.

Cause

Each element's dfd() sets is_drawn = True, to avoid drawing it twice within a single pass, and nothing resets it. On the next call, every element is skipped.

Proposed fix

TM.dfd() saves each element's is_drawn before drawing and restores it afterwards. State set before drawing is preserved: duplicates hidden by onDuplicates=Action.IGNORE during check() stay hidden.

Lenguaje dominante
Python
Estrellas
1.2k
Forks
237
Merge medio
4 d 2 h
PR fusionados (30 d)
9

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de OWASP/pytm

Todos los issues de OWASP/pytm

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.