Datastore icon is missing from SVG diagrams (absolute PNG path)
Los mantenedores suelen responder en 3 días
@markthomaschurch ya está trabajando en esto.
Desde el 9/11/2026.
- #382 de @markthomaschurch — abierto
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 20/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- data-visualization
Línea de trabajo
Start with Datastore.dfd() and inspect how it sets Graphviz node attributes for PNG and SVG output. Check the existing DFD rendering examples or tests across output formats; done means datastore nodes render without an external image path and retain the intended label and colormap behavior. An open linked pull request (#382) already addresses this issue.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
In SVG diagrams, the datastore icon is missing as soon as the SVG is opened anywhere other than the machine and checkout that generated it (another computer, a CI artifact, a web page or report). PNG output is fine.
Reproduction
./tm.py --dfd | dot -Tsvg -o dfd.svg
grep '<image' dfd.svg
<image xlink:href="/home/me/src/pytm/pytm/images/datastore_black.png" width="49.6px" height="36px" .../>
Cause
Datastore.dfd() draws the datastore by pointing Graphviz at a PNG with an absolute path (shape = none; image = ".../pytm/images/datastore_<color>.png"). With -Tpng Graphviz draws the pixels into the output; with -Tsvg it only writes a link to that file. Graphviz has no option to embed the image in SVG, and DOT image attributes can't be data: URIs.
Proposed fix
Draw datastores with Graphviz's built-in shape = cylinder, which is what the icon depicts. Graphviz draws it natively, so it renders the same in PNG, SVG, PDF and every other format, and --colormap can colour it like any other element. The PNG icons are no longer needed.
This changes the look slightly: the label moves from beside the icon (xlabel) to inside the cylinder, like other assets.
- Lenguaje dominante
- Python
- Estrellas
- 1.2k
- Forks
- 237
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 9
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de OWASP/pytm
-
Dataflow defaults overwrite values the model set explicitlyPosiblemente ocupada @markthomaschurch la tomó hace 1 día. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 30/100
Los mantenedores suelen responder en 3 días
-
Calling TM.dfd() a second time returns an empty diagramQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 25/100
Los mantenedores suelen responder en 3 días
-
Long boundary names render a literal "\n" in the DFDQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
Los mantenedores suelen responder en 3 días
-
`TM.check()` overwrites explicit Dataflow `protocol`, `dstPort` and `controls.isEncrypted` with sink defaults (regression in 1.4.0)Posiblemente ocupada @Svastikkka la tomó hace 14 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 75/100
OWASP/pytm#373 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Los mantenedores suelen responder en 3 días
Todos los issues de OWASP/pytm
Issues similares
-
15-minutes 5-minutes algorithm any-language beginner-friendly c cpp csharp easy go good first issue hacktoberfest help wanted java javascript kotlin python rust swift typescript
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Huerte/algo-solutions-python#254 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 86/100
MichaelYcJo/SpecSeal#1543 ·
-
size/s
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
sipyourdrink-ltd/bernstein#7179 ·
Los mantenedores suelen responder en 1 día
-
good first issue help wanted python up-for-grabs
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
andrewsiah/agentswarm-data-tasks#309 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día